Morse Code Keyer – Practice Sending With Real Timing Feedback
Quick Answer: A Morse code keyer turns paddle presses into correctly timed dits and dahs. Press the dot paddle and it sends
.for exactly one unit; hold it and it repeats at your set speed. This keyer runs straight-key, iambic A, iambic B and Ultimatic modes in the browser, decodes what you send back to text as you send it, and charts your actual timing against perfect timing so you can see exactly where your fist drifts.
Sending Is a Separate Skill From Receiving
Most people learn Morse the wrong way round. They spend months on copy — listening, decoding, building recognition speed — and then pick up a paddle and discover their sending is unreadable. The two skills share a character set and nothing else. Copying is pattern recognition; sending is motor control under a clock.
The problem is that you can’t hear your own errors. Your brain knows what you meant to send, so it hears the intended character rather than the one your hand actually produced. A dah that ran to 2.1 units instead of 3 sounds fine to you and reads as ambiguous to everyone else. That’s why the timing charts below the keying surface matter more than the keyer itself — they show you the gap between what you sent and what you think you sent.
If you’re still building copy speed alongside this, the receive-side drills live on our Morse code practice tools page. Work both, in the same session, in short blocks.
Choosing a Keyer Mode
The mode dropdown changes what happens when you hold one paddle, and what happens when you squeeze both. This is the single most confusing thing about CW keyers, so here it is plainly:
| Mode | Holding one paddle | Squeezing both | Best for |
|---|---|---|---|
| Straight key | Sends for as long as you hold — you control every duration | N/A — one contact | Learning what correct timing feels like; classic and QRS operating |
| Basic iambic (no memory) | Repeats that element | Alternates dit-dah-dit-dah | Understanding squeeze keying without memory helping you |
| Iambic A | Repeats that element | Alternates, and stops after the element in progress when you release | Operators who want exactly what they asked for, nothing added |
| Iambic B | Repeats that element | Alternates, and adds one more opposite element after you release | The most common default; C, K, R and similar characters become one squeeze |
| Ultimatic | Repeats that element | Sends the element of the last paddle you pressed, continuously | Strings of same-element characters like O, S, H and 5 |
| Single-lever Ultimatic | Repeats that element | Not physically possible; dot and dash memory still apply | Single-lever paddle owners |
The A-versus-B question, settled: neither is better. Mode B came from the Curtis 8044 chip and became the default on most commercial keyers, so more operators learned on it. Mode A came from the earlier Accu-Keyer design. The practical difference shows up on one character: to send C (-.-.) in mode B you squeeze and release during the third element and the keyer supplies the fourth. In mode A you have to key all four. Pick one and stay with it — switching modes mid-learning is what produces the extra trailing dits people can’t explain.
Character Speed, Farnsworth Speed and Why They’re Separate
Two sliders control speed because two things are being timed.
Character speed sets how fast the elements inside a letter go. At 20 WPM a dit is 60 ms and a dah is 180 ms, and those durations don’t change no matter how slowly you’re actually communicating.
Farnsworth speed sets the overall pace by stretching the silence between characters and words. Set character speed to 20 and Farnsworth to 10 and you get full-speed letters with generous thinking gaps — the standard way to avoid the counting habit that caps most learners around 10 WPM. The full method is explained on our Farnsworth timing page.
For sending practice, keep character speed at 15–20 from the very beginning even if that feels fast. Your hand learns the shape of a character as a rhythm. Learn the shape slowly and you’ll have to unlearn it later.
| WPM | Dit | Dah | Gap in a letter | Gap between letters | Gap between words |
|---|---|---|---|---|---|
| 5 | 240 ms | 720 ms | 240 ms | 720 ms | 1680 ms |
| 10 | 120 ms | 360 ms | 120 ms | 360 ms | 840 ms |
| 15 | 80 ms | 240 ms | 80 ms | 240 ms | 560 ms |
| 20 | 60 ms | 180 ms | 60 ms | 180 ms | 420 ms |
| 25 | 48 ms | 144 ms | 48 ms | 144 ms | 336 ms |
| 30 | 40 ms | 120 ms | 40 ms | 120 ms | 280 ms |
| 40 | 30 ms | 90 ms | 30 ms | 90 ms | 210 ms |
The formula behind the table: dit length in milliseconds = 1200 ÷ WPM. Everything else is a multiple of it — dah is 3 units, the gap inside a letter is 1, between letters 3, between words 7. The word PARIS is exactly 50 units long, which is where the whole WPM scale comes from. Full breakdown on our Morse code timing rules page.
Reading Your Timing Charts
This is the part no paper chart and no ordinary trainer can give you.
Element Timing (Actual vs Perfect). The top row is what you sent, measured in dit units. The bottom row is what the same text should have looked like at your set speed. Hover any element for its exact duration. You’re looking for two things: elements that are the right ratio but the wrong speed — which is harmless, your fist is just faster or slower than the slider — and elements that are the wrong ratio relative to each other, which is what makes copy hard for the receiving operator.
Timing Statistics. The box plot groups every dit, dah and gap you sent and shows the spread. Red dashed lines mark the ideal 1, 3 and 7 unit durations. The box is your median and quartiles; the dots are individual samples.
What to look for, in order of how much it hurts your readability:
- Wide boxes. Inconsistency is worse than being consistently wrong. A fist that sends every dah at 2.5 units is readable; a fist that scatters dahs between 1.8 and 4 units is not.
- A dah median below 2.5 units. The classic beginner fault. Short dahs blur into dits at speed and turn T into E.
- Inter-character gaps well over 3 units. Usually means you’re thinking between letters. Harmless at first, but it caps your speed and it’s the hardest habit to remove later.
- Intra-character gaps creeping over 1 unit. This splits single letters into two, which is far more damaging than sending a letter slightly fast. C becomes N and T.
Turn Auto Character Spacing and Auto Word Spacing off once you’re past the first week. They make the output look correct while hiding your real spacing, which defeats the purpose of the charts.
Play Perfect vs Play Actual
These two buttons are the fastest feedback loop in the tool. Play Perfect renders your decoded text at flawless timing. Play Actual replays your real keying, error for error. Alternate between them on the same short string and the difference stops being a chart and becomes something you can hear.
Both can be exported as WAV files. Saving an Actual WAV once a week gives you a recording of your own progress that no accuracy percentage can capture — the improvement is audible long before it’s obvious in the numbers.
Using a Real Key or Paddle
The on-screen paddles work, but they can’t teach you the muscle timing of real contacts. If you own a key, the keyboard mapping connects it:
- Default keys are B for left and M for right. Click a key box and press any key to remap it.
- VBand and Vail adapters send Left-Ctrl and Right-Ctrl. Focus the relevant box and press that key to map it.
- Swap paddles flips dit and dah for left-handed operators, or if your adapter is wired the opposite way to your habit.
- Debounce filters contact bounce on mechanical keys. Leave it off for on-screen and clean electronic keys; turn it on at around 10 ms if a single press is registering as two elements. Setting it too high will swallow legitimate fast dits.
For straight-key work, either mapped key acts as the single contact. Hold for a dah, tap for a dit, and the decoder judges you purely on duration — no keyer is correcting anything.
A Practice Routine That Works
- Warm up on one character. Send a single letter 20 times. Check the box plot. You’re looking for a narrow box, not a correct median.
- Move to letter pairs. Combinations that share elements — like C and K, or S and H — expose spacing errors that single letters hide.
- Send your callsign or name 10 times. This is the string you’ll send most in real operating and the one worth over-learning.
- Send a short sentence and copy it back. Play Actual, write down what you hear without looking at the decoded text, then compare.
- Stop at 15 minutes. Sending fatigue produces bad habits faster than good practice removes them.
Short daily sessions beat long weekly ones by a wide margin, which is the same principle behind the Koch method on the receiving side. If you’re building both skills from zero, our guide on how to learn Morse code fast lays out a combined schedule.
Common Sending Faults
Swing. An uneven rhythm carried across characters, usually from a bug or a badly set keyer. It’s charming in a seasoned operator and confusing in a new one.
Running letters together. Inter-character gaps under 3 units merge letters into nonsense characters. Sending is not a race; the gaps carry as much information as the elements.
Speeding up on familiar words. Common words like the, and and your own callsign drift faster than the rest of your sending. The box plot catches this because those elements sit outside the main cluster.
Chasing a WPM number. Speed is an output, not a target. Consistency at 12 WPM will get you further than chaos at 25.
Privacy and Requirements
Everything runs in your browser. No keying data, decoded text or audio leaves your device, and no account is needed. Sidetone uses the Web Audio API and works in current Chrome, Safari, Firefox and Edge on desktop and mobile. On mobile, tap once anywhere on the page before keying — browsers require a user gesture before audio can start.
Frequently Asked Questions
A keyer is an electronic device, or in this case a browser tool, that converts paddle presses into perfectly timed dits and dahs. Press the dot paddle and it produces one correctly timed dit; hold it and it repeats at your set speed, so you control the sequence and the keyer controls the duration.
Both alternate dits and dahs while you squeeze both paddles. In iambic B, releasing both paddles during an element causes the keyer to add one more opposite element afterwards. In iambic A it simply finishes the element in progress and stops. Neither is better — most commercial keyers default to B.
Yes. Choose Straight Key in the mode dropdown and every duration becomes yours to control. Hold for a dah, tap for a dit, and the decoder reads your actual timing with no keyer correcting it, which is the point of straight-key practice.
Set character speed to 15-20 WPM from the start and slow your overall pace using the Farnsworth slider instead. Practicing characters slowly teaches you to count elements, a habit that becomes a hard speed ceiling later.
Yes, through a USB adapter such as VBand or Vail, which send Left-Ctrl and Right-Ctrl keystrokes. Click a key box in the tool, press that key to map it, and your physical key drives the keyer. Enable Debounce if a single press registers as two elements.
Almost always inconsistency rather than speed. The most common faults are dahs shorter than three units and gaps between letters longer than three. Check the box plot: a narrow spread matters more than a perfect median.
Between 500 and 700 Hz suits most ears, which is why the default here is 650 Hz. If you’re practicing for long sessions, drop toward 450-500 Hz to reduce fatigue. The setting has no effect on timing.
Yes. Decoded text appears live as you key, alongside the raw Morse and the symbol buffer for the character in progress. You can copy it, download it as text, or export your keying as a WAV file.
Yes, it’s free with no signup and no session limits. Everything runs locally in your browser, so nothing you send is uploaded.