Orbit
Orbit es una TUI para lanzar, controlar y monitorizar servicios de desarrollo locales: procesos (backends, frontends, workers), contenedores Docker y servicios de docker compose. Está construida con TypeScript, Bun y OpenTUI (@opentui/react), y se configura mediante un único archivo orbit.yaml.
◉ 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 ││ ╰────────────────────╯ │ │ ... │
El problema
Levantar un entorno local suele implicar manejar muchas terminales: un contenedor de base de datos, un backend, un frontend, un worker, cada uno dependiendo de otro. Arrancarlos en el orden equivocado, dejar procesos huérfanos ocupando puertos o no saber cuál ha fallado hace el día a día incómodo.
Qué hace
- Grafo de dependencias. Los servicios se colocan por capas y se colorean según su estado; al seleccionar un nodo se resaltan sus dependencias y sus dependientes. Se navega con teclado y ratón.
- Arranque y parada ordenados.
startlevanta primero las dependencias y espera a que estén listas;stopdetiene primero a los dependientes. - Healthchecks. HTTP, TCP, comando o el
HEALTHCHECKde Docker. - Política de reinicio.
no,on-failureoalways, con backoff exponencial. - Logs en vivo. Por servicio o combinados, con prefijos de color, filtro por regex o búsqueda (resalta manteniendo todas las líneas), scroll, marcas de tiempo y resaltado de errores y avisos. Las líneas largas se ajustan, la vista no salta mientras haces scroll hacia arriba, y un modo copia selecciona líneas completas y las copia vía OSC 52 o el portapapeles del sistema. Los logs también se pueden exportar a un archivo.
- Métricas de CPU y memoria. Por árbol de procesos (vía
/proc) y por contenedor (docker stats), mostradas como sparklines. - Docker y compose. Importa automáticamente el
docker-compose.yml(condepends_on, puertos, healthchecks e interpolación de variables) y se reengancha a contenedores que ya estaban en ejecución; estos no se detienen al salir de Orbit salvo que lo pidas. - Desacoplar y reanudar. Al salir eliges entre detener todo o dejar los servicios en marcha. Los procesos desacoplados mantienen su propio grupo de procesos y escriben sus logs a disco; el siguiente
orbitse reengancha con estado, logs, métricas y controles, yorbit downlos detiene desde fuera. - Variables de entorno.
envyenv_fileglobales y por servicio (con archivos opcionales), interpolación${VAR:-def}, archivos releídos en cada reinicio y una vista del entorno de cada servicio con los secretos enmascarados. - Tareas de una sola ejecución. Builds, migraciones o aprovisionamiento cuentan como listas cuando terminan correctamente.
- Gestión robusta de procesos. Detecta puertos ocupados antes de arrancar y mata árboles de procesos completos, sin dejar procesos
viteoesbuildhuérfanos. - Paleta de comandos con búsqueda difusa, grupos de servicios y apertura en el navegador.
- Temas. Once temas incluidos (Catppuccin, Tokyo Night, Dracula, Nord, Gruvbox, Rosé Pine, One Dark…) cambiables en vivo, además de temas JSON propios que extienden uno existente.
- Integración con lazygit. Abre el repositorio git de un servicio en lazygit y vuelve a Orbit con los servicios todavía en marcha.
Uso
Publicada en npm como @jgoterris/orbit: se ejecuta con bunx @jgoterris/orbit o se instala globalmente. También ofrece comandos sin TUI (up, down, graph, ls y logs con -f, --grep y --since) y orbit init, que genera un orbit.yaml escaneando el proyecto.
Estado
Herramienta personal de código abierto con licencia MIT. El código está cubierto por tests de la configuración, el grafo de dependencias, el supervisor (con procesos reales) y la TUI.