GitHub Copilot c8040e5938 go: harden session cleanup path
Ensure SessionManager.CloseAll fully removes session and route mappings by reusing CloseSession for each tracked session ID.

Tighten coverage test assertions to verify CloseAll removes both sessions and route-key mappings, guarding against stale state regressions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-14 18:26:43 +00:00
2026-02-14 18:26:43 +00:00
2026-01-21 23:53:57 +00:00

webterm (Go)

Icon

webterm serves terminal sessions over HTTP/WebSocket, with a dashboard mode for multiple sessions and Docker-aware tiles.

Screenshot

Features

  • Web terminal with reconnect support
  • Session dashboard with live SVG screenshots
  • Docker watch mode (webterm-command / webterm-theme labels)
  • Docker compose manifest ingestion
  • CPU sparkline tiles for compose services
  • SSE activity updates for fast dashboard refresh
  • Theme/font controls for terminal rendering

Install

Build from source

git clone https://github.com/rcarmo/webterm.git
cd webterm/go
mkdir -p bin
go build -o ./bin/webterm ./cmd/webterm

The command above produces go/bin/webterm; you can also build it from repo root with make build-go.

Quick start

Run a default shell session:

cd go
go run ./cmd/webterm

Run a specific command:

cd go
go run ./cmd/webterm -- htop

Then open http://localhost:8080.

Dashboard modes

Landing manifest

- name: Logs
  slug: logs
  command: docker logs -f my-service
  theme: nord
cd go
go run ./cmd/webterm -- --landing-manifest ../landing.yaml

Docker watch

cd go
go run ./cmd/webterm -- --docker-watch

Containers with these labels become tiles:

  • webterm-command: command string, or auto for Docker exec
  • webterm-theme: theme name (fallback is xterm palette)

Compose manifest

cd go
go run ./cmd/webterm -- --compose-manifest ../docker-compose.yaml

Environment variables

  • WEBTERM_STATIC_PATH: override static asset directory
  • WEBTERM_DOCKER_USERNAME: user for Docker exec sessions
  • WEBTERM_DOCKER_AUTO_COMMAND: override auto command (/bin/bash default)
  • WEBTERM_SCREENSHOT_FORCE_REDRAW: force redraw before screenshots (true/1/yes/on)
  • DOCKER_HOST: Docker daemon endpoint override

Development (Makefile-first)

make install-dev
make check
make race
make test

Frontend bundle tasks:

make build
make build-fast
make bundle-watch

Docker

docker build -t webterm .
docker run -v /var/run/docker.sock:/var/run/docker.sock -p 8080:8080 webterm --docker-watch

The image sets WEBTERM_STATIC_PATH=/app/static and serves assets from go/webterm/static. The Dockerfile uses a minimal Alpine runtime stage and only installs ca-certificates plus docker-cli.

S
Description
No description provided
Readme 122 MiB
Languages
Go 51.5%
TypeScript 31%
JavaScript 14.8%
Shell 1.2%
Makefile 0.8%
Other 0.7%