Graywolf: A Modern APRS Station That Actually Keeps Up With the Hardware It Runs On

If you’ve spent any time in the amateur radio packet world, you know the landscape. Most of the software was written in the early 2000s, configured via INI files, and runs best when you squint at it the right way. Direwolf came along and meaningfully improved the software TNC situation. But the broader stack (decoding, digipeating, iGating, monitoring) still required cobbling together multiple tools, and none of them came with anything resembling a modern user interface.

Graywolf changes that. It’s a complete APRS station in a single binary: software modem, digipeater, iGate, and a browser-based web UI, all bundled and working together out of the box. It’s written by Chris Snell, NW5W, and it’s open source under GPL-2.0. As of June 2026, it’s at version 0.13.15 with 100 releases published and an active development pace.


What It Actually Is

Graywolf isn’t a front-end wrapper around Direwolf. It has its own modem, written from scratch in Rust. The AX.25 decoding, APRS operations (beacons, digipeating, iGating), and the REST web API are handled by a service written in Go. The web frontend is built in Svelte.

The Rust modem is a port of the AFSK demodulator from Direwolf, originally written by WB2OSZ. It incorporates decision-feedback AGC and hard-limiter correlator techniques credited to Ion Todirel (W7ION) from his libmodem project. These aren’t just software engineering choices. They’re the reason the modem performs the way it does, and they represent real signal processing expertise applied to a practical problem.

graywolf-aprs-dashboard-1024x736 Graywolf: A Modern APRS Station That Actually Keeps Up With the Hardware It Runs On

The Benchmark Numbers

This is where Graywolf makes its case plainly. The WA8LMF TNC test CD is the standard benchmark for software TNCs. Here’s how Graywolf compares to Direwolf running in its best mode, which is -P AD+:

WA8LMF TrackDirewolfGraywolf
Track 01 – 40-min traffic mix10201026
Track 02 – DE-emphasized Mic-E10001000
Track 03 – flat Mic-E (100 reps)100100
Track 04 – drive test107108

Graywolf beats or matches Direwolf on every single track. Not by massive margins, but those aren’t the point. It achieves this performance at roughly 5% of a Raspberry Pi 5’s CPU, while Direwolf in its most effective mode is considerably heavier. On an actual Raspberry Pi 5, Graywolf’s modem runs at about 19% of a single CPU core. For a station that’s meant to run 24/7 on low-power hardware, that’s a meaningful difference.

The benchmarks are reproducible. The repo includes a bench.sh script so you can verify this yourself.


Installation

Graywolf ships as a single binary. There are no external dependencies to manage, no daemon prerequisites, and no separate modem process to configure.

Packages are available for:

  • Debian/Ubuntu via APT
  • Fedora/RHEL via RPM
  • Arch Linux via AUR
  • Windows with an installer
  • macOS as binaries

Architecture support includes x86-64 and ARM, including Raspberry Pi. As of version 0.13.15, the build process also restores support for armv6 and 32-bit Pi targets, which had been broken. The SQLite database stores all configuration, so there’s no flat config file to maintain. Setup is handled entirely through the web UI.


The Web Interface

Graywolf is managed through a browser. The interface is responsive and works on both desktop and smartphones, which matters when you’re managing a station remotely from a phone.

The interface includes a live packet stream, a full map view, and a messaging interface. Configuration of all station parameters (modem settings, PTT method, beacon intervals, digipeater paths, iGate filters, and more) is done through the browser, not a text editor.


The Live Map

The map deserves its own mention because it’s not just a stripped-down APRS viewer. Graywolf describes it as “a private aprs.fi for your station,” and that’s accurate in scope. It supports:

  • Real-time packet display with station trails
  • Digipeater path visualization
  • Weather overlays
  • A private vector basemap
  • Offline map downloads by state, province, or country

The offline map capability is practically useful. If you’re operating at a remote site, during an emergency activation, or in an area with unreliable internet, being able to pre-download map tiles for your region means the map still works.


Messaging

APRS messaging in Graywolf works as an SMS-style interface with delivery status and unread badges. Under the hood it supports:

  • Auto-ACK and retry on direct messages
  • Tactical callsigns: you can message groups using callsigns like GRAYWOLF or AMIGOS for net operations
  • RF-first delivery with APRS-IS fallback: it tries the radio path first and falls back to internet gating if the RF path fails
  • Long messages up to 200 characters: the standard APRS message limit is 67 characters, so this is a significant extension for stations that support it

