tncd

AGWPE-to-KISS Translation Bridge for packet radio

GitHub Releases Documentation Changelog Blog GPL-3.0

About

tncd is a userspace bridge that lets AGWPE-compatible applications (Winlink, Xastir, APRSIS32, etc.) talk to KISS TNCs — serial, TCP, or Bluetooth. Tested over the air with real Winlink sessions at 1200 baud.

It implements full AX.25 connected mode including SABM/UA handshake, I-frame sequencing, delayed acknowledgement, and dynamic T1/T2 timers — with no kernel AX.25 stack required.

Two lines: the stable 1.3.x (Python) line for production Linux stations, and a 2.0 beta — a single-binary Go rewrite adding AX.25 v2.2, native Bluetooth, and Windows, macOS, and FreeBSD builds. Windows and macOS are 2.0-beta-only. The 2.0 line is not yet as thoroughly tested as 1.3.x — see the Install tabs and releases.
x86_64 i686 arm64 armhf riscv64

Install

curl -fsSL https://tncd.dev/tncd.pub \
  | sudo gpg --dearmor \
  -o /usr/share/keyrings/tncd.gpg

echo "deb [signed-by=/usr/share/keyrings/tncd.gpg] \
https://tncd.dev/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/tncd.list

sudo apt update
sudo apt install tncd
sudo curl -fsSL \
  https://tncd.dev/rpm/tncd.repo \
  -o /etc/yum.repos.d/tncd.repo

sudo dnf install tncd
sudo curl -fsSL \
  https://tncd.dev/rpm/tncd.repo \
  -o /etc/zypp/repos.d/tncd.repo

sudo zypper refresh
sudo zypper install tncd
# Download the PKGBUILD
curl -fsSL https://raw.githubusercontent.com/ben-kuhn/tncd/main/packaging/PKGBUILD \
  -o PKGBUILD

# Build and install
makepkg -si

tncd is available via a custom overlay that includes the package and its Python dependencies.

# Clone the overlay
sudo mkdir -p /var/db/repos
sudo git clone https://github.com/ben-kuhn/tncd.git \
  /var/db/repos/tncd

# Register the overlay
cat <<'EOF' | sudo tee /etc/portage/repos.conf/tncd.conf
[tncd]
location = /var/db/repos/tncd/packaging/gentoo-overlay
EOF

# Install (add bluetooth USE flag for BT support)
sudo emerge --ask net-misc/tncd

The overlay also provides ebuilds for dev-python/kiss3, dev-python/pyham-ax25, and dev-python/ax253.

tncd is packaged in nix-ham-packages. Add the overlay and service module to your NixOS configuration:

let
  ham = builtins.fetchTarball
    "https://github.com/ben-kuhn/nix-ham-packages/archive/main.tar.gz";
in {
  nixpkgs.overlays = [ (import ham) ];
  imports = [ "${ham}/tncd/module.nix" ];

  services.tncd = {
    enable = true;
    settings = {
      server.callsign = "N0CALL";
      client = {
        type = "serial";
        device = "/dev/ttyUSB0";
        serial_baudrate = 9600;
        ota_baudrate = 1200;
      };
    };
  };
}

See the Nix README for Bluetooth setup and all module options.

macOS is available on the 2.0 beta line only (the Go rewrite), and without OS service integration — run it yourself or wrap it in a launchd unit.

Download the matching tncd-<version>-macos-arm64.tar.gz (Apple silicon) or -macos-amd64.tar.gz (Intel) from the GitHub releases, extract it, and run:

tar -xzf tncd-<version>-macos-arm64.tar.gz

# macOS blocks unsigned downloaded binaries (Gatekeeper). tncd is not
# notarized, so clear the quarantine flag before the first run:
xattr -dr com.apple.quarantine ./tncd

./tncd -c tncd.ini

If you skip that step you'll get “cannot be opened because the developer cannot be verified.” You can also allow it via System Settings → Privacy & Security → Allow Anyway.

Bluetooth TNCs: pair the device, then use type = serial with its /dev/cu.* port. Homebrew tap coming later.

Windows is available on the 2.0 beta line only (the Go rewrite) — there is no Windows build of the stable 1.3.x line.

Download tncd-<version>-windows-amd64.zip (or -arm64) from the GitHub releases, unzip it, and double-click tncd.exe. With no config present it launches an installer that asks for your callsign and TNC — serial ports and paired Bluetooth devices are listed for you — then installs tncd as an auto-starting Windows service. Run tncd.exe again to start/stop the service, open the config, open the web monitor, or uninstall.

Command-line equivalents:

tncd.exe ports
tncd.exe install -c tncd.ini
tncd.exe service start
tncd.exe uninstall

Bluetooth TNCs connect natively (Winsock RFCOMM): pair once in Windows Settings, then pick the device in the installer.

The Linux 1.3.x packages (Debian/Fedora/openSUSE/Arch/Gentoo) include all Python dependencies — only python3 and bluez need to be present. The 2.0 beta (NixOS, Windows, macOS, FreeBSD) is a single static Go binary with no runtime dependencies.

Quick Start

Copy the example config and edit it for your TNC:

sudo cp /etc/tncd.ini.example /etc/tncd.ini
sudo $EDITOR /etc/tncd.ini

Enable and start the service:

sudo systemctl enable --now tncd

See the README for full configuration reference.