Morse Code & Cipher Playbook
Encode and decode Morse, plus a Caesar shift, ROT13, and a Vigenère shift, with a tone for the Morse you just encoded.
🔒 Processed entirely in your browser — nothing you enter here is ever uploaded.
The result appears on this page after you run the tool. Nothing you enter is uploaded.
Result
About this tool
The algorithm menu opens on Morse and the operation opens on encode. Encode uppercases the text, turns a space or a newline into a slash, and looks up each remaining character in the Latin Morse table first and the Cyrillic table second. Characters in neither table are dropped. SOS becomes ... --- ... with the groups separated by spaces and no extra slash, because there is no word space inside it. Decode on this English page reads the Latin table first. ... --- ... comes back as SOS. A code that is only in the Cyrillic table, such as Є as ..-.. or Ї as .---., is still recognized on the English page as a fallback. A code in neither table becomes a question mark. The Ukrainian page reverses the order: Cyrillic first, Latin as the fallback for digits and punctuation.
Г and Ґ both encode as --. because they share that pattern, the way Ґ is sent like Г. The inverse is built so that shared pattern decodes as Г, on the Ukrainian page where the Cyrillic table is primary. On this English page the same pattern is G, because Latin is primary and G is also --.. И encodes as -.--. The player appears after a successful encode. Its WPM box opens at 20 and its pitch at 600 Hz. A dot lasts 1.2 divided by the WPM, which is 0.06 seconds at 20 WPM, and a dash lasts three dots. The tone is a sine at the pitch you set. The gaps are the player's own gaps, including a longer gap where the encoded text contains a slash. It is a browser oscillator, not a radio transmission. Punctuation and digits live in the Latin table, so a Ukrainian page still finds them through the fallback.
Caesar shifts the Latin alphabet by the slider, which opens at 3, and shifts the 33-letter Ukrainian alphabet by the same count. abc encodes to def. Case is preserved, and a character in neither alphabet is copied. Decode uses the opposite shift, and it also draws a grid of the other shifts. Each row is scored with a small list of common English and Ukrainian words, plus a point for any other token longer than two letters. The highest score is a hint, not a proof. ROT13 is the same shift function with the count fixed at 13. For English, applying it twice returns the original, because 26 is divisible by 13. For Ukrainian, 13 steps on a 33-letter alphabet does not return the original when you encode twice. Decode still reverses one step. Vigenère uses the key box, which opens as the word key. Each Latin letter is shifted by the Latin position of the next key letter, and key letters that are not in that alphabet contribute a shift of 0. Spaces do not consume a key letter. With the default key, hello encodes to rijvs: h+k, e+e, l+y, l+k, o+e. Ukrainian letters use the 33-letter alphabet and only advance the key when the key character is found there. An empty key returns the text unchanged. None of the four algorithms authenticates a message. Morse audio is a tone you can play in the page. The brute-force grid is a scored list, not a claim that one row is the intended plaintext.
Example. SOS encodes as ... --- ... and, on this English page, decodes back to SOS. At the default 20 WPM a dot is 0.06 seconds and the pitch is 600 Hz. Caesar shift 3 turns abc into def. Vigenère with the default key turns hello into rijvs.
Limit. Unknown characters are dropped when encoding Morse and become ? when decoding. Г and Ґ share --. and decode as Г. ROT13 is an involution for English letters only. The tone is a sine wave, not a keyed transmitter.
Does SOS round-trip?
Yes, on this English page. Encode writes ... --- ... and decode reads the Latin table first, so the groups come back as SOS. A code that exists only in the Cyrillic table is still accepted as a fallback. A code in neither table becomes ?.
What does the tone use for timing?
The WPM box opens at 20 and the pitch at 600. A dot is 1.2/20 = 0.06 seconds, and a dash is three times that. The player adds its own gaps around elements, letters, and slash word spaces. It is a sine oscillator in the browser.
How do Caesar and ROT13 treat Ukrainian letters?
Caesar shifts both alphabets. The Latin one has 26 letters and the Ukrainian one has 33, including ґ, є, і, and ї. ROT13 is a shift of 13. Encoding English twice returns the original. Encoding Ukrainian twice does not, because 26 is not a multiple of 33. Decode reverses a single shift of 13.
What does the default Vigenère key do to hello?
The key box opens as key. hello becomes rijvs. Spaces are copied and do not advance the key. An empty key leaves the text unchanged. Caesar decode is the mode that also shows the scored shift grid.