PTT Methods

One of the more practical aspects of Graywolf is how many PTT methods it supports out of the box, covering virtually every common way to key up a radio from a computer:

  • Serial RTS/DTR: works with Digirig and standard USB-serial adapters
  • CM108 USB HID GPIO: works with AIOC and homebrew sound card adapters
  • Linux GPIO: direct GPIO control on Raspberry Pi, BeagleBone, and similar boards
  • Hamlib rigctld: CAT control for radios that support it

Most APRS software supports one or two of these. Supporting all four in the same package means Graywolf works with the hardware you already have.


Digipeater

The digipeater implementation is full-featured:

  • WIDEn-N path handling: the standard APRS digipeating path format
  • Preset-driven configuration: presets for common roles like fill-in digi or wide-area digi
  • Duplicate suppression: prevents re-transmitting packets already heard from other digipeaters
  • Per-path filtering: control which packets get digipeated based on path

This is the kind of configuration that matters for anyone setting up a serious digipeater node rather than just a home station.


iGate

The iGate handles both directions:

  • RF to APRS-IS: packets heard on RF are uploaded to the APRS-IS network
  • APRS-IS to RF: packets from the internet are gated down to RF for local delivery

Configurable filters let you control what gets gated in each direction. The logs include packet origin tracking so you can see where each packet came from and whether it was gated. As of v0.13.15 (PR #202), the iGate exposes RF-to-IS gate reasons for KISS client TX, meaning you can see exactly why a packet was or wasn’t gated.


TNC Interfaces

Graywolf speaks the protocols that other packet software expects:

  • KISS TNC: TCP built in, serial via tnc-server
  • AGWPE TCP: the Packet Engine interface used by Winlink, UI-View, and many others

This means you can use Graywolf as the TNC back-end for other software while still using Graywolf’s own interface for monitoring and configuration.


Actions

Actions are a less-common feature that’s worth understanding. They let you trigger scripts or webhooks remotely by sending specially-crafted APRS messages to your station. Supported trigger types include:

  • Shell scripts
  • PowerShell scripts
  • Webhooks

Actions can be secured with one-time passwords using the same TOTP standard as Google Authenticator and 1Password. A recent commit adds a TOTP verifier with a replay ring, meaning the same OTP can’t be reused, which closes a basic replay attack vector.

The practical uses here are real. Triggering a generator start, alerting monitoring systems, or running a check-in script via an APRS message from a mobile radio is the kind of capability that makes sense in emergency communications contexts.


Observability

For a station that runs unattended, knowing what it’s doing matters:

  • Prometheus metrics: scrape Graywolf’s metrics into whatever monitoring stack you’re using
  • SQLite packet logging with search: all heard packets are logged and searchable
  • Live packet stream in the web UI: real-time view of everything the station is hearing

The Prometheus integration is unusual for amateur radio software. It means Graywolf fits into professional monitoring setups (Grafana dashboards, alerting rules, the whole ecosystem) without any custom work.


Android

There’s an Android application in active development. Recent commits show USB KISS TNC support added, a watchParentDeath mechanism to properly cancel the app context when the parent process exits, and a CI pipeline using Fastlane for track promotion and Play Store listing uploads. This is real software engineering work, not a proof-of-concept port.


The Project in Context

Graywolf sits at version 0.13.x with 100 public releases and four contributors. It has 123 stars and 11 forks on GitHub. The commit history shows consistent, regular work across multiple releases per month, and the changelog reflects real user-reported issues being fixed. The armv6 build regression, for example, was reported as issue #199 and fixed in five days.

The project has a Discord community, a published handbook, a Known-Working Configurations list with community-submitted hardware setups, and a public map of currently active stations.

This is software built to be used, not just released.


Who It’s For

Graywolf makes sense for:

  • Home stations that want a complete APRS setup without managing multiple tools
  • Digipeater and iGate operators who want modern configuration and monitoring
  • Emergency communications groups that need reliable, maintainable software on Raspberry Pi hardware
  • Experimenters who want to run their own private APRS network with a real-time map

If you’re currently running Direwolf with a collection of scripts, config files, and manual log inspection, Graywolf is a direct upgrade. The modem performance is better, the CPU footprint is lower, and everything is accessible through a browser instead of a terminal.

The latest release is available at the Graywolf GitHub repository. The handbook covers installation, configuration, and the REST API reference in full.

Post Comment

You May Have Missed