hfmodem

W9SSJ / hfmodem

HF data modem

PACTOR-3 and VARA mail, VarAC chat and file transfers, and HF monitoring. Listen to recorded contacts and inspect the packets, or connect a radio and try the console.

Try Winlink
Experimental prerelease · developers onlyAGPL-3.0-only
Recorded / PACTOR-340 m · September 24, 2026Open PACTOR-3 replay
PACTOR-3 data, acknowledgements and changeover with VE1YZSeconds 110–151. Peer controls answer local data. Three CRC-valid CS3 break-in packets precede the local acknowledgement and peer SL1 data. CS1 is the acknowledgement codeword; repeated CS1 replies during the changeover request do not advance its sequence.W9SSJ · TXVE1YZ · RX110.375 s · RX · P3 CS1 ACK · decoded control · 0 bit errors110.697 s · TX · P3 SL1 data · CRC pass111.625 s · RX · P3 CS6 CYCLE-TOG · decoded control · 0 bit errors111.945 s · TX · P3 SL1 data · CRC pass115.377 s · RX · P3 CS1 ACK · decoded control · 0 bit errors115.695 s · TX · P3 SL1 data · CRC pass119.124 s · RX · P3 CS4 SPEED-UP · decoded control · 0 bit errors119.445 s · TX · P3 SL2 data · CRC pass122.875 s · RX · P3 CS1 ACK · decoded control · 0 bit errors123.195 s · TX · P3 SL2 data · CRC pass126.624 s · RX · P3 CS1 ACK · decoded control · 0 bit errors126.945 s · TX · P3 SL2 data · CRC pass130.375 s · RX · P3 CS1 ACK · decoded control · 0 bit errors130.695 s · TX · P3 SL2 data · CRC pass134.125 s · RX · P3 CS3 BREAK-IN · CRC pass135.374 s · RX · P3 CS3 BREAK-IN · CRC pass136.625 s · RX · P3 CS3 BREAK-IN · CRC pass137.551 s · TX · P3 CS1 ACK · decoded control · 0 bit errors137.873 s · RX · P3 SL1 data · CRC pass138.797 s · TX · P3 CS6 CYCLE-TOG · decoded control · 0 bit errors139.123 s · RX · P3 SL1 data · CRC pass142.548 s · TX · P3 CS1 ACK · decoded control · 0 bit errors142.870 s · RX · P3 SL1 data · CRC pass146.296 s · TX · P3 CS1 ACK · decoded control · 0 bit errors146.623 s · RX · P3 SL1 data · CRC pass150.047 s · TX · P3 CS1 ACK · decoded control · 0 bit errors150.373 s · RX · P3 SL1 data · CRC pass110 s120 s130 s140 s150 s
Winlink mail with VE1YZ. One message sent, two received; acknowledged SL6 transmit. Replay includes receiver, local monitor and remote witness audio.
Recorded / VARA BW50020 m · October 25, 2026Open VARA replay
A bulletin over VARA: KQ4QWH to W9SSJ118 seconds of recorded traffic. Local transmissions on the upper row, received packets on the lower row. The exchange includes a file request, offer, data at rates up to L11, retries at lower rates, and the completion reply. Open the replay to inspect individual packets.W9SSJ · TXKQ4QWH · RX0 s30 s60 s90 s118 s
A bulletin from KQ4QWH’s BBS. File request, high-speed data, retries and completion: 2,516 bytes received and saved. This excerpt reaches L11 and includes the local completion reply.

Modes

Supported modes

PACTOR-1/2/3 and VARA are beta. ARDOP, Lanner’s RTTY/SITOR-B/NAVTEX modes, voice and CW are alpha. PACTOR-4 and all other modes are experimental. PACTOR-4 protocol and PRNG.

Mode comparison

Carrier placement, timing and mode parameters

Results

Observed results

Mail transfers, a BBS download and remotely received beacons. Explore the recordings and evidence.

