W4HO  ·  AMATEUR RADIO STATION  ·  DN70
LICENSED FT8 · CALLW4HO · GRIDDN70 · 73!
Station (W4HO)
W4HO
WHISKEY FOUR HOTEL OSCAR

Amateur radio operator. I make FT8 stuff:

Vox Tenuis an FT8 decoder in Rust 21 July 2026
Statio an FT8 terminal user interface (TUI) want it open sourced?
Tegmen a C/Rust library for the WSJT-X FT8 decoder 21 July 2026
Statio — W4HO's FT8 TUI: live decodes and a QSO in progress

Statio, my FT8 TUI — see the post ↗

Up Close (click to zoom)
Vox Tenuis (clean-room · pure Rust)

A from-scratch FT8 decoder in pure Rust, built clean-room — from the published protocol specification alone (Franke, Somerville & Taylor, QEX 2020), never from WSJT-X source.

Head-to-head with the WSJT-X–derived reference on real off-air FT8, it decodes 100% of the strong signals, hears hundreds more weak ones out of the noise, and produces zero false decodes. Each decoder also catches a few the other doesn’t.

It hears FT8 in raw audio end to end: FFT candidate search, Costas sync, 8-FSK demodulation, LDPC belief propagation, and CRC-gated decodes. No C, no FFI — and provably thread-safe (zero unsafe).

A live time-budget mode — Decoder::with_budget(1300ms) — returns inside a fixed wall-clock deadline, so a station decodes and fires its reply within the FT8 slot. Field-proven: ten QSOs on its maiden voyage, now also first live-air validated against a mature reference on hundreds of real windows.

Open source, MIT licensed. Versioning is CalVer (YYYY.M.D). Package and CLI are vox-tenuis. Clone it over plain git:

git clone https://w4ho.com/vox-tenuis.git

Using it from Rust? Add the dependency to Cargo.toml:

vox-tenuis = { git = "https://w4ho.com/vox-tenuis.git" }

The repo is served as plain static files (git's “dumb HTTP” protocol), which Cargo's built-in fetcher won't clone. Point it at the git CLI — add this to .cargo/config.toml (per-project or in ~/.cargo/):

[net]
git-fetch-with-cli = true

Or grab the source the old-school way — a plain tarball:

↓ download vox-tenuis.tar.gz

Release: 21 July 2026 — Vox Tenuis 2026.7.21

Vox Tenuis — “the thin voice.” The whole art of FT8 is hearing it. see the post ↗

Release Notes (21 July 2026)

ARRL Field Day message decoding and multi-signal subtraction for three-way pileups works.

Release Notes (18 July 2026)

First live-air validation, a 26% faster decoder, and a wider listening window. Versioning is now CalVer; the package and CLI rename from vt to vox-tenuis is finalized, MIT remains the license.

Performance (26% faster at full depth)
Wider passband (decode-side only)
Correctness (external code review — all five findings fixed)
First live-air validation
Release Notes (14 July 2026)

The first release of a clean-room, pure-Rust FT8 decoder — and on real off-air signals it stands competitive with the WSJT-X–derived reference decoder.

By the numbers (measured on real off-air FT8, head-to-head with the reference)
Decoding
Live time budget
Clean room & pure Rust
Speaks fluent FT8 (encode & decode — every message type)
Get it
Tegmen Library (FT8 lib for C & Rust)

Write your own FT8 software while delegating to WSJT-X for FT8 encoding and decoding.

Tegmen is a C and Rust library wrapper for WSJT-X's FT8 encoder and decoder.

This wrapper API can encode an FT8 message and then decode the generated .wav file.

It wraps WSJT-X General Availability Release 3.0.1.

Tegmen is open source. License is the same as WSJT-X, GPL v3.

Release: 21 July 2026 — Tegmen 2026.7.21, matching WSJT-X 3.0.1 GA.

↓ download tegmen.tar.gz
Tegmen Release Notes (21 Jul 2026)

FT8 decoding adds selectable depth, a priori hints, cross-cycle memory, a targeted search for your QSO partner, streaming early/mid/final stages, cursor re-decode, and scan-band limits. Encoding adds selectable tone frequency. All opt-in via new API options. Existing APIs unchanged.

Waterfall
FT8 waterfall — today's band activity
x:X n:Nostr v:vox_tenuis s:statio :vox_tenuis :tegmen q:73