Skip to content

Profile: digital-modes

FT8, JS8, PSK31, SSTV, digital voice and the rest of the keyboard modes

Stage: 1.0

Who it is for

An operator who wants FT8, JS8Call, PSK31, RTTY, SSTV or digital voice through a transceiver and its sound card. It is the profile most people come to Hammunition for.

At a glance

Stage 1.0
Units 22
Disk about 1.2 GB, plus 0.9 GB of build trees; six source builds
Hardware A transceiver, an audio path between it and the computer (a sound-card interface, a Digirig-class device or the radio's own USB audio), and a way to key it: CAT, a serial control line or VOX. DroidStar and the SSTV and decoder tools run with no radio at all.
Consent none
Install hammunition install digital-modes

What it installs

fldigi and the NBEMS stack that surrounds it, the whole FT8 family, JS8Call, SSTV and radiofax, open digital voice, DroidStar for the digital-voice reflector networks (M17, DMR, D-STAR, Fusion, P25, NXDN) with no radio, two small PSK31 clients, a general-purpose FSK modem, a QRSS receiver, the measuring tools that let you compare two of them honestly, and qpwgraph, a PipeWire patchbay that shows which sound card each program is wired to.

Disk footprint: Around 1.2 GB installed — 1.28 GB measured on Kali rolling, 2026-09-02, as df before minus after with the build trees and apt cache subtracted. The build trees are another 0.9 GB in ~/.cache/hammunition/build until you clear them, and six of these are source builds — fldigi, WSJT-X, MSHV, glfer, xwefax and DroidStar — so expect a long install. DroidStar (added 2026-10-01) needs Qt 6's development packages; on a bare debian:13 image its build dependencies came to about 1.1 GB, and what they add to this profile's measured total has not been measured. fldigi purges the repository package first, because the source build installs to the same prefix.

Why these belong together

This is the reason most people install something like this. It is the widest profile in the set and it is still coherent: everything here turns sound-card audio into text, pictures or speech through a transceiver, and everything here has the same three prerequisites — audio in, audio out, and a way to key the radio. wsjtx is the recommended default of the FT8 family. jtdx and mshv also decode FT8 and both declare themselves not the default; they are carried because each has a real constituency — a better decoder in crowded conditions, multi-stream decoding for a pileup — and because PARITY-POLICY requires the choice be visible rather than made silently.

Packages (22)

fldigi, flmsg, flamp, flwrap, comptext, comptty, wsjtx, jtdx, mshv, js8call, qsstv, freedv, psk31lx, twpsk, minimodem, glfer, xwefax, multimon-ng, qpwgraph, qtel, droidstar, flrig

What it deliberately excludes

wsjtx-improved, the third FT8 alternative, is carried but not here. Its vendor .deb cannot coexist with the distribution's wsjtx-data, and jtdx depends on that package — so a profile listing both can never install as a whole. Measured on a clean Kali VM on 2026-09-02: the plan passed, forty-four commands ran, fldigi and WSJT-X built, and the .deb failed. The plan now refuses that pairing by name, and the profile no longer asks for it. Install wsjtx-improved by name on a machine without jtdx, or remove jtdx first; the package page says what to expect. Packet and Winlink, which are packet. Morse, which is morse — fldigi decodes CW too, and the dedicated tools do it better. ardopcf is an HF data modem and sits in packet with the Winlink client it exists to serve. Also excludes the FT8 family's own configuration: no frequency lists, no station details, nothing that would need your callsign. The SvxLink infrastructure is deliberately not here. svxlink-server, svxreflector, remotetrx and the calibration and GPIO helpers run a repeater or a linked network — that is operating infrastructure other people depend on, not a mode you work, and it wants a considered install rather than arriving inside a bundle. qtel IS here, because using EchoLink from a desktop is an operating activity like any other, and droidstar is here for the same reason: it is a reflector client you talk through, the digital-voice networks' counterpart of qtel. It is not in listening, which D-046 keeps for receive-only decoders: pressing TX sends your voice to every repeater and hotspot linked to the reflector, and that needs a licence. It is not offered on Ubuntu 24.04 or Linux Mint 22.3, whose Qt 6.4 is below its 6.5 floor; there the profile installs without it (D-039).

Install it

Read the plan first. It changes nothing and prints every package, build, file and system change, and every consent gate you will meet:

hammunition show digital-modes
hammunition install digital-modes --dry-run

Then do it. The engine asks for your sudo password once, near the start, and shows the same plan again before it asks you to confirm:

hammunition install digital-modes

A member your machine cannot take is deferred by name and the rest installs (D-039); the plan lists each under Will NOT happen, with the reason and the command that fixes it. Installation explains how to read every part of the plan.

What you configure by hand afterward

An accurate clock is not optional for FT8. It transmits in 15-second windows and a clock more than about a second out decodes nothing while appearing to work — run NTP or chrony before anything else. Audio routing is the other thing nothing here does for you: sound card in and out to the radio, at levels that do not overdrive it, and PTT through hamlib, flrig, CAT or VOX. Transmit audio level is the single biggest cause of a station that hears everyone and is heard by nobody. The radio-audio guide (docs/guides/audio-routing.md) walks through it, and qpwgraph shows the result. Running several of the FT8 family at once contends for the same sound device and the same radio — pick one per session. SSTV needs the sound card's sample rate calibrated once per machine or every picture slants, which people blame on the band. Two guides walk the whole of this. docs/guides/digital-modes.md goes from installed to a first FT8 contact — rig control, the clock, your callsign in each program, WSJT-X, fldigi's PSK31 and RTTY, JS8Call, and which file each program writes. docs/guides/audio-routing.md is the sound path on PipeWire, finding which device is the radio, levels and the ALC trap, with its own symptom list.

Your first ten minutes

  1. Install station first and run hammunition hardware apply if you have not; this profile assumes both. See the station profile.
  2. Read the plan: hammunition install digital-modes --dry-run. Look for will build against fldigi, WSJT-X, MSHV, glfer, xwefax and DroidStar. Those compile on your machine and take a while.
  3. Install it: hammunition install digital-modes. Leave it running; the build trees land in ~/.cache/hammunition/build.
  4. Look at what is wired to which sound card with qpwgraph. Radio audio finds which device is the radio and sets levels without overdriving it.
  5. Check the clock before anything else. FT8 decodes nothing if the clock is more than about a second out: hammunition doctor, then the clock section of the FT8 guide.
  6. Point one program at the radio through the shared service (127.0.0.1:4532, Hamlib NET rigctl) and enter your callsign and grid in it. Your callsign in each program lists where each one keeps them.
  7. Open WSJT-X, pick FT8, and watch the waterfall for a full 15-second cycle before you transmit anything. FT8 and the digital modes goes from here to a first contact.

Take it off again

hammunition uninstall digital-modes --dry-run
hammunition uninstall digital-modes

This removes what Hammunition itself installed and nothing else. It does not remove dependencies apt pulled in, group memberships or configuration files it wrote; the plan says so and the transaction log records them (D-004).