A new, clean-room implementation of a JS8Call-compatible station application — built for Linux, Windows, and Raspberry Pi, with a complete WebSocket API, headless operation, and a strict separation between the modem and the user interface. Designed from the start to serve as the HF connectivity layer inside larger, more complex communications systems.
Early Alpha Software
JF8Call is functional and in active use, but it carries no guarantees of stability, completeness, or fitness for any purpose. Builds are time-limited. Expect rough edges. All feedback — bug reports, feature requests, observations from actual on-air use — is genuinely welcome and appreciated.
Requires FUSE2 on the host. If AppImages don't run on your distro:
sudo apt install libfuse2 or extract with
./JF8Call*.AppImage --appimage-extract.
Requires Windows 10 or later (64-bit). No install required — extract the zip
to any folder and run. The zip contains jf8call.exe,
jf8-tool.exe,
and all required DLLs (Qt6, PortAudio, Hamlib, MinGW runtime).
Tested on Raspberry Pi 4 running Raspberry Pi OS (64-bit, Bookworm).
In --headless mode, no display or desktop
environment is required — suitable for a Pi running headless as a digipeater
or gateway node.
A native command-line tool for the JF8Call WebSocket API — no Python, no dependencies, just a single self-contained binary. Control a running JF8Call instance from scripts, cron jobs, or the terminal.
jf8-tool.exe is included inside
JF8Call-0.6.6-ALPHA-win64.zip.
No separate download needed.
Pairs well with JF8Call running in
--headless mode on the same Pi.
Quick reference
JS8Call is valuable software, but its architecture reflects its origins as a research fork: the modem, the GUI, and the network code are tightly entangled, making it difficult to automate, integrate, or run without a desktop environment.
JF8Call is a new implementation that treats the modem as a library (gfsk8-modem-clean) and builds the application on top of a strict interface contract: every capability accessible through the GUI is also accessible through the WebSocket API, and vice versa. The two are not separate features — they are two views of the same underlying state machine.
One of JF8Call's explicit design goals is to make it easy to use as the HF connectivity layer inside larger, more complex communications tools and projects — and to stay out of the way while doing so. Run it headless on a Raspberry Pi, drive it entirely over the WebSocket API, embed it in an automated network or a custom digipeater — JF8Call is designed to be unobtrusive and easy to integrate, not just a standalone application.
ws://localhost:2102.
Push events notify connected clients of every state change, including received
frames, spectrum data, and status updates.
--headless
to start without a display. All audio I/O, decoding, and WebSocket API function
normally. Suitable for Raspberry Pi gateway nodes, automated logging stations,
or server-side integration.
The API runs on ws://localhost:2102
by default. All messages are UTF-8 JSON text frames.
This is not a convenience feature. The WebSocket API is JF8Call's primary integration surface — the intended way for other software to use JF8Call as a modem and radio control layer. Send messages, tune frequencies, read configuration, receive decoded frames and spectrum data in real time. Every GUI action is available as a JSON command; every state change is pushed to connected clients as an event.
Full API reference is available in the repository. The spectrum is pushed at ~5 Hz; status at 1 Hz; decoded frames immediately on receipt.
JF8Call is a new application, but the modes it implements exist because of the foundational work of others:
Joe Taylor (K1JT) & Steve Franke (K9AN)
Inventors of FT8 and the physical layer that JS8 — and therefore JF8Call — is built on. Their research, their published codes, and their open-source WSJT-X implementation are the direct foundation of everything that follows.
Jordan Sherer (KN4CRD)
Creator of JS8Call and the JS8 protocol. The free-text messaging, directed exchange, relay design, and five-submode structure that JF8Call implements are his design. JF8Call exists to be compatible with his network.
The name JF8Call follows Jordan Sherer's convention: just as he named JS8Call after his own initials (JS), JF8Call takes its name from the initials of its author, Jeff Francis (JF), N0GQ.
JF8Call is licensed GPL-3.0, consistent with the upstream JS8Call and WSJT-X tradition. The gfsk8-modem-clean library it depends on is also GPL-3.0.