JS8/FT8 modem — ground-up rewrite
A complete rewrite of the FT8 and JS8Call modem, built from first principles against the published specifications in modern C++20. Not a fork. Not a port. A new implementation.
The original FT8 and JS8Call implementations carry the accumulated complexity of research software: tightly coupled components, mixed concerns, and dependencies on Qt, FFTW3, Boost, and Eigen that make the modem impossible to use outside of the original application framework.
gfsk8-modem-clean starts from the published specifications — the FT8 paper, the LDPC codes, the Costas array, the varicode tables, and the JS8 protocol definition — and reimplements the modem from scratch in C++20. Every module is designed from the start for testability, embeddability, and clean integration into other applications.
The result is fully protocol-compatible with JS8Call and JS8Call-improved: gfsk8-modem-clean decodes frames from real-world JS8 stations and produces frames that interoperate correctly with existing JS8Call installations.
The library is organized into clearly separated layers, each with a single well-defined responsibility:
gfsk8:: namespace surface that exposes only what callers need.FT8 is one of the most carefully engineered weak-signal communication systems ever built for amateur radio. Its 8-GFSK modulation, Costas array synchronization scheme, and LDPC forward error correction approach the Shannon limit for the conditions under which HF propagation typically operates. gfsk8-modem-clean implements this system faithfully and in full.
The JS8 protocol extension adds free-text messaging, directed exchange, relay forwarding, and SNR/grid exchange on top of the FT8 physical layer — with five selectable timing modes to match the tradeoff between speed and sensitivity to current propagation conditions.
KissFFT is vendored. No system packages beyond a C++20 compiler and CMake 3.20+.
gfsk8-modem-clean is a reimplementation, not a copy — but it would not exist without the people who did the original work:
Joe Taylor (K1JT) & Steve Franke (K9AN)
Inventors of FT8 and the foundational research behind every mode gfsk8-modem-clean implements. Their 2018 paper, their LDPC codes, their Costas array design, and their open-source WSJT-X implementation are the specification this library was written against. The digital HF community owes them an enormous debt.
Jordan Sherer (KN4CRD)
Creator of JS8Call and the JS8 protocol. His design decisions — the five submodes, the varicode scheme, the directed message protocol — define what gfsk8-modem-clean encodes and decodes. The JS8 specification exists because of his work.
gfsk8-modem-clean is independently authored and licensed GPL-3.0, consistent with the upstream FT8 and JS8Call tradition of open-source amateur radio software.