Nubo

the nubo cli

Your fleet, in the terminal. One static binary.

Sign in with GitHub, then list every Project, Space, Frame, volume, and runner from a script, or open the full-screen TUI to tail logs and watch metrics live. Same fleet you see in the dashboard, a keystroke away.

read-only v1 · macos & linux · amd64 / arm64

One command. Installed in under a minute.

One static binary, no background daemon. It lands in your path and nubo just works.

nubo cli · install amd64 / arm64
$ curl -fsSL https://dl.withnubo.com/nubo-cli/install.sh | bash
macos & linux · amd64 / arm64 · no background daemon
  • Pin a release

    Lock to an exact version, or change where the binary lands.

    $ NUBO_VERSION=v0.1.0 \
      NUBO_INSTALL_DIR=~/.local/bin \
      curl -fsSL …/install.sh | bash
  • From source

    Already have a Rust toolchain? Build it yourself.

    $ cargo install --path .

GitHub, then you're in.

nubo login opens your browser, signs you in with GitHub, and stores a scoped access token with 0600 permissions. On a CI runner, pipe a Personal Access Token in over stdin instead.

  • browser Sign in with GitHub. The token is minted and saved for you.
  • headless nubo login --token-stdin reads a token from stdin for CI.
  • scoped Revoke or rotate the token from your dashboard, anytime.
terminal ~/acme
$ nubo login
→ opening your browser to sign in with github…
✓ signed in as [email protected]
✓ token saved to ~/.config/nubo/credentials.json

$ nubo whoami
[email protected]  ·  plan: cloud  ·  shuttle.withnubo.com

Every list, one command.

Each resource has an ls that prints a clean table. Add --json to get the raw API response back, ready to pipe into jq or a CI step.

  • nubo projects ls Every project you can see.
  • nubo spaces ls --project <id> Spaces inside a project.
  • nubo frames ls --project <id> --space <id> Apps and databases, with live status.
  • nubo volumes ls --project <id> Persistent volumes and their state.
  • nubo agents ls Your bring-your-own-server runners.
  • nubo whoami Who you're signed in as.
terminal ~/acme
$ nubo frames ls --project acme --space web
NAME      KIND     STATUS     ADDRESS
api       app      running    acme-api.nubo.onl
web       app      running    acme-web.nubo.onl
worker    app      building   -
cache     redis    running    -

$ nubo projects ls --json | jq -r '.[].name'
acme
internal-tools
playground

Or just run nubo.

With no arguments, the CLI opens a full-screen, greyscale TUI. Drill from Projects into Spaces into Frames, open a Frame for a tabbed view, and tail logs or watch seven days of metrics without leaving the keyboard.

nubo · acme / web / frames [email protected] · shuttle.withnubo.com
name kind status
api app running
web app running
worker app building
cache redis running
api overview logs metrics 7-day
cpu 0.3 / 1.0 vCPU
mem 412 / 512 MB
net 1.8 GB / day

keys

  • ↑ ↓ / j k Move or scroll
  • enter / l Open
  • esc / h Back
  • tab Switch view
  • 1 2 3 Overview · Logs · Metrics
  • f Follow logs
  • g / G Top · bottom
  • r Refresh
  • / Filter
  • ? Help
  • q Quit

Flag, env, or stored credentials.

Every setting resolves in the same order: an explicit flag wins, then the environment variable, then whatever nubo login saved. Point it at a self-hosted API with --api-url.

API URL --api-url NUBO_API_URL https://shuttle.withnubo.com
Token --token NUBO_TOKEN stored credentials
Output --json none tables

Built to browse. Built to grow.

Today the CLI reads: it lists, opens, tails, and watches, and never changes anything. The auth, API client, and TUI shell are built to extend, and writes are next.

on the way

  • Deploys from the terminal
  • Environment variables
  • Exec into a Frame
  • Build logs
  • Shell completions

stop reading

Go deploy something.

Free for 7 days, no card, no sales call. We will not pretend this page wasn't built to make you want to ship on a Sunday. It was.