mercury¶
Open HF data modem that speaks VARA's TCP interface, so pat uses it unchanged
- Version recorded: 1.9.15
- Categories:
soundcard-modems,winlink - Upstream: https://github.com/Rhizomatica/mercury
What it does¶
Mercury is a soundcard modem for HF data, from Rhizomatica's HERMES project. It sends and receives OFDM data frames through your radio's audio, retries what did not arrive, and steps its speed up and down with the band -- six payload modes from a 200 Hz robust mode for the fringe up to a 2.1 kHz QAM16 mode for a good path. Programs reach it over TCP on the same two ports VARA HF uses, 8300 for commands and 8301 for data, with VARA's command set, so a program written for VARA drives it unchanged. It also has a one-to-many broadcast mode on port 8100 that Reticulum can use. It transmits. When a client asks it to connect, Mercury keys your radio on HF (through hamlib, a serial line, a CM108 sound chip, or VOX) and sends. A licence and the band plan apply. Nothing here keys the rig until you have set up rig control and run the modem and a client yourself; installing it transmits nothing.
Why you would want it¶
It is the free answer to VARA. Pat already speaks VARA HF's interface, and pat's varahf transport connects to Mercury as it is: measured here with Debian's pat 0.16.0 and Mercury 1.9.15, a peer-to-peer session carried a message between two Mercury instances wired back to back (no radio, no sound card). VARA is closed software that runs under Wine; ardopcf is the other open HF modem in this catalog. How Mercury's throughput compares with either on a real HF path has not been measured here; upstream's MODES document (in its docs directory) has its own bench figures for its modes.
Before it will work¶
An SSB transceiver with audio in and out, and a way to key it: hamlib (-R model and -A device), serial RTS (-P serial -A /dev/ttyUSB0, DigiRig-style), a CM108 sound chip's GPIO (-P cm108), or VOX. Pick the sound device with -i and -o (mercury -z lists them). A client: Pat's varahf transport, whose default address localhost:8300 is Mercury's default port. The callsign comes from the client (Pat sends MYCALL with yours), so Mercury itself needs no station file. Settings can also live in a mercury.ini in the working directory, or one named with -C; upstream's example is in the source tree as mercury.ini.example.
How it installs¶
- apt:
mercury— on kali - Kali takes Debian testing's package, 1.9.13+ds-1 (measured 2026-09-30). 1.9.13 predates the
-PPTT-method option (added in 1.9.14): it keys through hamlib (-R,-A) or leaves keying to the client, so on Kali use hamlib, pat's own hamlib keying, or VOX. The source build below is 1.9.15 and has serial-RTS and CM108 keying. - git (make) — https://github.com/Rhizomatica/mercury at
v1.9.15 - build dependencies:
build-essential,pkg-config,libasound2-dev,libpulse-dev,libhamlib-dev - the project's build system has no install rule; the binaries listed below are copied into the prefix instead
- Built on the field laptop (Parrot 7.3, GCC 14) on 2026-09-30 at v1.9.15 with
make -j2 WS_TLS=0 HAVE_HIDAPI=0under nice: exit 0, 8 seconds wall, 156 MiB peak for the largest compiler process, seven -Wformat-truncation and -Wtype-limits warnings and no errors.mercury -Vprints "Mercury Version 1.9.15 (git 8a478318)"; the binary links ALSA, PulseAudio and hamlib and nothing else outside libc. The FreeDV modem code is compiled in from upstream's tree, so the archive's libcodec2 is not used. upstream's man page (mercury.1) is not installed by this route;mercury -hprints the same options.
Binaries this produces:
mercury
Known problems¶
Mercury is not VARA on the air. It speaks VARA's TCP interface to your software, not VARA's waveform to the other station. A Winlink gateway that runs only VARA cannot be reached with it, and Pat's gateway list (rmslist) does not say which gateways run Mercury. What it reaches is another Mercury: a HERMES station, or another operator running it, peer to peer. Whether any Winlink RMS gateway runs Mercury has not been measured here. Two different Mercury releases talking to each other has not been measured either, and upstream changed the ARQ link's turn-taking in each of 1.9.14, 1.9.15 and 1.9.16.
Kali's package is 1.9.13, older than the source build everywhere else, and has no -P option: key through hamlib, Pat or VOX there. 1.9.16 adds "never leave the transmitter keyed on a forced exit" to upstream's changelog; 1.9.15 has "unkey on shutdown". After killing Mercury by force, check the radio is back on receive.
Pat logs "got a vara command I wasn't expecting" for Mercury's SN and BITRATE status lines and connects anyway; Mercury answers Pat's CWID ON with WRONG (it has no CW ID) and carries on. Both were seen in the back-to-back test and neither stopped the session. A one-line message took about two minutes from connect to disconnect on that simulated clean channel.
Mercury keeps a chat history in ~/.local/state/mercury/messages.jsonl (the [store] section of the ini turns it off). Its channel-busy detector is off by default, as VARA's is: listen before you connect. The CM108 keying path needs a udev rule for the HID device if Mercury does not run as root; upstream says so, and none is installed here.
The web interface upstream links to (rhizomatica.github.io/mercury/app) is a page served from the internet that drives a modem on your machine over a WebSocket, which Mercury opens only with -G; the modem does not need it.
Keeping it current¶
- probe: github release (
Rhizomatica/mercury) - strategy: rebuild
- Releases are frequent (five between 2026-08-16 and 2026-09-28), and 1.9.14 to 1.9.16 each changed how the ARQ link takes turns and keys. Move the pin to the release Debian unstable packages, not to the newest tag, and rebuild; head commit read from
mercuryv2per D-032.
Where to get help with the software itself¶
Rhizomatica's HERMES team (Rafael Diniz, Pedro Messetti, Matheus Thibau), funded by ARDC. GitHub issues, the documentation at rhizomatica.github.io/mercury, and the hermes-general mailing list. GPL-3.0 LICENSE file and per-file headers read at tag v1.9.15 on 2026-09-30; the bundled FreeDV subset is LGPL-2.1.
Source: catalog/packages/mercury.yaml