01

PACTOR

shrike · beta

Mail sent and received over PACTOR-3

Winlink mail sent and received through WS8EOC over hfmodem’s PACTOR-3. Four messages also received through KB5LZK over PACTOR-1, with a normal session close.

Evidence
03

ARDOP

besra · alpha

Mail sent and received

hfmodem received messages through WW2MI and W6IDS. An outbound message through WW2MI reached its destination. Codec checks against ardopcf cover all 59 frame types in both directions.

Evidence
04

sabir

experimental

Beacon decoded at remote receivers

The hfmodem decoder recovered 40 m beacons from recordings at public receivers 103 and 302 miles away. Two transmitted gears decoded at both receivers.

Evidence

Recorded evidence

Hear the contact. Inspect the packets.

PACTOR-3 mail at SL6, VARA mail at L9, a VarAC BBS download, and ARDOP mail transfers. Each recording states what was received, what was confirmed, and what the replay cannot establish.

Browse the evidence →

Winlink mail

Install hfmodem and exchange email

Send and receive email through a Winlink radio gateway. Use Python 3.13 on macOS or Linux. Connect the FTDX10's USB CAT and audio, or the FT-891's CAT connection and an external audio interface.

Open Terminal and paste this block
python3.13 -m venv ~/hfmodem-env
. ~/hfmodem-env/bin/activate
python3 -m pip install --pre hfmodem
hfmodem winlink

The first run guides radio, callsign, licence and audio setup, saving configuration only. Grid is optional; press Enter to skip it. Choose PACTOR-3 or VARA HF and a band your antenna is ready for, then a gateway channel. Choose to receive mail or send a text message; sending asks for a recipient, subject and message. Review the final Start this mail call? prompt. Receiving mail is the default; the hidden Winlink password is kept for this session only.

Guided calls set and check Yaesu DATA USB, the data audio route, RTS PTT and saved RF power (initially 20 W). Read the startup summary; the radio settings persist. Set CAT speed to 38400 baud and watch ALC during transmission while adjusting the provisional audio drive.

In each new Terminal, run . ~/hfmodem-env/bin/activate first. Then use hfmodem winlink pactor or hfmodem winlink vara. Add --refresh for a new gateway list. With setup saved, --dry-run previews without opening radio hardware. Ctrl-C stops the call; read its transfer and teardown results. Read saved messages offline with hfmodem winlink --inbox.

VARA chat

Chat with VarAC stations

Use hfmodem's Kestrel modem to hear CQs, call a station and exchange text. Chat is included in 0.4.0.

Terminal / from the checkout root
python3.13 -m venv ~/hfmodem-env
. ~/hfmodem-env/bin/activate
python3 -m pip install -e packages/hfhost -e packages/creance -e packages/hfmodem
hfmodem console setup --transmit
hfmodem console vara chat --band 20 --bw 500 --dry-run

Setup saves your radio, callsign, licence and audio settings without transmitting. Reuse your saved Winlink setup if you have one. Choose a band your licence and antenna support.

Review the plan, then start the session:

hfmodem console vara chat --band 20 --bw 500

This opens the radio and answers incoming calls. Check the calling frequency and watch ALC during transmission.

  1. Type /heard, then /answer N for a listed CQ. Or type /cq to call CQ on a checked slot.
  2. Once connected, type text and press Enter.
  3. Use /bye to return to monitoring or /quit to exit.

Monitor & call

Monitor signals and make radio contacts

Start a passive decoder at the current dial, or select a frequency or saved peer. You can retune the radio while monitoring.

Terminal / passive reception
hfmodem console pactor monitor
hfmodem console rtty monitor --freq 14080
hfmodem console stanag4285 monitor --mode 1200L
hfmodem console monitor --list-modes

Frequencies are USB dial kHz in these examples. Set the radio's sideband and receive filter before starting; a wide 4 kHz voice passband is supported.