p.enthalabs

hfmodem · HF data modem

W9SSJ / hfmodem

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 only AGPL-3.0-only

Modes

Supported modes

PACTOR-1/2/3 and VARA are beta. ARDOP, 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

[01 / shrike · beta · P4 experimental ### PACTOR PACTOR-1, PACTOR-2 and PACTOR-3. Partial experimental PACTOR-4; on-air PACTOR-4 mail transfer is unproven.](https://hfmodem.ssj.lol/pactor/)02 / kestrel · beta ### VARA Winlink mail, VarAC-compatible chat and passive reception at 500, 2300 and 2750 Hz.03 / besra · alpha ### ARDOP Winlink mail and passive reception.04 / sabir · experimental ### sabir OFDM and narrow FSK. The protocol is still changing.05 / brubru · experimental ### Robust Packet AX.25 packet traffic with KISS, Tracker and AGWPE hosts.[06 / bateleur · experimental ### Military waveforms, ALE and selcall MIL-STD and STANAG data modes, ALE scanning and calls, and HF selcall.](https://hfmodem.ssj.lol/stanag/)07 / lanner · experimental ### RTTY, SITOR-B and NAVTEX Passive RTTY, SITOR-B reception and NAVTEX bulletins.[08 / macagua + merlin · alpha ### Voice and CW Speech recognition, reply drafts, synthesized voice and Morse contacts. The operator approves each transmitted over.](https://hfmodem.ssj.lol/console/#voice-and-cw)

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

02

VARA

kestrel · beta

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.3.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.