For the past ten years I’ve been working on Virtual Colossus, a long‑term digital‑preservation project to recreate early computing and cryptographic machines as interactive, historically accurate simulations. My latest piece is a fully interactive 3D reconstruction of the SG‑41 (“Hitlermühle” or Hitler Mill) using three.js. It’s a cipher machine that doesn’t get much attention compared to Enigma, partly because so few survived and partly because its internal mechanics are… complicated.
I wanted to create something that wasn’t just a visual model but a functional reconstruction:
every wheel, lever, and pawl is animated based on the real mechanism
the stepping logic is implemented from historical documentation
you can type plaintext and watch the machine encrypt in real time
the whole thing runs in the browser with no plugins
This project started as a way to understand how the SG‑41 actually worked, and it turned into a deep dive into mechanical cryptography, wartime engineering constraints, and some surprisingly elegant design choices.
If you’re curious about cipher machines, mechanical logic, or just like seeing obscure historical tech brought back to life, you can try it here: https://sg41.virtualcolossus.co.uk/VirtualSG41
or find out more about the technical details or other simulations
Oh man.. i love these kinds of sims.. really slick! Lovely presentation.
I thought about trying to make a sim like this for the antikythera mechanism at one point but gave up pretty quickly.
Beautifully crafted model (and the shadow from the tree outside the window is a nice touch). It is nice how the simulation is not just functional, but also mechanical.
When I try to type numbers the J key does not switch letters ↔ numbers. Maybe I’m not using the Schlüsselgerät correctly. There are some minor glitches, that could be ignored for now.
I’ve dug into this machine very closely to build the sim, the J key is not meant to switch letters to numbers, it’s just another key. It was used procedurally to denote a space as the J is rarely used in German text and can still be recognised in a word if an I is replaced. Thanks for the complement, the whole model was created part-by-part from a CT-scan of the original machine.
It does say that on wikipedia, but with no reference to where this information comes from. There is little official documentation that survived, but recently, some docs were found for the SG-41 in the Czech archives (https://www.tandfonline.com/doi/full/10.1080/01611194.2025.2557311). These state that the J was a space, that II was used to replace J, and that numbers were to be written out in full (ONE TWO). I can tell you definitively that the print wheels on the SG-41 do not have numeric characters, only A-Z. There is a numeric only version, the SG-41Z used for encoding weather reports that ONLY has 1-9 character and no letters. It may be the case that other procedures may have allowed numerics to be encoded using a set entry/exit string, but so far, I’ve been unable to find any written evidence for this.
I dug it further, and it appears using “J” as an alpha-numeric shift is an early speculation, not supported in primary sources. They all refer to “J” as “space”, as you say. They also mention a sequence to switch to digits and unshift back to characters, but I could not find any reference or examples of this sequence. Maybe the role of “J” as a special key could be just a convention between people who encode and people who decode. They could pre-agree on any semantic meaning to “J” – from space key, to alpha-numeric shift, abbreviation of “000” or anything else.
However, what is the purpose of the digits 0..9 on the front panel? Such devices are optimized, so if numbers are spelled, then the plate with 0..9 is not needed.
PS. In a more fun-side perspective, German texts need relatively few spaces, compared to other languages.
PS2. Found this → “Die rot gefärbte J-Taste wurde dazu gebraucht, Ziffern als Buchstaben darzustellen. Dazu wurde das selten gebrauchte J an Anfang und Ende der Zahl gestellt und statt der Ziffern wurde ein Buchstabe aus der Spalte genommen, wie sie über der Tastatur aufgedruckt waren, z. B. JpkqbJ für 0815.”
It’s a very good question and one I have asked myself many times! One theory I had was that the number strip was used to decipher messages from the SG-41Z, but looking at the print wheels of that version, it is not compatible with the QWERTZUIOP letters so it cannot be that.
So, it would suggest either like you’ve found listed on wikipedia/kryptogaphie.de where some sort of numeric/alpha string is used to shift into numbers mode, or possibly just so that the SG-41 model can be used to send numeric only data (encoded weather info like the SG-41Z).
I do wonder if just using the J as a starting/ending character is correct as that could potentially cause confusion. For example, if I encipher JETZTJ does that mean “now” or 3565? Obviously context of the rest of the message would help in this case.
I have yet to see a definitive reference either way so far. I have messaged the author of the quote you found to see if they know where that statement came from and if it has a valid origin.
A lot of documents I’ve found today confirm what you say - J is used for spaces and numbers are spelled completely (to avoid accidental coding error). But they also say that the specification explicitly mentions the existence of predetermined shift sequence (letter → number) and predetermined unshift sequence (number → letter). But there is no info what is this sequence. My uneducated guess is:
if numeric code is used just to make the message shorter, then these shift sequences should also be short, if J is used for spaces, the sequence could be JJ..JJ, JX..XJ or another unusual combination
it could also be that “predetermined” means that the code is part of the code table that defines how to change the pins every day; in this way this could add additional security level for all numbers typed as digits
It is pity that events that are so close to today (from historical perspective) have lost some knowledge. Maybe if there is a veteran who had actually used the device, this may resolve the issue completely. Unfortunately such veteran might be over 100 years old. The alternative is to find some document or instruction manual from that time. Such things tend to show up from time to time. Maybe now such document is dusting in unknown drawer in some home.