hamstack

73 and welcome to the shack

Amateur radio software on Linux, without the yak‑shaving.

hamstack installs your radio programs, writes their configuration, finds your radio's USB devices and runs it all as services you can start, stop and watch. Winlink on HF or packet, digital modes, APRS, GPS. One static binary.

INSTALL (Linux, no root, checksum-verified)

curl -fsSL https://raw.githubusercontent.com/ATCUSA/hamstack/main/scripts/install.sh | sh

OR BUILD IT (Go 1.27+)

go install github.com/ATCUSA/hamstack/cmd/hamstack@latest

Then run hamstack: it offers a guided setup. No radio yet? Pick the dummy radio and try everything.

What it does

The fiddly parts of a radio setup, handled once and handled the same way every time.

Guided setup

Say what you want. hamstack asks a few questions, installs what is missing, writes the configuration, starts it and checks it. Every command is shown first.

Several radios at once

Each rig gets its own ports and services: HF on one radio, packet on another, a dummy rig to practise on.

Sites

Save home, the EOC and the club as named setups and switch with one command. It can tell which site's radios are plugged in.

Found by USB identity

Replug a radio or use another port and the services find it again. No more ttyUSB0 roulette.

Programs and updates

A catalog with dependencies and suggestions, version checks against upstream, and source builds for when your distribution lags.

Packet, with or without a kernel

Watch and call through Direwolf with no root. Or set up the Linux AX.25 stack (kissattach, axcall, axlisten) where your kernel still has it.

GPS

gpsd as a service, and your Maidenhead grid square read straight from a fix.

Doctor

Checks that everything is ready and says exactly how to fix what is not: permissions, drivers, ports, old hamlib.

Network view

Every port the stack uses, and who on your network can reach it. Open ports without a password are flagged.

Programs it can install and keep up to date

Each one installs the same way, is checked against its upstream release, and can be built from source when your distribution's package is old. Requirements are added with the reason; suggestions are only offered; programs that conflict refuse to install together.

  • PatWinlink client
  • Mercuryopen HF modem (VARA-compatible)
  • ardopcfARDOP HF modem
  • Direwolfsoundcard packet TNC, VHF/UHF
  • hamlibrig control (rigctld)
  • FLRig · fldigi · flmsg · flampthe fl suite
  • WSJT-X ImprovedFT8, FT4, WSPR and more
  • JS8Callkeyboard messaging on HF
  • XastirAPRS client with maps
  • gpsd · ax25-toolsGPS daemon, kernel AX.25 tools

Debian, Ubuntu, Fedora and Arch, and their relatives. Everything builds from upstream source on all three families.

How it works

hamstack does not run radio software itself. It plans, shows, and hands over.

  1. PlanYour choices live in one small config file. From it hamstack generates each program's configuration and a set of systemd user units.
  2. ShowInstalling packages, sudo steps and source builds are listed and confirmed before they run. --dry-run shows the plan only.
  3. RunServices find the radio's serial port and sound card when they start, by USB identity, then hand over to the real program.

Careful by design, honest about its limits

  • Your Winlink password is never read or stored. It stays in Pat's own config.
  • Open ports are flagged. Mercury's web UI and Direwolf's AGW and KISS ports listen on every interface with no password; hamstack network says so.
  • Source builds say what they run. Downloads use HTTPS, and when a project publishes no checksum, hamstack tells you before it starts.
  • Text from the air is cleaned before it reaches your terminal.
  • It never transmits by itself. Operating within your licence is on you.
Early days, and help wanted. hamstack is tested in Debian, Fedora and Arch containers under real systemd (about 190 checks each) and its kernel AX.25 support on a real kernel in a VM. Very little has been tried with real radios, sound interfaces or GPS receivers. Most radio profiles come from hamlib's list and typical settings, not from testing. If you can try it, tell us how it went.

Where to post

Everything lives on GitHub. Please keep callsigns, grid squares and emails out of public posts if you would rather not share them: N0CALL and FN31pr are fine stand-ins.