Terminal Manager is a desktop terminal and remote-session manager built with Wails v3 (Go backend + Svelte 5 frontend). It lets you organize sessions in a tree with folders and inheritance, open multiple terminals in tabs, and connect to SSH. It also integrates Apache Guacamole (via guacd) for RDP, VNC, and Telnet sessions streamed into the app.
- Session tree with folders and inheritance (configs cascade parent → child)
- Local shells: Bash, Zsh, Fish, PowerShell, Git Bash, plus custom commands
- SSH sessions (password or key auth)
- Remote desktop via Guacamole: RDP, VNC, Telnet
- Tabbed interface with pin/rename/duplicate/reconnect/close options
- Drag-and-drop reorder/move sessions and folders
- Search sessions by name/type; context menus for nodes and tabs
- Persisted settings and session snapshots (SQLite)
- Live system stats status bar (CPU, RAM, Disk, Net, Load)
- Backend (Go, Wails v3):
- Manages sessions, configs, and settings in a SQLite database located under the OS config directory (e.g.
~/.config/term/term.dbon Linux). - Spawns local shells and SSH sessions using PTYs; streams I/O via Wails events.
- Exposes an HTTP server on
localhost:3000for Guacamole WebSocket tunneling.
- Manages sessions, configs, and settings in a SQLite database located under the OS config directory (e.g.
- Frontend (Svelte 5 + Tailwind):
- Renders the session tree, terminal tabs, and remote desktops.
- Uses
ghostty-webfor a fast WebAssembly terminal emulator. - Uses
guacamole-common-jsto render RDP/VNC/Telnet sessions.
- Create folders and sessions; reorder and reparent via drag-and-drop.
- Each node can define key/value configuration; effective config is resolved by merging parents into children (child overrides parent).
- Context menu actions on nodes: New session/subfolder, Rename, Duplicate (for sessions), Delete (with cascade for folders).
- Supported types:
bash,zsh,fish,pwsh(PowerShell),git-bash(Windows), andcustom. - Config options:
working_directory: absolute path (supports~expansion)environment_variables: semicolon-separatedKEY=value;KEY2=value2startup_commands: semicolon-separated commands run after the shell starts
- Config options:
ssh_host(required),ssh_port(default22)ssh_usernamessh_auth_method:passwordorkey- If
password:ssh_password - If
key:ssh_key_path(supports~expansion)
Note: SSH currently skips host key verification (uses InsecureIgnoreHostKey) — add verification before production use.
- Requires a running
guacdonlocalhost:4822. - The app opens a WebSocket tunnel to
ws://localhost:3000/api/guacamole/:sessionIdand streams the remote display. - Session type-specific config keys:
- RDP:
rdp_host,rdp_port(default3389),rdp_username,rdp_password,rdp_domain,rdp_security(any|nla|tls|rdp) - VNC:
vnc_host,vnc_port(default5900),vnc_password - Telnet:
telnet_host,telnet_port(default23),telnet_username,telnet_password
- RDP:
- Desktop parameters (RDP/VNC):
desktop_width(default1920),desktop_height(default1080),desktop_color_depth(8|16|24|32)
- Tabs: pin, rename, duplicate, reconnect (if exited), clear buffer, close others, close all exited, close.
- Keyboard shortcuts:
Ctrl+T: New terminal from selected sessionCtrl+W: Close active tabCtrl+Tab/Ctrl+Shift+Tab: Cycle tabs
- Session selection can auto-launch a tab; double-click always opens a new tab.
- Tab snapshots persist across restarts (optional restore on startup).
- Theme, font family/size
- Auto-launch behavior, restore tabs on startup, confirm tab close
- Show/hide status bar
- Emits
system:statsevery 2s (CPU, memory, disk, net speeds, load averages) and shows a compact HUD.
Prerequisites:
- Go 1.21+
- Node.js 18+
- Wails v3 CLI (
go install github.com/wailsapp/wails/v3/cmd/wails3@latest) - For RDP/VNC/Telnet:
guacdrunning onlocalhost:4822
Install frontend deps (on the first run or when frontend/package.json changes):
cd frontend && npm install
Run the app with hot reload:
wails3 dev
Build a production binary:
wails3 build
The app also starts a local HTTP server on port 3000 (used for Guacamole tunnels).
- Database: SQLite at
os.UserConfigDir()/term/term.db(e.g., Linux:~/.config/term/term.db). - Default bootstrap content includes example folders and sessions, plus sane default settings.
main.go: App bootstrap, services registration, window creationterminalservice.go: Local shell + SSH PTY management and I/Osessionservice.go: CRUD, tree building, move/duplicate, config inheritancesettingsservice.go: App settings get/set, tab snapshot persistencesystemstatsservice.go: Periodic system metrics emitterguacamoleservice.go+httpserver.go: Guacamole tunnel and WebSocket endpointdatabase/: SQLite schema, models, migrations, bootstrapfrontend/: Svelte 5 app (components, stores, bindings, Tailwind config)
- SSH host key verification is currently disabled. For production, implement verification.
git-bashis only applicable on Windows and must be installed locally.- Remote desktop requires
guacdreachable atlocalhost:4822. - Some of the values (local port, guacd port) are not configurable and aren't using dynamic ports, so the port must be available