Self-hosted browser terminal with multi-session tabs, modern UI, and cross-platform metrics.
demo.mov
- Multiple terminal sessions with tabs, detach, and keyboard shortcuts
- Cross-platform CPU/memory/GPU metrics (macOS, Linux, Windows)
- Session snapshots and restore support
- Agent session monitoring dashboard (daemon + SSE)
- Plain password auth + rate limiting
- Mobile-friendly UI
- Go 1.26+
- Node 20+ (for frontend build)
Build and run:
make build
./webterm serve --config webterm.yamlGenerate a default config:
./webterm config init --path webterm.yamlKey settings include:
server.bind/server.portauth.modeandauth.passwordterminal.shellandterminal.working_dirsessions.max_sessionsand snapshot settingsmonitoring.db_path,monitoring.sample_interval,monitoring.retention
Set a plain password directly in webterm.yaml:
auth:
mode: password
password: "your-password"Password auth only.
webterm serve/webterm up— start the serverwebterm status— show monitoring summarywebterm notify SESSION --title "MESSAGE"— send monitoring notificationwebterm agent-setup— install agent helper scriptwebterm doctor— environment diagnosticswebterm config init— create config templatewebterm version— build metadatawebterm completion [bash|zsh|fish]— shell completions
The monitoring daemon runs automatically when you start the server. Use webterm status for a CLI overview, or open the Monitor panel in the UI.
Example config:
monitoring:
enabled: true
db_path: "~/.webterm/monitoring.db"
sample_interval: 10s
retention: 168hmake testCloudflare Tunnel:
cloudflared tunnel --url http://localhost:8080ngrok:
ngrok http 8080Tailscale Serve:
tailscale serve --http=8080 8080sessions.snapshot_key accepts a simple string; it is derived into an encryption key automatically. Leave it empty to disable snapshot encryption.
The frontend build output is served from frontend/out and embedded into the Go binary at build time.