Back to projects
Sep 30, 2026
4 min read

Orbit

A terminal UI to launch, control and monitor local services (processes, Docker containers and docker compose) while respecting their dependencies.

Orbit

Orbit is a TUI to launch, control and monitor local development services: processes (backends, frontends, workers), Docker containers and docker compose services. It is built with TypeScript, Bun and OpenTUI (@opentui/react), and configured through a single orbit.yaml file.

 ◉ orbit · demo     1 Dashboard  2 Graph  3 Logs                                ● 7 up  ○ 1
╭─ Services 7/8 ───────────╮╭─ Dependency graph · 7/8 up ────────────────────────────────────╮
│ ● postgres       :55432  ││                               ╭────────────────────╮           │
│ ● redis          :56379  ││                         ╭────▶│ ● auth             ├────╮      │
│ ● auth           :4300   ││ ╭────────────────────╮  │     │ healthy :4300 40M  │    │      │
│▌● api            :4100   ││ │ ● postgres         ├──┤     ╰────────────────────╯    │      │
│ ● worker                 ││ │ healthy :55432 19M │  │                               │      │
│ ● web            :4200   ││ ╰────────────────────╯  │                               │  ... │

The problem

Running a local stack usually means juggling many terminals: a database container, a backend, a frontend, a worker, each one depending on another. Starting them in the wrong order, leaving orphaned processes hogging ports, or not knowing which one failed makes the day-to-day painful.

What it does

  • Dependency graph. Services are laid out by layers and colored by status; selecting a node highlights its dependencies and its dependents. Navigable with keyboard and mouse.
  • Ordered startup and shutdown. start brings up dependencies first and waits until they are ready; stop stops dependents first.
  • Healthchecks. HTTP, TCP, command, or Docker’s HEALTHCHECK.
  • Restart policy. no, on-failure or always, with exponential backoff.
  • Live logs. Per service or combined, with colored prefixes, regex filter or search (highlight while keeping all lines), scrolling, timestamps and error/warning highlighting. Long lines wrap, the view stays put while you scroll up, and a copy mode selects whole lines and copies them via OSC 52 or the system clipboard. Logs can also be exported to a file.
  • CPU and memory metrics. Per process tree (via /proc) and per container (docker stats), shown as sparklines.
  • Docker and compose. Imports docker-compose.yml automatically (including depends_on, ports, healthchecks and variable interpolation) and re-attaches to containers that were already running; those are not stopped when exiting Orbit unless you ask for it.
  • Detach and resume. On quit you choose between stopping everything or leaving services running. Detached processes keep their own process group and write their logs to disk; the next orbit re-attaches with status, logs, metrics and controls, and orbit down stops them from outside.
  • Environment variables. Global and per-service env and env_file (with optional files), ${VAR:-def} interpolation, files re-read on every restart, and a view of each service’s environment with secrets masked.
  • One-shot tasks. Builds, migrations or provisioning steps count as ready once they finish successfully.
  • Robust process handling. Detects occupied ports before starting and kills entire process trees, so no orphaned vite or esbuild processes are left behind.
  • Command palette with fuzzy search, service groups, and open-in-browser.
  • Themes. Eleven built-in themes (Catppuccin, Tokyo Night, Dracula, Nord, Gruvbox, Rosé Pine, One Dark…) switchable live, plus custom JSON themes that extend a built-in one.
  • lazygit integration. Open a service’s git repository in lazygit and come back to Orbit with the services still running.

Usage

Published on npm as @jgoterris/orbit: run it with bunx @jgoterris/orbit, or install it globally. It also offers non-TUI commands (up, down, graph, ls, and logs with -f, --grep and --since) and orbit init, which generates an orbit.yaml by scanning the project.

Status

Personal open-source tool released under the MIT license. The codebase is covered by tests for the config, the dependency graph, the supervisor (with real processes) and the TUI.