A terminal multiplexer written in Rust, inspired by tmux.
Loom aims to be a faithful Rust reimplementation of tmux's architecture and feature set, built from the ground up with safety, clarity, and modern tooling in mind. It is not a drop-in replacement — it is a module-level rewrite that preserves tmux's proven design while leveraging Rust's type system and ecosystem.
Status: Phases 1–6 complete, Phase 7 (interactive I/O loop + golden test framework) in progress. Not yet usable as a terminal multiplexer — see ROADMAP.md.
loom-core— Grid, Screen, Colour, Style, UTF-8, Options, Session/Window/Pane, Layout (25 tests)loom-ipc— serde message types, framed peer protocol, mio event loop (9 tests)loom-tty— Terminfo loading, termios raw mode, output buffer, SGR/colour commands (3 tests)loom-input— VT100/xterm escape sequence parser, CSI/ESC dispatch, SGR, cursor movement (5 tests)loom-server— Unix socket creation, accept, client dispatch, session/window lifecycle, identify phase, PTY spawn, layout split/resize, window redraw, golden file tests (7 tests)loom-commands— Command trait + registry, nom parser, 21 commands, command queue, format expansion (#{}), config parser, command/format integration tests (22 tests)loom— Binary entry point: start server, connect, send identify + commands, attach mode (end-to-end)
- Session, window, and pane management
- Flexible pane layouts (horizontal/vertical splits, grids, custom)
- VT100/xterm escape sequence emulation
- Full 256-color and true colour (24-bit RGB) support
- UTF-8 and wide character (CJK, emoji) support
- Mouse support (select, resize, scroll)
- Copy mode with vi/emacs keybindings
- Customizable status line with
#{}format strings - Key binding tables with multiple prefix modes
- Configurable via
~/.loom.conf(tmux-compatible syntax) - Control mode (
-CC) for IDE integration - Sixel image support
- Popups, menus, and interactive prompts
loom/ # Binary entry point ✅
├── loom-core/ # Core types: Grid, Screen, Colour, Style, Options ✅
├── loom-ipc/ # Client-server IPC protocol + event loop ✅
├── loom-tty/ # TTY I/O, terminfo, termios, output commands ✅
├── loom-input/ # VT100/xterm escape sequence parser ✅
├── loom-server/ # Server main loop, session/window/pane lifecycle ✅
├── loom-commands/ # Command definitions, config parser, format exp ✅
The runtime is a single-threaded event loop (via mio) with a client-server process model:
loom(client) connects to a backgroundloom(server) over a Unix domain socket- The server manages sessions, windows, panes, and terminal emulation
- The client handles TTY I/O and forwards input to the server
cargo build --releaseRequires Rust 1.70+ and a Unix-like operating system (Linux, macOS, BSD).
| Area | tmux | Loom |
|---|---|---|
| Language | C (~97k LOC) | Rust |
| Event loop | libevent | mio |
| IPC | imsg (OpenBSD) | serde + bincode |
| Config parser | yacc | nom |
| Terminfo | libtermcap/ncurses | terminfo crate |
| Memory safety | Manual | Compiler-enforced |
The goal is functional parity, not API compatibility. Loom's config syntax will be similar but not identical to tmux's.
- tmux — the original
- zellij — a Rust terminal multiplexer with a different architecture
- tmux-rs — Rust bindings to tmux's control mode
MIT