Deployment
Run the relay as a service, supervise Pipes across reboots, and keep state on one host per role.
Binary
$ curl -fsSL https://www.tubo.click/install.sh | sh $ tubo version tubo v0.13.0 (protocol 2.1, commit …, built …)
Relay under systemd
/etc/systemd/system/tubo-relay.service
[Unit]
Description=Tubo transport-only relay
After=network-online.target
[Service]
ExecStart=/usr/local/bin/tubo relay --listen /ip4/0.0.0.0/tcp/4001 --public-addr /ip4/YOUR.IP/tcp/4001
Restart=always
User=tubo
[Install]
WantedBy=multi-user.target
- Keep the relay identity key stable: the relay PeerID is pinned in client bootstrap trust material; changing it invalidates embedded bundles.
- The relay needs no secrets and no authorization state — it is pure transport.
- Open the listen port in both the host and cloud firewalls.
Pipe supervision (macOS launchd / Linux systemd)
$ tubo supervise install pipe/myapi # installs a user supervisor unit $ tubo supervise status pipe/myapi $ tubo supervise uninstall pipe/myapi
Detached runs (-d) and supervisors own the process; the CLI never requires a central daemon.
State and secrets
TUBO_HOME(default~/.local/share/tubo) holds the SQLite state, run records, and secret keys (0600).- Identity and Exact Authority keys are created atomically and fail closed on corruption — never regenerate by hand.
- Back up
TUBO_HOME; the relay only needs its identity key.
Verification
$ tubo doctor # environment, config, and reachability checks $ tubo inspect relay/default