📻 CW Studio

Real-time Morse code practice with operators worldwide

Join a Practice Room

💡 First time? Try the "main" room to meet other operators

📅 Regular Schedule (UTC)

Monday
20:00 UTC
Slow Speed Net
12-18 WPM • Beginners welcome
Wednesday
20:00 UTC
Medium Speed Net
20-25 WPM • Intermediate
Friday
19:00 UTC
High Speed Net
25-35 WPM • Advanced
Sunday
14:00 UTC
Casual Ragchew
Any speed • Just for fun

Current time: --:--:-- UTC

🔧 How It Works

1

Connect

Enter your callsign and join a room - microphone access required

2

Key CW

Send Morse via audio input from your keyer or paddle

3

Hear & Decode

Real-time audio + automatic text decoding from all operators

4

Practice Together

Improve your CW skills with operators worldwide

✨ Features

Ultra-Low Latency

WebRTC P2P delivers 70-100ms latency - like real QSO conditions

🎯

Adaptive Decoding

Smart decoder adapts to your speed (12-35 WPM) automatically

🆓

Zero Cost

Free forever. No registration, no ads, no tracking

🌍

Worldwide Practice

Connect with CW operators from any continent, any time

📱

Cross-Platform

Browser-based - works on desktop, tablet, mobile

🔒

End-to-End Encrypted

SRTP audio encryption keeps your practice private

🔌 Using Real CW Gear?

Connect your USB paddle, iambic keyer, or straight key with our native Python client:

# Install dependencies
pip3 install pyaudio numpy pyserial

# Run the sender (auto-detects your keying style)
python3 cw_usb_key_sender.py main iambic-b 25 /dev/ttyUSB0

# The client handles:
# - Iambic A/B keying logic
# - Adaptive timing (12-35 WPM)
# - Audio sidetone generation
# - Network buffering & jitter compensation

📦 Download native client from GitHub

🟢 Active Rooms Now

Loading active rooms...

⚙️ Technical Specs

Audio Quality

48kHz sampling • Opus codec • 70-100ms latency

Jitter Buffer

300ms adaptive buffer • Smooth network variations

Decoder Engine

Exponential smoothing • Auto-adapts to 12-35 WPM

Network Protocol

WebRTC mesh P2P • Duration-encoded CW events

Security

DTLS-SRTP encryption • No central server decryption

Scaling

2-8 operators per room (mesh) • Cloudflare Durable Objects signaling

❓ FAQ

What equipment do I need?

Just a modern web browser and microphone access. Key CW by routing audio from your electronic keyer into your microphone input. For the best experience, use our Python client with a USB paddle or straight key.

How does the adaptive decoder work?

The decoder uses exponential smoothing to track dit duration from the shortest tones it receives. It automatically adapts to speed changes (12-35 WPM) within 3-5 characters, and adds proper inter-element spacing for accurate playback.

Why is there latency?

The 300ms jitter buffer smooths out network timing variations, ensuring clean CW without clicks or gaps. Total latency (70-100ms network + 300ms buffer) is comparable to HF propagation delays, so it feels natural for radio operators.

Can I use this for official QSOs?

This is a practice platform, not a licensed amateur radio service. Use it to improve your CW skills, then take those skills to the air!

Can I create private rooms?

Absolutely! Enter any unique room name when joining. Share the room name with your friends for private practice sessions.

Is this open source?

Yes! MIT licensed. Check out the GitHub repository for the full source code, protocol documentation, and technical deep-dives.