<!-- Modified for Goblin Skiff on 2026-09-19. -->
Goblin Modem: goTenna radio networking
Install this package on each computer attached to a radio. It includes the GUI, radio driver, mesh address/name discovery, SOCKS5 proxy, gateway controls and radio Skiff launcher. The package manager installs the required Goblin Skiff and Python dependencies. Internet sharing starts off; enable it only on the M computers with Internet uplinks in an N-radio mesh.
Linux installation
This release supports amd64 on the five distributions listed below. A graphical login, browser and polkit authentication agent are needed for the desktop GUI. The package also supplies command-line controls.
Set up APT on Debian or Ubuntu
This installs a dedicated repository key and a deb822 source file. It does not replace your distribution's repositories or disable signature checking. If you previously added the old "stable" entry, remove that old entry from its .list/.sources file to avoid keeping an unused source. The one setup serves every package here.
First install the setup tools:
sudo apt update
sudo apt install ca-certificates curl gnupg
Then run this block. It refuses unsupported releases and architectures:
(
set -eu
. /etc/os-release
case "$ID:$VERSION_CODENAME" in
ubuntu:jammy|ubuntu:noble|ubuntu:resolute|debian:bookworm|debian:trixie) ;;
*) echo "No package is published for this OS release." >&2; exit 1 ;;
esac
goblin_arch=$(dpkg --print-architecture)
case "$goblin_arch" in
amd64|arm64) ;;
*) echo "This architecture is not published." >&2; exit 1 ;;
esac
goblin_keydir=$(mktemp -d)
trap 'rm -f "$goblin_keydir/keyring.gpg"; rmdir "$goblin_keydir"' EXIT
curl -fsSL https://apt.goblinreactor.com/goblinreactor-archive-keyring.gpg \
-o "$goblin_keydir/keyring.gpg"
goblin_fingerprint=$(gpg --batch --show-keys --with-colons \
"$goblin_keydir/keyring.gpg" | awk -F: '$1 == "fpr" { print $10; exit }')
test "$goblin_fingerprint" = B7B61E8CB85A9270530364F23273CB62402FC793 || {
echo "Unexpected repository signing key; stopping." >&2
exit 1
}
sudo install -d -m 0755 /etc/apt/keyrings
sudo install -m 0644 "$goblin_keydir/keyring.gpg" \
/etc/apt/keyrings/goblinreactor-archive-keyring.gpg
printf '%s\n' \
'Types: deb deb-src' \
'URIs: https://apt.goblinreactor.com/' \
"Suites: $VERSION_CODENAME" \
'Components: main' \
"Architectures: $goblin_arch" \
'Signed-By: /etc/apt/keyrings/goblinreactor-archive-keyring.gpg' \
| sudo tee /etc/apt/sources.list.d/goblinreactor.sources >/dev/null
)
sudo apt update
sudo apt install goblin-modem
goblin-modem
<!-- Modified for Goblin Skiff integration on 2026-09-19. -->
Package contents
The Mac package includes the menu bar app, privileged launchd helper, radio IP/SOCKS driver, helper repair/removal tools, and radio Skiff launcher. Its Homebrew cask installs Python 3.14 and the radio-capable Goblin Skiff package. The initial binary target is Apple Silicon on macOS 26 Tahoe. The app is ad-hoc signed; the installer is not Developer ID signed or notarized. Use the Homebrew cask to install the package and its dependencies.
The Linux package includes the browser GUI, desktop entry, radio IP/SOCKS driver, udev permissions, polkit launcher and radio Skiff launcher. APT installs Python, OpenSSH client/server, Goblin Skiff, systemd and polkit dependencies. The first binary target is amd64 on Ubuntu 22.04/24.04/26.04 and Debian 12/13. The Linux GUI needs a graphical login with a browser and a polkit agent. On a headless machine use goblin-radio directly or forward the loopback GUI with SSH. The package does not install a native Linux PPP modem UI.
The Mac and Linux installers also put gotenna-peers on your terminal PATH. Inkline installs the same command. It lists discovered mesh names, IPv6/IPv4 addresses, hops and incoming/outgoing connection roles from the running radio controller. It does not connect the radio or probe peer services.
Build
Use the matching public source archives for both projects. Go 1.26.3 or newer is required; the modem release archive includes its Go dependencies in Driver/vendor. In a developer checkout first run make vendor. For a Linux cross-build, set GOBLIN_DRIVER_PREBUILT to the matching source revision's Linux ELF driver; its architecture must match ARCH. The packaging host then needs Python and dpkg-deb, without a Go compiler upgrade.
make test GO=/path/to/go
make linux-deb ARCH=amd64 GO=/path/to/go
# On a Mac with Command Line Tools and Go, or GOBLIN_DRIVER_PREBUILT:
make macos-pkg
The Mac runtime dependencies are installed with:
brew tap goblinreactor/tap https://brew.goblinreactor.com/homebrew-tap.git
brew install goblinreactor/tap/goblin-skiff python@3.14
For reproducible Linux Skiff dependencies, build the matching Goblin Skiff source with its packaging/debian/build-release.sh inside each target suite's native build environment. Its source and binary packages are published alongside Goblin Modem, with the same archive signature. Goblin Modem requires Goblin Skiff 1.4.0+goblin20260919.1 or newer.
Install and use
# macOS
brew install --cask goblinreactor/tap/goblin-modem
open /Applications/GoblinModem.app
# Debian/Ubuntu, after configuring apt.goblinreactor.com for this suite
sudo apt update
sudo apt install goblin-modem
goblin-modem
On Linux the Applications menu has Goblin Modem. It authenticates through polkit to start the controller as your user with CAP_NET_ADMIN and serial access, then opens its browser UI at http://127.0.0.1:8777. Closing the browser leaves the radio connected; Disconnect or goblin-modem --stop stops it. The controller does not auto-start or connect a radio on package installation.
On both computers choose the USB radio. Updated clients join the public mesh automatically; each computer keeps its own identity. Enable the peer IP interface if this computer should receive Skiff connections. All mesh participants need the current compact-format driver. Internet sharing defaults off; enable it only on computers that should advertise themselves as Internet gateways. Save and Connect. Wait for the other computer in the peer list, then choose Open Skiff (Mac) or Skiff command (Linux). The default test uses management SSH to start the session and sends terminal traffic over the radio. Enable macOS Remote Login in System Settings if it must accept incoming SSH setup connections.
The launcher prefers package-managed Skiff binaries over older manual copies. It finds the remote server on both Homebrew and Debian paths. Nothing requires a source checkout. A missing Mac helper can be repaired from the app menu.
Upgrade and remove
brew upgrade goblinreactor/tap/goblin-skiff
brew upgrade --cask goblinreactor/tap/goblin-modem
brew uninstall --cask goblinreactor/tap/goblin-modem
sudo apt update && sudo apt upgrade
sudo apt remove goblin-modem
Removing Goblin Modem leaves user profiles and keys intact. The Mac uninstaller stops its helper and restores its managed filtering. The Linux uninstaller stops package controllers. Shared Python, Skiff and SSH dependencies are left for the package manager to manage. The public channel identifier is built into the clients. No package bundles a private user profile, SSH key, or signing key.
Website and releases
The project site is https://modem.goblinreactor.com/ and its static source is in html. Run make site-check, make site-serve, or make site-publish. make linux-install and make macos-install build and install locally; use the Homebrew/APT commands above for published releases. September 26 packages use the public IPv6 mesh, compact packets, and the gotenna-peers command. Update all participating clients to use this wire format. Older releases remain available at their original versioned URLs.
Source and verification
Matching source · Verification records · Signed catalog · Catalog signature.
Source SHA-256: 0c1cf4891a4305ff7e409c7bb256e4b3efe5b42340a2dfd004085808ffe7ba3d.