Skip to content

Repository files navigation

Loom

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.

Completed

  • 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)

Planned Features

  • 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

Architecture

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 background loom (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

Building

cargo build --release

Requires Rust 1.70+ and a Unix-like operating system (Linux, macOS, BSD).

Comparison with tmux

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.

Related Work

  • tmux — the original
  • zellij — a Rust terminal multiplexer with a different architecture
  • tmux-rs — Rust bindings to tmux's control mode

License

MIT

About

A terminal multiplexer written in Rust, inspired by tmux.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages