webterm serves terminal sessions over HTTP/WebSocket, with a dashboard mode for multiple sessions and live-updating terminal tiles that is perfect for running multiple AI coding agents in agentbox.
This repository is the Go port of the original Python implementation, which is preserved in the python branch.
demo.mp4
- Typeahead find for quickly finding and launching sessions with minimal friction
- Web terminal with reconnect support
- Ghostty WebAssembly terminal engine for fast rendering from
ghostty-web - Session dashboard with live PNG (or optional SVG) screenshots from
go-te - Docker watch mode (
webterm-command/webterm-themelabels) - Docker compose manifest ingestion (see
prod.compose.yaml) - CPU sparkline tiles for compose services
- SSE activity updates for fast dashboard refresh
- Mobile/touch support with virtual keyboard + draggable keybar
- Theme/font controls for terminal rendering
- Vendored Nerd Font assets with full glyph/icon support (no external font fetch required)
go install github.com/rcarmo/webterm/cmd/webterm@latestgit clone https://github.com/rcarmo/webterm.git
cd webterm
mkdir -p bin
go build -o ./bin/webterm ./cmd/webtermThe command above produces bin/webterm; you can also build it from repo root with make build-go.
Run a default shell session:
go run ./cmd/webtermRun a specific command:
go run ./cmd/webterm -- htopThen open http://localhost:8080.
- name: Logs
slug: logs
command: docker logs -f my-service
theme: nordgo run ./cmd/webterm -- --landing-manifest ./landing.yamlgo run ./cmd/webterm -- --docker-watchContainers with these labels become tiles:
webterm-command: command string, orautofor Docker execwebterm-theme: theme name (fallback isxtermpalette)
Available themes: tango, xterm, monokai, monokai-pro, ristretto, dark, light, dracula, catppuccin, nord, gruvbox, solarized, tokyo, miasma, github, gotham
Use prod.compose.yaml as the canonical multi-session compose example:
go run ./cmd/webterm -- --compose-manifest ./prod.compose.yamlWEBTERM_STATIC_PATH: override static asset directoryWEBTERM_DOCKER_USERNAME: user for Docker exec sessionsWEBTERM_DOCKER_AUTO_COMMAND: override auto command (/bin/bashdefault)WEBTERM_SCREENSHOT_FORCE_REDRAW: force redraw before screenshots (true/1/yes/on)WEBTERM_SCREENSHOT_MODE: screenshot format for dashboard thumbnails (pngdefault, setsvgto use SVG)DOCKER_HOST: Docker daemon endpoint override
make install-dev
make check
make race
make test
make bump-patchFrontend bundle tasks:
make build
make build-fast
make bundle-watchdocker build -t webterm .
docker run -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 webterm --docker-watchWeb assets are embedded in the Go binary by default (you can still override with WEBTERM_STATIC_PATH).
The Dockerfile uses a minimal Alpine runtime stage and only installs ca-certificates plus docker-cli.