Log entry ·

VardeFM: an open-source alternative to VARA FM

Too much ham radio software is closed source, so I wrote VardeFM: an open-source FM data modem that works with Winlink Express, Pat and other VARA apps as a drop-in replacement. It has made its first trips over the air, and I'm looking for people to help test it.

#software #projects

My newest project is VardeFM, an open-source, high-speed data modem for FM radios. It’s meant as a drop-in alternative to VARA FM for Winlink and similar apps.

The name comes from varde, the Norwegian word for the cairns and beacon fires that once relayed warnings from mountaintop to mountaintop. That felt fitting for a modem that passes messages between stations.

Why I built it

Amateur radio has always been about experimenting, learning and sharing what you figure out. Yet a lot of the software we depend on today is closed source. VARA is a good example: it’s become the standard for Winlink over radio, but how it works on the air is a black box. You can’t study it, improve it, port it to a new platform, or keep it alive if the author stops maintaining it.

I think that’s wrong for a hobby built on openness, so I decided to make an open alternative. VardeFM is licensed under the GPL-3.0, and the whole waveform and protocol is documented in PROTOCOL.md. Anyone can read how it works, build their own implementation, or help make it better.

Compatible with your apps, not with VARA on the air

VARA’s terms of use don’t allow reverse engineering. They say you may not “reverse compile, modify, translate, or disassemble” the software. The over-the-air protocol isn’t published either. So VardeFM isn’t based on VARA at all. It uses its own waveform, designed from scratch.

That means VardeFM can’t talk to a station running VARA FM. Both ends of the link need to run VardeFM.

What is publicly documented is the interface VARA offers to applications: a set of TCP commands on port 8300 and a data stream on port 8301. VardeFM offers the same interface, so programs that talk to VARA FM can talk to VardeFM instead without any changes. The user guide covers setting it up with Pat, Winlink Express and HamBBS.

The few differences from VARA’s interface are listed in the protocol document.

Under the hood

I made an animated video that walks through how VardeFM works:

VardeFM is written in Rust and runs on Windows, Linux, macOS and the Raspberry Pi. It’s an OFDM modem with LDPC error correction and an ARQ link layer that resends anything that doesn’t get through. It has two modes:

Mode Radio connection Net rate
Narrow Mic/speaker, works with any FM radio 0.7–7.4 kbit/s
Wide 9600 data port (flat audio) 1.9–18.7 kbit/s

Each mode has seven speed levels, and the link picks the right one from the measured signal quality. For PTT it supports CM108/CM119 and AIOC sound card interfaces, serial RTS/DTR, Hamlib’s rigctld and Linux GPIO.

Where it stands

I’ve done extensive testing locally. VardeFM has a built-in simulator that runs two modems in one process, connected through a simulated FM channel with noise and sound card clock errors. Each modem gets its own VARA ports, so two apps can connect to each other and transfer data back and forth without a radio in sight. The test suite also covers audio round trips, noisy links, clock drift and radio key-up timing.

I’ve also started testing over the air with real radios, and it works. But a few test sessions from my own shack don’t prove much. It needs a lot more testing with different radios, sound card interfaces, distances and band conditions before I’d call it ready.

Try it

Ready-made builds for Windows, Linux, macOS and the Raspberry Pi are on the releases page. The user guide in each download explains how to connect your radio, set up PTT and configure Pat, Winlink Express or HamBBS.

This is where you can help. If you can set up two stations, or want to try a link with me or someone else, I’d love to hear from you. Every report helps, whether it worked perfectly or fell over. Bug reports, ideas and pull requests are welcome on GitHub, or you can email me at contact@lb1dk.no.

73 de LB1DK