Show HN: Ttmux, a Modern and Fast Tmux Developer statico released ttmux, a terminal multiplexer written entirely with Anthropic's Claude Code, now available in beta via Homebrew or built from source with Rust 1.82 or later. ttmux ships with defaults tmux requires plugins for, including no escape-key delay, 10,000 lines of scrollback versus tmux's 2,000, mouse support, truecolor and undercurl, OSC 52 clipboard, kitty keyboard and modifyOtherKeys, and kitty/iTerm2/sixel image support, plus floating panes, a TOML config, a settings screen, and per-pane busy/needs-you/done agent marks. The project warns the config format will change before 1.0. A modern multiplexer alternative. Warning Beta software. ttmux is still under test. Expect bugs, and expect the config format to change before 1.0. Note Made entirely with Claude Code https://claude.com/claude-code . Every line of this project was written by Claude. ttmux runs many terminals in one window, like tmux or screen. It adds floating panes, real mouse support, curved borders, and a settings screen that you open inside the app. With Homebrew, on macOS or Linux: brew install statico/tap/ttmux Or build it from source, which needs Rust 1.82 or later: cargo install --git https://github.com/statico/ttmux Then start it: ttmux Prebuilt binaries for macOS and Linux are also on the releases page https://github.com/statico/ttmux/releases . tmux works well and has decades of muscle memory behind it. But a fresh tmux needs a .tmux.conf and plugins like tmux-sensible https://github.com/tmux-plugins/tmux-sensible before it stops getting in the way. ttmux ships with those defaults. | | tmux, out of the box | ttmux | |---|---|---| | Escape key | a delay after esc 500ms before 3.5 | no delay, so vim leaves insert mode at once | | Scrollback | 2,000 lines | 10,000 lines | | Mouse | off | on: click, drag, resize, and wheel | | Color | truecolor and undercurl need terminal-overrides | truecolor and undercurl | | Focus events | off | on | | Clipboard | ignores OSC 52 from programs | copies to your clipboard, or set clipboard = false | | Modern keys | extended-keys off, so shift+enter is lost | kitty keyboard and modifyOtherKeys | | Images | sixel if built in, the rest need allow-passthrough | kitty, iTerm2, and sixel, even mpv video, and nothing but images | | Config | .tmux.conf , source-file by hand | TOML, reload with the prefix and r , or a settings screen | | Discovering keys | a list behind the prefix and ? | a which-key popup and a command palette | | Layout | tiling | tiling or free-floating, drag and drop | | Agents | — | a per-pane busy, needs-you, or done mark | On first start ttmux asks which keymap you want: Modern, tmux, or screen. Change it later in settings or with general.keys-preset , and rebind any key under keys . Keys for each keymap | Action | Modern ctrl+t | tmux ctrl+b | screen ctrl+a | |---|---|---|---| | Split right | v or % | % | \| | | Split down | s | " | S | | Move the focus | h j k l | arrows | tab | | Resize the pane | H J K L | | | | Zoom the pane | z or o | z | | | Float one pane | f | | | | Next layout | space | space | | | New, next, previous tab | c n p | c n p | c n p | | Last tab | ctrl+t | | | | Move the tab left or right | < | | | | Break the pane into a tab | | | | | Join the pane into a tab | @ | | | | Rename the tab, the pane | A , a | , , . | A , . | | Scroll back, or copy mode | or esc | | esc | | Paste what copy mode copied | | | | | Close the pane | x or q | x | K | | Close the tab | & | & | | | Command line | : | : | : | | Command palette | ; | | | | Send the prefix | t | ctrl+b | a | | Settings | , | | | | Help | ? | ? | ? | | Detach | d | d | d | | Quit ttmux | Q | | | Every keymap also has these, with no prefix: | Key | Action | |---|---| | alt+arrows | Move the focus | | alt+shift+arrows | Resize the pane | | ctrl+alt+right / down | Split right or down | | ctrl+alt+w | Close the pane | | ctrl+alt+f | Switch between tiling and free mode | | ctrl+alt+z | Zoom the pane | | ctrl+alt+t | New tab | | ctrl+alt+p | Command palette | | ctrl+alt+, | Settings | | ctrl+alt+n | Go to the next pane that wants you | | shift+pageup / pagedown | Scroll back and forward | Press the prefix and ? in the app for the full list. tmux's copy mode is off by default, because programs like coding agents copy on their own and want the mouse drag. Set general.copy-mode = true and the scroll back key opens it: move with h j k l , press v to start a selection and y to copy it, or q to leave. A mouse drag over a pane also copies. The copy goes to your clipboard and to a paste buffer that the prefix and types back. Hold the prefix and a popup lists what can follow it, like which-key in neovim. Turn it off with general.which-key = false . The prefix and : open a command line for the scripting commands below. Tab completes a command or a flag, and the row above shows the usage of the command you are typing. A name you type is yours. A program can set a title with an escape sequence, but that title never replaces a name you set, and it names the pane, not the tab. The tab takes the title only while it holds one pane. Every text field takes the readline keys, including ctrl+a , ctrl+e , ctrl+w , ctrl+k , ctrl+u , ctrl+y , alt+b , and alt+f . Lists move with ctrl+n and ctrl+p , and ctrl+g cancels. ctrl+alt+f turns the grid of panes into a window manager. Drag a title bar to move a pane. Drag any corner to resize it. Click to raise it. Tiling mode gets the same mouse support for dividers. Grab the line between two panes and drag it. ttmux works like tmux. The server keeps your panes alive after you detach. ttmux attach to the default session, or start it ttmux new -d -s work start a session in the background ttmux attach -t work attach to a named session ttmux ls list the sessions ttmux kill-session -t work stop one ttmux upgrade move a session to a server started from here ctrl+t d detaches. ttmux upgrade moves a live session to a new server. The shells, jobs, and screens stay. Add -t work for a named session. Use it for two things: - A new version. Install the new build, then run ttmux upgrade . The session then runs on the new build. - The macOS keychain and permission prompts. macOS ties them to the terminal that started the server. When that terminal quits, panes cannot unlock the keychain or show a permission prompt. To correct this, run ttmux upgrade in a terminal window that is not inside ttmux. ttmux doctor tells you if a session has this problem. The scrollback comes back as plain text, and inline images are lost. When a client attaches, new panes get its SSH AUTH SOCK , DISPLAY , and the other variables in general.update-environment . If the client does not have one of them, new panes do not get it either. Every pane can drive the session it lives in. The commands are tmux's, so a tmux script mostly runs unchanged. The commands ttmux send-keys -t %2 "make test" Enter type into a pane ttmux split-window -h split side by side, prints %2 ttmux capture-pane -t %2 -S - read a pane, scrollback and all ttmux new-window open a tab, prints its number ttmux select-pane -t %2 or -L -R -U -D ttmux list-panes %2: 80x24 zsh active ttmux list-windows 1:build 2 panes active ttmux rename-window build name a window ttmux display-message "done" show text in the status bar ttmux join-pane -s %3 -t 2 move a pane into window 2 ttmux break-pane and back out into its own ttmux run toggle-zoom any key-binding action A target is a pane id from list-panes , or a window number counted from 1. With no target the command acts on the pane it was run from, or the focused pane outside ttmux. The session is the one $TTMUX SESSION names, which every pane already has set. ttmux --help prints the full list. API.md https://github.com/statico/ttmux/blob/main/API.md is the full reference: every command, every flag, the exit codes, and recipes. ttmux