Back to projects
Sep 30, 2026
3 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, scrolling, timestamps and error/warning highlighting.
  • 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.
  • 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.

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 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.