panes that outlive the terminal
Split a terminal into panes, run several shells side by side, then walk away — the session keeps running and you pick it up later, from another terminal or another machine. Written from scratch in Go: its own ptys, its own VT100 emulator, no tmux and no screen underneath.
The everyday work of a multiplexer — splitting, switching, detaching, coming back — done without a plugin manager, a config file you have to write first, or anything else installed alongside it.
Detach and it keeps going
The session lives in a daemon, not in your terminal. Close the window, drop the SSH link, reboot your laptop — reattach and everything is where you left it.
Nothing underneath
Not a wrapper around tmux. It drives the pseudo-terminals itself and emulates VT100 with scrollback for every pane, in one static binary.
Batteries included
Eleven colour themes, a git segment, pane logging, session persistence — compiled in. tmux wants a plugin manager and four plugins for the same list.
Configure it while it runs
Every setting is editable from inside a live session and takes effect immediately — saved back to your config only when you ask.
Things tmux either doesn't do, or needs a plugin for — here they're just a keypress away.
x, or
an exit typed into the wrong one. In tmux a closed pane
is simply gone.
termdock layout save dev / apply dev. Windows,
splits, ratios, names and each pane's directory, rebuilt on demand —
the job people currently leave for tmuxinator and a YAML file.
eval "$(termdock shell-init)")
and termdock records where every prompt, command and output begins —
in its own VT emulator, so it works over SSH in any terminal.
Everything below depends on it, and tmux cannot do it at all: it has
no emulator to record marks in.
; notify-send wrapper fundamentally cannot.
deploy-feat_login-api_server.log, named after the session,
the window and the pane's own name. The moment before you reproduce
something: six panes, one keystroke, a folder you can attach to a
ticket. tmux's pipe-pane is one pane at a time, with the
filename written out by hand.
theme, applying each as you land on it — and
Enter types one into the row for anything
free-form. S writes the current value to your
config file, rewriting just that line.
send-keys, split-window,
new-window, select-pane,
list-panes — set a whole dev environment up from a shell
script, with no client attached.
Each of these is explained properly in the manual — getting started, shell integration, working in it all day, configuration, remote & sharing, every key — or keep the one-page cheatsheet next to you.
Splitting, the live overview, the settings screen, a theme changed mid-session, search across scrollbacks, the popup, the jump picker — then detaching and picking it straight back up.
Dracula theme, git branch in the status bar. Everything shown is a keypress from a fresh install.
Native packages for linux, archives for macOS, both amd64 and arm64 — built and published straight from the tag.
# Debian, Ubuntu, Mint — grab the asset from the latest release $ sudo apt install ./termdock_<version>_linux_amd64.deb
# Fedora, RHEL, openSUSE $ sudo dnf install ./termdock_<version>_linux_amd64.rpm
# Alpine $ sudo apk add --allow-untrusted ./termdock_<version>_linux_amd64.apk
# anything else, including macOS — one static binary, no runtime deps $ tar xf termdock_<version>_linux_amd64.tar.gz $ sudo install termdock /usr/local/bin/
# with Go already installed $ go install github.com/padovanl/termdock@latest
Filenames carry the version — copy the exact link from the
latest release.
Then run termdock; Ctrl-B ?
lists every key there is. The packages also drop a commented example config at
/usr/share/doc/termdock/termdock.conf.example — though you never
have to write one by hand.
Everything sits behind Ctrl-B, as in tmux. The full reference is in the app at any time with Ctrl-B ? — and it's generated from your actual bindings, so it stays true if you rebind anything.
| Keys | What happens |
|---|---|
| Ctrl-B ? | The whole keybinding reference — start here |
| Ctrl-B v / s | Split the pane side by side, or stacked |
| Ctrl-B ←↓↑→ | Move the focus; keep pressing arrows to keep going |
| Ctrl-B z | Zoom the active pane full screen, and back |
| Ctrl-B c | New window |
| Ctrl-B w | Fuzzy-jump to any window or pane, with a preview |
| Ctrl-B g | Live overview of every pane in the session |
| Ctrl-B / | Search every pane's scrollback at once |
| Ctrl-B [ | Copy-mode: scroll, select, yank to the system clipboard |
| Ctrl-B C | Settings — change any of them live |
| Ctrl-B P | The floating popup terminal |
| Ctrl-B S | Switch to another session without detaching |
| Ctrl-B u | Pick a URL or path off the screen, straight to the clipboard |
| Ctrl-B d | Detach — the session carries on without you |
Coming back later is termdock ls to see what's still running,
then termdock attach -t main.