# TUIOS vs Others

URL: https://tuios.gaurav.zip/docs/comparison

> How TUIOS compares with tmux, zellij, herdr, GNU screen and the splits in WezTerm, kitty and Ghostty, and when to pick one of them instead.

TUIOS is a terminal multiplexer that works like a window manager. Shells run in windows that float or tile. A daemon keeps them running when you detach. TUIOS also tracks the coding agents running in its panes. It runs inside any terminal, over SSH, or in a browser.

TUIOS is not a terminal emulator: it does not draw fonts or open GUI windows. It is also young. The first commit is from September 2025, and the last tagged release is v0.7.0 (March 2026). This page describes the main branch.

> **How this page was checked**
>
> Each fact about another tool comes from that project's own docs, changelog, manual or source, as of September 2026. The [Sources](https://tuios.gaurav.zip/docs/comparison#sources) list links them. The versions checked are tmux 3.7c (3.8 is in release candidate), zellij 0.45.1, herdr 0.9.1, GNU screen 5.0.2, WezTerm 20240203, kitty 0.49.0 and Ghostty 1.3.1. The TUIOS facts are checked against the TUIOS source and a current build. There are no speed numbers here, because no side-by-side benchmark has been run.

## At a glance

This table covers the tools that run inside a terminal. Terminals with their own splits, such as WezTerm, kitty and Ghostty, are a different kind of tool and have [their own section](https://tuios.gaurav.zip/docs/comparison#terminals-with-built-in-splits).

|                     | TUIOS                                                                     | tmux                                                      | zellij                                                      | herdr                                                                                  | GNU screen                                     |
| ------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------- | ---------------------------------------------- |
| Language, licence   | Go, MIT                                                                   | C, ISC                                                    | Rust, MIT                                                   | Rust, Apache 2.0                                                                       | C, GPL 3                                       |
| Binary, macOS arm64 | 23 MB, plus `tuios-web`                                                   | 1 MB, with shared libraries                               | 41 MB                                                       | 22 MB                                                                                  | Not measured                                   |
| Layout              | Floating windows, or tiled: BSP, master-stack, scrolling columns          | Tiled panes with preset layouts. Floating panes since 3.7 | Tiled, floating and stacked panes                           | Tiled splits, with zoom                                                                | Split regions                                  |
| Grouping            | 9 workspaces per session                                                  | Windows in a session                                      | Tabs in a session                                           | Workspaces, then tabs                                                                  | Windows in a session                           |
| Mouse               | Always on. Drag, resize, focus                                            | Off by default in 3.7, on in 3.8                          | On by default                                               | On by default. Click, drag, menus                                                      | Focus a region (`mousetrack`)                  |
| Detach and reattach | Yes, a daemon                                                             | Yes, a server                                             | Yes, a server                                               | Yes, a server                                                                          | Yes                                            |
| After a restart     | Layout and working directories                                            | Nothing built in. The tmux-resurrect plugin               | Layout and commands. Optional scrollback                    | Layout, working directories and supported agent conversations. Optional screen history | Nothing                                        |
| Several clients     | Yes, all can type. Sized to the smallest client                           | Yes. Read-only clients and per-user access                | Yes. A cursor per user, read-only attach                    | Yes. Each client can view its own tab                                                  | Yes. Per-user access lists, read-only possible |
| Remote machines     | Built-in SSH server. Sessions and panes on other hosts in your own client | ssh in and attach                                         | ssh in, or attach to a zellij web server over HTTPS         | ssh in, `--remote`, or several saved machines in one window                            | ssh in. Also serial and telnet windows         |
| Browser client      | `tuios-web`, a separate binary. No login, read-only flag                  | None                                                      | Built in. Login tokens, read-only tokens                    | None                                                                                   | None                                           |
| Scripting           | CLI verbs, JSON protocol, blocking waits, event stream, tapes, hooks      | tmux commands, control mode, hooks, formats               | `zellij action`, `subscribe`, JSON pane lists, plugin pipes | CLI and JSON socket API, output and agent waits, event subscriptions                   | `screen -X` and `-Q`                           |
| Coding agents       | States, alerts, waits, messages between agents, worktrees, fan-out        | None                                                      | None                                                        | States, alerts, prompt and wait, worktrees, conversation restore                       | None                                           |
| Images              | Kitty graphics and sixel, passed through. Experimental                    | Sixel when built with it. Others by passthrough           | Sixel and Kitty graphics                                    | Kitty graphics                                                                         | None                                           |
| Config              | TOML, live `set-config`, settings page                                    | `tmux.conf`, written as tmux commands                     | KDL                                                         | TOML                                                                                   | `.screenrc`                                    |
| Extending           | Hooks, dock components, control protocol. No plugins                      | No plugin system. TPM, a third-party manager              | WebAssembly plugins                                         | Plugins: any executable with a manifest                                                | None                                           |
| Platforms           | Linux, macOS, Windows, FreeBSD, OpenBSD                                   | Linux, macOS, the BSDs, Solaris                           | Linux, macOS, Windows                                       | Linux, macOS, Windows                                                                  | Unix-like systems                              |

Binary sizes are for macOS on Apple silicon: tmux 3.7c from Homebrew, the zellij 0.45.1 and herdr 0.9.1 release binaries, and TUIOS built from main with `-ldflags "-s -w"`.

## tmux

tmux is the default choice, and for good reason. It is packaged almost everywhere and is often already installed. The binary is about 1 MB. Its control mode (`tmux -C`) lets terminals such as iTerm2 show tmux windows as native tabs and windows.

**Where tmux is stronger**

- It runs on servers you do not control, with nothing to install.
- Read-only clients (`attach -r`) and per-user access (`server-access`) are built in. TUIOS has neither in its terminal client.
- It is mature and widely documented, with a large body of shared configs and scripts.
- 3.8 is moving fast: floating panes that move and resize with commands, modal panes, JSON layout strings, and `wait-for -E` to wait on hook events.

**Where TUIOS is stronger**

- Floating windows are the core model, not an add-on. In 3.7 tmux floating panes move and resize only with the mouse. TUIOS also has three tiling modes and zoom.
- Layout and working directories come back after a reboot with no plugin.
- Programs get a JSON protocol with `list-verbs` for discovery, blocking `wait-for` on output, exit, idle or agent state, and an event stream.
- Agent state, alerts and messages between agents. tmux has nothing for agents.
- A browser client and a built-in SSH server.

**Pick tmux** if you work on many machines you do not own, need read-only sharing, or use a terminal built around control mode.

## zellij

zellij is the modern, friendly multiplexer. It shows the available keys on screen, extends through WebAssembly plugins, and ships a web client.

**Where zellij is stronger**

- It teaches itself: the status bar shows the keys for the current mode.
- Plugins are WebAssembly. Rust is the officially supported language, and community projects cover others.
- The web client (`zellij web`) has login tokens, read-only tokens, and requires HTTPS on any address other than `127.0.0.1`. `tuios-web` has no login and needs an authenticating proxy in front.
- Resurrection brings back the commands in each pane, behind a "Press ENTER to run" prompt, and can save the viewport and scrollback. TUIOS brings back a fresh shell with no screen contents.
- Read-only attach and a separate cursor per user.
- It supports sixel, and Kitty graphics as of 0.45. TUIOS passes images through, and its support is experimental.

**Where TUIOS is stronger**

- Overlapping, draggable windows and three tiling modes. zellij floating panes sit above a tiled layout.
- Agent tracking, and waits on agent state.
- Blocking waits from the CLI on a pattern in the output, on idle and on exit. zellij can block until a pane's command exits, and `zellij subscribe` streams a pane's output for a script to watch.
- Sessions on other machines in your own client, without a web server.

**Pick zellij** if you want discoverable keys, plugins, or browser access with its own login.

## herdr

herdr is the closest tool to TUIOS. It is a multiplexer built for coding agents, released in March 2026. It is more widely used, with about 40k [GitHub stars](https://github.com/herdrdev/herdr) against 3.7k for TUIOS, and it releases more often: 0.9.0 and 0.9.1 both shipped in September 2026. Several of the agent screen rules in TUIOS are adapted from herdr's manifests, which are Apache 2.0.

**Where herdr is stronger**

- After a server restart it can resume supported agents' conversations, and can replay recent screen history if you turn that on. TUIOS restores the layout and a fresh shell.
- Several agents, such as Pi, OpenCode and Kimi, report their state through lifecycle hooks or plugins. New agents are added often: 0.9.1 added Letta Code and 0.9.0 added Muse.
- Plugins: a directory with a `herdr-plugin.toml` manifest and commands in any language, plus a marketplace.
- One window holds local work and several saved SSH machines, with one combined agent list.
- Each attached client can look at a different tab at its own size. TUIOS draws a session at the size of the smallest client.
- `herdr update --handoff` can update the server while panes keep running. This is experimental.

**Where TUIOS is stronger**

- Floating windows, and BSP, master-stack and scrolling-column layouts. herdr has splits and zoom.
- A browser client and a built-in SSH server. herdr uses an SSH client on phones instead.
- Tape scripts to drive the UI, and tape recording.
- Sixel images as well as Kitty graphics.
- Mailboxes and questions between agents, and a stash for files agents share.

**Pick herdr** if agents are most of what you run, splits are enough, and you want conversations to survive restarts.

### tmux-based agent managers

Tools such as [claude-squad](https://github.com/smtg-ai/claude-squad) (1.0.20) are not multiplexers. claude-squad runs each agent in its own tmux session and git worktree, and gives you a list of tasks to review, check out and push. It needs tmux and `gh`. Pick it if you want a task list over tmux. Pick TUIOS or herdr if you want to see the agents' panes side by side.

## GNU screen

screen is the oldest of these, and is still maintained. 5.0 added truecolor and rewrote authentication, and 5.0.2 shipped in July 2026.

**Where screen is stronger**

- It is on many old systems where nothing else is.
- A window can open a serial line (`screen /dev/ttyUSB0 115200`) or a telnet connection directly.
- Multiuser mode has per-user access lists, including read-only access.

**Where TUIOS is stronger**: almost everything else on this page. screen splits into regions, but has no floating windows, no restore after a restart, no JSON interface and no image support.

**Pick screen** for serial consoles and old machines.

## Terminals with built-in splits

WezTerm, kitty and Ghostty are terminal emulators. They draw their own windows, and their splits and tabs are part of that window. TUIOS, tmux, zellij and herdr run inside a terminal instead, so they work over SSH and in any terminal. You can use both: TUIOS inside kitty, WezTerm or Ghostty gets Kitty graphics from the host.

|                 | WezTerm                                                 | kitty                                                         | Ghostty                 |
| --------------- | ------------------------------------------------------- | ------------------------------------------------------------- | ----------------------- |
| Version checked | 20240203 (latest stable, nightly builds since)          | 0.49.0                                                        | 1.3.1                   |
| Language        | Rust                                                    | C, Python and Go                                              | Zig                     |
| Splits          | Panes, tabs, windows, workspaces                        | Layouts: splits, tall, fat, grid, stack, horizontal, vertical | Native tabs and splits  |
| Detach          | Yes, through a mux server                               | No                                                            | No                      |
| Remote          | SSH and TLS domains to a WezTerm mux on the remote host | `kitten ssh`. No remote persistence                           | No                      |
| Scripting       | `wezterm cli`, Lua events                               | `kitten @` remote control, JSON protocol                      | AppleScript, macOS only |
| Images          | iTerm2, Kitty graphics, sixel                           | Kitty graphics (kitty created it)                             | Kitty graphics          |
| Config          | Lua                                                     | `kitty.conf`                                                  | Plain text config file  |
| Platforms       | Linux, macOS, Windows, FreeBSD, NetBSD                  | Linux, macOS, BSDs                                            | Linux, macOS            |

### WezTerm

WezTerm is the one terminal here that is also a real multiplexer. A unix domain runs a mux server that keeps panes alive after the GUI closes. An SSH or TLS domain connects to a WezTerm mux running on another machine, and draws its panes as native tabs. `wezterm cli` splits panes, sends text, reads pane text and lists panes as JSON. The config is a Lua program.

- **Stronger than TUIOS**: native GUI rendering, fonts and ligatures, and remote panes with native scrollback and mouse.
- **TUIOS is stronger**: it runs in any terminal and over plain SSH, has floating windows and agent tracking, and needs nothing but `tuios` on the remote side. WezTerm needs a matching WezTerm on the remote host. The last stable WezTerm release is from February 2024.
- **Pick WezTerm** if you want one program for terminal and multiplexer and you control both ends.

### kitty

kitty tiles its own windows in seven layouts and has a remote control protocol (`kitten @`) that can open windows, send text and read their contents. Session files set up tabs, windows and layouts, and since 0.43 kitty can save the current layout as a session file. kitty's FAQ says the one thing it lacks from tmux is remote persistence: close kitty and its shells end.

- **Stronger than TUIOS**: GPU rendering, native windows, and it created the Kitty graphics and keyboard protocols that other terminals now use.
- **TUIOS is stronger**: detach and reattach, sessions that survive closing the terminal, remote hosts, floating windows and agent tracking.
- **Pick kitty** if you work on one machine and do not need sessions to outlive the terminal.

### Ghostty

Ghostty has native tabs and splits, and on macOS an AppleScript dictionary for windows, tabs and input. It has no detach and no multiplexer of its own. Pick it as a fast native terminal, and run TUIOS or tmux inside it when you need sessions that persist.

## Coming from tmux

TUIOS uses the same leader key as tmux, and several prefix keys match:

| Action               | tmux      | TUIOS     |
| -------------------- | --------- | --------- |
| New window           | Ctrl+B c  | Ctrl+B c  |
| Detach               | Ctrl+B d  | Ctrl+B d  |
| Copy mode            | Ctrl+B \[ | Ctrl+B \[ |
| Zoom                 | Ctrl+B z  | Ctrl+B z  |
| Split left and right | Ctrl+B %  | Ctrl+B \| |
| Split top and bottom | Ctrl+B "  | Ctrl+B -  |

Many CLI verbs share tmux's names too: `new-window`, `split-window`, `send-keys`, `capture-pane`, `list-windows`, `kill-session`.

The difference to learn is the two modes. Keys typed in window management mode move windows. Keys typed in terminal mode go to the shell. i enters terminal mode and Alt+Esc leaves it. The prefix key works in both. [Keybindings](https://tuios.gaurav.zip/docs/keybindings) lists everything, and every key can be rebound.

## Sources

**tmux**

- [tmux 3.7c release](https://github.com/tmux/tmux/releases/tag/3.7c) and [3.8-rc](https://github.com/tmux/tmux/releases/tag/3.8-rc)
- [CHANGES](https://github.com/tmux/tmux/blob/master/CHANGES): floating panes in 3.7 and 3.8, mouse on by default in 3.8, `wait-for -E`, sixel fixes
- [Manual page source](https://github.com/tmux/tmux/blob/master/tmux.1): `attach -r`, `server-access`, `mouse`, `allow-passthrough`, control mode
- [README](https://github.com/tmux/tmux/blob/master/README): supported platforms
- [configure.ac](https://github.com/tmux/tmux/blob/master/configure.ac): sixel is off unless built with `--enable-sixel`
- [tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect) and [TPM](https://github.com/tmux-plugins/tpm), both third party
- [iTerm2 tmux integration](https://iterm2.com/documentation-tmux-integration.html): tmux windows as native tabs and windows

**zellij**

- [CHANGELOG](https://github.com/zellij-org/zellij/blob/main/CHANGELOG.md): web client (0.43.0), native Windows, read-only attach, `subscribe` and `list-panes` (0.44.0), Kitty graphics (0.45.0)
- [Session resurrection](https://zellij.dev/documentation/session-resurrection.html)
- [Web client](https://zellij.dev/documentation/web-client.html)
- [CLI actions](https://zellij.dev/documentation/cli-actions.html)
- [Plugins](https://zellij.dev/documentation/plugins.html)
- [0.45.1 release](https://github.com/zellij-org/zellij/releases/tag/v0.45.1)

**herdr**

- [Concepts](https://herdr.dev/docs/concepts/): workspaces, tabs, panes, mouse, clients
- [Session state and restore](https://herdr.dev/docs/session-state/): restart, screen history, agent restore, live handoff
- [Supported agents](https://herdr.dev/docs/agents/) and [agent automation](https://herdr.dev/docs/agent-automation/)
- [Plugins](https://herdr.dev/docs/plugins/), [configuration](https://herdr.dev/docs/configuration/) (TOML, Kitty graphics), [connecting machines](https://herdr.dev/docs/connecting-machines/), [install](https://herdr.dev/docs/install/)
- [CHANGELOG](https://github.com/herdrdev/herdr/blob/master/CHANGELOG.md) and [0.9.1 release](https://github.com/herdrdev/herdr/releases/tag/v0.9.1)
- [claude-squad](https://github.com/smtg-ai/claude-squad)

**GNU screen**

- [Manual](https://www.gnu.org/software/screen/manual/screen.html): `-X`, `-Q`, `split`, `mousetrack`, `aclchg`, serial and telnet windows
- [Release tarballs](https://ftp.gnu.org/gnu/screen/): 5.0.2, July 2026
- [5.0.0 announcement](https://lists.gnu.org/archive/html/info-gnu/2024-08/msg00004.html)

**Terminals**

- WezTerm: [multiplexing](https://wezterm.org/multiplexing.html), [features](https://wezterm.org/features.html), [CLI](https://wezterm.org/cli/cli/index.html), [releases](https://github.com/wezterm/wezterm/releases)
- kitty: [layouts](https://sw.kovidgoyal.net/kitty/layouts/), [remote control](https://sw.kovidgoyal.net/kitty/remote-control/), [sessions](https://sw.kovidgoyal.net/kitty/sessions/), [FAQ](https://sw.kovidgoyal.net/kitty/faq/), [changelog](https://sw.kovidgoyal.net/kitty/changelog/)
- Ghostty: [features](https://ghostty.org/docs/features), [1.3.1 release notes](https://ghostty.org/docs/install/release-notes/1-3-1)

## Related

*[An interactive figure goes here. Open the page to use it.](https://tuios.gaurav.zip/docs/comparison)*
