Getting Started

Install Tubo, join a Tubo network, and publish your first HTTP or TCP/TLS service in under 5 minutes.

1. Install

The easiest way to install Tubo is the one-line installer:

$ curl -fsSL https://www.tubo.click/install.sh | sh

By default this upgrades a writable existing tubo on PATH; otherwise it installs to ~/.local/bin. If you use the default location, make sure that directory is on your PATH.

Install a specific version:

$ curl -fsSL https://www.tubo.click/install.sh | sh -s -- --version v0.12.1

Build from source:

$ git clone https://github.com/origama/tubo.git
$ cd tubo && go build -o tubo ./cmd/tubo

Verify the installation:

$ tubo version
tubo v0.12.1  protocol 1.1

2. Join the public network

Tubo ships with a public relay network. Joining it takes one command and saves configuration to ~/.config/tubo/config.yaml:

$ tubo join
✓ Joined public Tubo network
  relay   relay.tubo.click:4001
  cluster home  namespace default
Tip: The public network is invite-only by default. Services you publish are unlisted — only people with your share token can connect. For team-visible services, see Access Control and private clusters.

3. Publish a service

Run tubo attach next to any HTTP service. Tubo joins the swarm, signs a service announcement, and starts accepting libp2p streams.

# Attach an HTTP service running on 127.0.0.1:8080
$ tubo attach http://127.0.0.1:8080 --name myapi -d

✓ Service published
  name        myapi
  service id  svc_abc123def456
  visibility  unlisted
  access      invite token required

✓ Share token (give this to the person who needs access):
  tubo connect --token eyJhbGci...   --local 127.0.0.1:9000

Copy the tubo connect --token ... line and give it to whoever needs access.

4. Connect from another machine

On any machine with Tubo installed, run the connect command with the token:

$ tubo connect --token eyJhbGci... --local 127.0.0.1:9000

✓ Tunnel ready
  local       http://127.0.0.1:9000
  service     myapi  (svc_abc123def456)
  path        relayed via relay.tubo.click

$ curl http://127.0.0.1:9000/healthz
OK

5. Manage processes

Tubo uses a daemonless model. Long-running commands (attach, connect, relay, gateway) stay in the foreground by default. Use -d to detach them.

# List all detached processes on this machine
$ tubo ps
  PROCESS                  STATUS   PORT
  attach-myapi             running  —
  connect-myapi-9000       running  9000

# Follow logs
$ tubo logs process/attach-myapi

# Stop a process
$ tubo stop process/attach-myapi

# Clean up terminated processes
$ tubo rm --stale

Next steps