{"id":50854832,"url":"https://github.com/go-wombat/dockterminal","last_synced_at":"2026-06-14T17:33:21.059Z","repository":{"id":338787324,"uuid":"1158418661","full_name":"go-wombat/dockterminal","owner":"go-wombat","description":"CRT-styled Docker management dashboard. Manage stacks, containers, logs and shell — all from a terminal-inspired UI.","archived":false,"fork":false,"pushed_at":"2026-03-02T10:53:59.000Z","size":855,"stargazers_count":16,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-02T13:27:36.010Z","etag":null,"topics":["dashboard","docker","docker-compose","docker-container","homelab","self-hosted"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/go-wombat.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-15T10:42:42.000Z","updated_at":"2026-03-02T10:54:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/go-wombat/dockterminal","commit_stats":null,"previous_names":["go-wombat/dockterminal"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/go-wombat/dockterminal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-wombat%2Fdockterminal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-wombat%2Fdockterminal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-wombat%2Fdockterminal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-wombat%2Fdockterminal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/go-wombat","download_url":"https://codeload.github.com/go-wombat/dockterminal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/go-wombat%2Fdockterminal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34331810,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dashboard","docker","docker-compose","docker-container","homelab","self-hosted"],"created_at":"2026-06-14T17:33:19.666Z","updated_at":"2026-06-14T17:33:21.052Z","avatar_url":"https://github.com/go-wombat.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DockTerminal\n\n### Your Docker homelab deserves a cooler dashboard. 🖥️\n\nDockTerminal is a retro CRT-styled Docker management dashboard. Scanlines, phosphor glow, green-on-black — manage your containers like you're hacking into a mainframe from 1987.\n\nDockTerminal manages **your** stacks — not every container on the system. Drop a compose project into your stacks directory and you get full control: start, stop, restart, shell, logs, compose editor. Everything else running on the host still shows up, but read-only — you can see it, not break it.\n\nNo Electron. No Docker SDK. Just a React SPA that shells out to the Docker CLI.\n\n![DockTerminal dashboard](docs/screenshot.png)\n\n---\n\n## 🚀 Quick Start\n\n```bash\ndocker compose up -d\n```\n\nOpen [http://localhost:5001](http://localhost:5001). That's it.\n\n\u003e **Heads up:** DockTerminal has no built-in authentication. See [Security](#-security) before exposing it beyond localhost.\n\n---\n\n## What You Get\n\n### 📦 Stacks \u0026 Containers\nCompose projects are detected automatically. Managed stacks (from your stacks directory) get full controls — up, down, restart, stop, edit compose files. Unmanaged projects show up read-only. Standalone containers get their own group.\n\n### 📊 Live Stats\nCPU, memory, network I/O, and container resource usage — polled every 3 seconds. No agents, no daemons, no overhead.\n\n### 💻 Shell Terminal\n`docker exec` straight from the browser. Real shell, real output, ANSI colors preserved. Type commands, see results.\n\n### ✏️ Compose Editor\nCreate and edit stacks with a split-pane YAML editor. Live service graph on the right shows your services, dependencies, and networks as you type. Ships with starter templates (Nginx + SSL, Postgres + Redis, Node.js).\n\n### 🤖 AI Diagnostics\nAuto-scans for non-running containers and generates a diagnosis: exit codes, image state, multi-container impact, and a recommended fix. One-click execute (with confirmation) to restart or resolve.\n\n### 🔴 Streaming Operations\nCompose up/down operations stream live output via SSE. Watch your stack come online in real time — colored output, status indicators, exit codes.\n\n### 📜 Logs\nAggregated Docker events or per-container logs. Filter by level (INFO / WARN / ERR) and search by keyword. Color-coded, auto-scrolling.\n\n### ✨ The Aesthetic\nCRT scanlines, vignette overlay, glitching logo text, block-character progress bars, phosphor green on pitch black. Boot sequence on first load. Status bar with host OS, Docker version, and network throughput. It looks like a terminal from a game you love.\n\n---\n\n## 📥 Installation\n\n### 🐳 Docker (recommended)\n\nThe default `docker-compose.yml` binds to port **5001**, mounts the Docker socket, and uses `/opt/stacks` for managed stacks. The image includes a healthcheck on `/api/health`.\n\nTo customize, edit `docker-compose.yml`:\n\n```yaml\nservices:\n  dockterminal:\n    image: dockterminal:latest\n    build: .\n    container_name: dockterminal\n    restart: unless-stopped\n    ports:\n      - \"5001:5001\"              # change the left side to remap the host port\n    volumes:\n      - /var/run/docker.sock:/var/run/docker.sock\n      - ./stacks:/opt/stacks          # or /path/to/your/stacks:/opt/stacks\n    environment:\n      - DOCKTERMINAL_STACKS_DIR=/opt/stacks\n```\n\nThen `docker compose up -d` and open [http://localhost:5001](http://localhost:5001).\n\n### Native (Node.js)\n\nNode 22+ and Docker required.\n\n```bash\nnpm install\nnpm run build\nDOCKTERMINAL_PORT=5001 npm start\n```\n\nOpen `http://localhost:\u003cDOCKTERMINAL_PORT\u003e` (default **5001**).\n\n### Development\n\n```bash\nnpm install\nnpm run dev\n```\n\nOpen [http://localhost:5173](http://localhost:5173). Vite dev server with HMR + API middleware.\n\nTo preview a production build locally: `npm run preview`.\n\n---\n\n## ⚙️ Configuration\n\n| Variable | Default | Applies to | Description |\n|---|---|---|---|\n| `DOCKTERMINAL_STACKS_DIR` | `~/stacks` (native) / `/opt/stacks` (Docker) | Both | Directory to scan for managed stacks |\n| `DOCKTERMINAL_PORT` | `5001` | Native only | Server port. In Docker, change the port mapping in `docker-compose.yml` instead |\n\nA **managed stack** is any subdirectory in your stacks dir containing a compose file (`compose.yaml`, `compose.yml`, or `docker-compose.yml`). Managed stacks get action buttons and appear even when stopped.\n\nCompose projects detected via `docker compose ls` that live outside your stacks dir show up as read-only. Containers not in any compose project are grouped under \"standalone\".\n\n### Adding existing projects\n\nTo manage an existing Docker Compose project, symlink it into your stacks directory:\n\n```bash\nln -s /path/to/your/project stacks/projectname\n```\n\nWhen running DockTerminal in Docker, also mount the project as a volume in `docker-compose.yml`:\n\n```yaml\nvolumes:\n  - /var/run/docker.sock:/var/run/docker.sock\n  - ./stacks:/opt/stacks\n  - /path/to/your/project:/opt/stacks/projectname\n```\n\nRestart DockTerminal and the project will appear as a managed stack with full controls.\n\n---\n\n## 🔒 Security\n\nDockTerminal has **no built-in authentication or authorization**. Anyone who can reach the port can view, stop, restart, and remove your containers — and open a shell into any running container.\n\nIt also mounts the Docker socket, which is effectively **root access to the host**.\n\n**You are responsible for securing access.** At minimum:\n\n- **Don't expose DockTerminal to the internet** without a reverse proxy and authentication in front of it (e.g. Nginx/Caddy + basic auth, Authelia, Authentik, or a VPN like Tailscale/WireGuard).\n- **Bind to localhost only** if you're accessing it from the same machine — change the port mapping to `127.0.0.1:5001:5001` in `docker-compose.yml`.\n- **Restrict network access** if running on a LAN — use firewall rules to limit which IPs can reach the port.\n\nThe shell terminal blocks a set of known dangerous commands (`rm -rf /`, `shutdown`, `reboot`, `mkfs`, `dd if=`, fork bombs, writes to `/dev/sd*`, `chmod -R 777 /`, `mv /`), but this is a safety net — not a security boundary.\n\n---\n\n## 🛠️ Tech\n\n- React 19, Vite, Express\n- Zero UI libraries — every component is hand-built\n- Zero Docker SDK — talks to Docker via `execFileSync` on the CLI\n- CSS Modules + CRT overlay effects\n- ~250 KB production bundle (gzipped: ~80 KB)\n\n---\n\n## Contributing\n\nFound a bug or have an idea? [Open an issue](../../issues) — we read them all.\n\nPull requests are welcome. Keep it simple, keep it focused.\n\n---\n\n## Who made this\n\nDockTerminal is built and used internally by [Go Wombat](https://gowombat.team).\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-wombat%2Fdockterminal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgo-wombat%2Fdockterminal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgo-wombat%2Fdockterminal/lists"}