Universal Rust multiplexer for the agentic era: detachable, scriptable, and inspectable, with a tmux-compatible CLI, daemon-backed SDK, and native Ratatui integration.
[!IMPORTANT] Released on 16 May 2026. All 90 tmux-compatible commands are implemented, but bugs are expected — this is a fresh public preview. Please file issues if you hit one.
What RMUX Provides
- A tmux-style CLI for sessions, windows, panes, buffers, hooks, formats, copy mode, control mode, and common terminal workflows.
- A Rust SDK for creating sessions, splitting panes, sending typed input, reading snapshots, subscribing to pane output, waiting for text or bytes, and shutting down cleanly.
- A ratatui widget that renders pane snapshots into a
ratatui::buffer::Bufferwithout requiring async work in the draw path. - Native local runtime support: Unix PTYs and Unix sockets on Linux/macOS; ConPTY and named pipes on Windows — no WSL required.
- A small published crate set with internal implementation crates kept out of the public package surface.
Install
From crates.io:
From a local checkout:
For Rust applications:
CLI Quickstart
Use command help locally:
SDK Quickstart
[]
= "0.1"
= { = "1", = ["rt-multi-thread", "macros"] }
use Duration;
use ;
async
Ratatui Widget
use ;
use ;
use PaneSnapshot;
Architecture
Three public surfaces — a rmux CLI, a rmux-sdk Rust crate, and a ratatui-rmux widget — share a single local protocol to talk to the daemon. Anything one surface can do, the others can do too.
Workspace
| Crate | Role | Publication |
|---|---|---|
rmux-types |
Shared platform-neutral value types | public |
rmux-proto |
Detached IPC DTOs, framing, wire-safe errors | public |
rmux-os |
Small OS boundary helpers | public |
rmux-ipc |
Local IPC endpoints and transports | public |
rmux-sdk |
Daemon-backed Rust SDK | public |
ratatui-rmux |
Ratatui integration widget | public |
rmux-pty |
PTY allocation, resize, child process control | support crate |
rmux-core |
Sessions, panes, layouts, formats, hooks, buffers | support crate |
rmux-server |
Tokio daemon and request dispatch | support crate |
rmux-client |
Local IPC client and attach plumbing | support crate |
rmux |
CLI and hidden daemon entrypoint | public binary |
rmux-render-core |
Shared snapshot rendering core | workspace-internal |
Platform Support
| Platform | PTY backend | IPC backend | Default endpoint |
|---|---|---|---|
| Linux | Unix PTY | Unix socket | /tmp/rmux-{uid}/default |
| macOS | Unix PTY | Unix socket | /tmp/rmux-{uid}/default |
| Windows | ConPTY | Named pipe | per-user named pipe |
Configuration
On Linux and macOS, RMUX reads .rmux.conf from the standard system and user locations:
/etc/rmux.conf~/.rmux.conf$XDG_CONFIG_HOME/rmux/rmux.conf~/.config/rmux/rmux.conf
On Windows, RMUX reads .rmux.conf as well, from the following locations:
%XDG_CONFIG_HOME%\rmux\rmux.conf%USERPROFILE%\.rmux.conf%APPDATA%\rmux\rmux.conf%RMUX_CONFIG_FILE%
Verification
The workspace is designed to be checked from source with locked dependencies:
Additional local checks:
Release artifact checks are driven by:
#![forbid(unsafe_code)] is used in the upper-level crates. OS and terminal boundary code is isolated in the lower-level runtime crates.
License
RMUX is dual-licensed under either:
at your option.