tubo
tubo.click

Minimal tunnel for private API services.

tubo keeps the path simple: install it, start one relay, publish a service, connect by name, and test it with a real curl.

Install tubo

1. Download

Grab the latest binary from GitHub Releases for your platform.

2. Put it on your PATH

Unpack it, make it executable, and move it somewhere like /usr/local/bin.

3. Verify

Run tubo version and make sure it starts cleanly.

Binary install

Use the release asset that matches your system, then verify the binary.

# download the latest release asset from GitHub Releases
chmod +x tubo
sudo mv tubo /usr/local/bin/

tubo version

Build from source

If you prefer to build locally, tubo is a single Go binary.

git clone https://github.com/origama/tubo.git
cd tubo
go build ./cmd/tubo
./tubo version

Quickstart in 5 steps

Start a relay

Pick one reachable machine and make it the relay for the swarm.

tubo relay -d

Join the swarm

On each service or client host, point tubo at the relay and the shared swarm key.

tubo join \
  --relay /ip4/<relay-ip>/tcp/4001/p2p/<relay-peer-id> \
  --swarm-key ./swarm.key

Attach a service

Publish a local HTTP service into the swarm under a stable name.

tubo attach \
  --target http://127.0.0.1:1234 \
  --name myapi \
  -d

Connect from a client

Resolve the service by name and open a local listener for it.

tubo connect myapi --local 127.0.0.1:51234

Test with curl

Once connect is up, send a real request through the tunnel.

curl -X POST \
  -H 'Content-Type: text/plain' \
  -d 'hello tubo' \
  'http://127.0.0.1:51234/v1/dummy?from=website'

Why tubo

The goal is to keep the setup small, explicit, and easy to reason about: one relay, one shared swarm key, named services, local listeners, and real HTTP traffic.

Good defaults, simple operations

tubo is designed to be installed quickly, run on a few hosts, and verified with an actual curl.

relay  →  attach  →  connect  →  curl

No big dashboard required.
Just enough tooling to get traffic flowing.