tmux compatibility
What zeropty does and does not do compared with tmux.
Feature comparison with tmux
zeropty focuses on keeping programs running, reading their screens and sending them keys. Most features for humans sharing a terminal are not there.
| Feature | tmux | zeropty |
|---|---|---|
| Create, kill and list sessions, send keys, read the screen | ✅ | ✅ same arguments |
capture-pane options | many | -p -e -J -N -S -E -b -q (others are errors) |
| Buffers | load/paste/set/show/save-buffer and more | load-buffer, paste-buffer, capture-pane -b |
pipe-pane, rename-session, resize-window, set-environment -g | ✅ | ✅ (no pipe-pane -I) |
Format variables #{...} | hundreds | 25 session, window, pane, cursor, history and process variables (no conditionals or modifiers) |
Attach to watch as a human (attach) | ✅ | ✅ read-only (-r), Ctrl-b d, follows the terminal size |
| Windows and panes | ✅ | ❌ one program per session |
| Status line, copy mode, key bindings, config file, hooks | ✅ | ❌ |
| Several clients attached to one session | ✅ | ✅ (the size follows the terminal that attached last) |
| PTY | 1 per session (macOS limit 511~999) | not used; 1000+ sessions |
| Full-screen programs (vim and others) | ✅ | Launch them with zeropty-tty <program>. Verified with vim (editing, saving), less (paging, quitting), the python REPL (line editing, history) and claude. System programs that need privileges (setuid, entitlements), such as top and ps, do not work |
| Access for programs | control mode (-C) | JSON socket protocol, Node client |
| Search text across every session's screen | ❌ capture-pane per session | ✅ grep-panes (16~32ms for 1000) |
Line discipline for key input (Enter, C-c signals, line editing, echo, C-d) | ✅ PTY | ✅ emulated by the engine (same keys checked against tmux). EOF from C-d closes the input |
| Wait until text appears on screen or output stops | ❌ repeatedly check with capture-pane | ✅ wait-pane (the server checks only when output arrives; detection 2ms) |
| Embed as a library | ❌ | ✅ C ABI, Node module, Rust crate |
| Move running sessions to another process | ❌ | ✅ pull-sessions, push-sessions |
| Keep sessions across server restarts and upgrades | ❌ | ✅ restart-server |
| Platforms | most Unix systems | macOS only (kqueue, DYLD shim) |