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.
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.
Install from source using pip:
git clone https://github.com/ben-kuhn/tncd.git
cd tncd
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python tncd.py -c tncd.ini
Homebrew package coming soon.
tncd is best run under Windows Subsystem for Linux (WSL). Install WSL with a Debian or Ubuntu distribution, then follow the Debian / Ubuntu instructions above.
wsl --install -d Ubuntu
Once inside WSL, serial devices are accessible via
/dev/ttySN and TCP TNCs work normally.
python3 and
bluez need to be installed separately (usually already present).
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.