How Morse code works
Morse code spells each character with short and long signals: dots and dashes. The most common letters get the shortest codes, so E is a single dot and T a single dash. Everything is timed in units, where one unit is the length of a dot:
| Element | Length |
|---|---|
| Dot | 1 unit on |
| Dash | 3 units on |
| Gap inside a letter | 1 unit off |
| Gap between letters | 3 units off |
| Gap between words | 7 units off |
Speed is counted in words per minute using the word PARIS, which is exactly 50 units long. At 20 WPM a unit is 1200 / 20 = 60 ms.
How to read Morse code
- Split the words at each
/(or a long pause when listening). - Split the letters at each space (a 3-unit pause).
- Look up each code in the alphabet above, or paste the whole thing into the Morse box. It also accepts
•,·,–and_.
Use it in your code
Everything on this page is available as a free, MIT-licensed, zero-dependency npm package with TypeScript types and a CLI.
npm install @gykh/morse
import { encode, decode, toWav, toPattern } from "@gykh/morse";
encode("SOS"); // "... --- ..."
decode("-- --- .-. ... ."); // "MORSE"
toWav("CQ CQ", { wpm: 15 }); // a WAV Buffer
navigator.vibrate(toPattern("SOS"));
npx @gykh/morse "<SOS> help" --play
Frequently asked questions
What is SOS in Morse code?
... --- ...: three dots, three dashes, three dots. It is sent as one continuous signal with no gaps between the letters, so it is really the prosign <SOS>. Type <SOS> in the text box to hear the difference.
How do I translate Morse code to text?
Type or paste the Morse into the Morse box using dots and dashes, with a space between letters and a slash between words. The text appears as you type. Dots like • and dashes like – or _ also work.
How fast is Morse code?
Speed is measured in words per minute (WPM) using the word PARIS, which is 50 units long. At 20 WPM one unit, the length of a dot, is 60 ms. Beginners often start around 5 to 15 WPM.
What are prosigns?
Procedural signals: two or more letters run together with no letter gap, like <AR> (end of message), <SK> (end of contact) and <BT> (new paragraph). Some share their code with a character, so <AR> decodes as +.
What is Farnsworth timing?
Each letter is sent at the full speed, but the gaps between letters and words are stretched to slow the overall speed. Learners hear the real rhythm of every letter instead of memorizing slow dots and dashes. Try speed 20 with Farnsworth 8.
Which characters are supported?
The full ITU set: A to Z, 0 to 9 and . , ? ' ! / ( ) & : ; = + - _ " $ @, plus accented letters such as É, Ü, Ñ, Ç, Ø and Ł. Characters with no code are sent as ?.
Is my text sent to a server?
No. Translation, sound and the light all run locally in your browser. Want to share your message with a short, tidy link? Shorten it with MiniFyn.
Can I use this Morse code translator in my own code?
Yes. Install the free, MIT-licensed npm package @gykh/morse. It supports strings, buffers, streams, WAV audio, timings and a CLI, with TypeScript types. See Use it in your code above.