<!-- Modified for Goblin Skiff integration on 2026-09-19. -->
# Goblin Modem distribution packages

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.
