Skip to content

ABC Tool

  • Home
  • About / Contect
    • PRIVACY POLICY
Helvesec/rmux: Universal Rust multiplexer with a typed SDK — drive any CLI or TUI app from code. Native on Linux, macOS, and Windows. · GitHub

Helvesec/rmux: Universal Rust multiplexer with a typed SDK — drive any CLI or TUI app from code. Native on Linux, macOS, and Windows. · GitHub

Posted on May 21, 2026 By safdargal12 No Comments on Helvesec/rmux: Universal Rust multiplexer with a typed SDK — drive any CLI or TUI app from code. Native on Linux, macOS, and Windows. · GitHub
Blog


Important

Current release: v0.2.0, published on 18 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.

RMUX exists because I believe the tmux use case has only been partially explored. My own starting point was simple: I wanted to run long-lived agents over SSH without losing their terminals, while still being able to inspect, script, and orchestrate everything around them.

So I rebuilt that idea from scratch in Rust: a blazing-fast, tmux-compatible multiplexer with a typed SDK, persistent sessions, structured snapshots, and native local transports on Linux, macOS, and Windows, including Windows Named Pipes. No WSL required.

RMUX is usable by agents, headless CLI workflows, and humans alike: you can give terminal apps detachable execution, reconnect later, inspect their state, drive them from code, or simply use it for normal tmux-style terminal work.

Short, real examples of what RMUX can be used for.

Prebuilt binary for macOS and Linux:

curl -fsSL https://rmux.io/install.sh | sh

Prebuilt binary for Windows PowerShell:

irm https://rmux.io/install.ps1 | iex

Direct downloads and SHA256 checksums are available from the v0.2.0 GitHub Release.

From crates.io with Cargo:

cargo install rmux --locked

From a local checkout:

cargo install --path . --locked

For Rust applications:

cargo add rmux-sdk
cargo add ratatui-rmux

The full RMUX documentation is available at rmux.io/docs.

It includes installation guides, CLI references, SDK examples, terminal automation examples, and API documentation.

rmux new-session -d -s work
rmux split-window -h -t work
rmux send-keys -t work 'echo "hello from rmux"' Enter
rmux attach-session -t work

Use command help locally:

rmux list-commands
rmux new-session --help
rmux split-window --help
[dependencies]
rmux-sdk = "0.2"
tokio = { version = "1", features = ["rt-multi-thread", "macros"] }
use std::time::Duration;

use rmux_sdk::{
    EnsureSession, EnsureSessionPolicy, Rmux, SessionName, TerminalSizeSpec,
};

#[tokio::main]
async fn main() -> rmux_sdk::Result<()> {
    let rmux = Rmux::builder()
        .default_timeout(Duration::from_secs(5))
        .connect_or_start()
        .await?;

    let session_name = SessionName::new("work").expect("valid session name");
    let session = rmux
        .ensure_session(
            EnsureSession::named(session_name)
                .policy(EnsureSessionPolicy::CreateOrReuse)
                .detached(true)
                .size(TerminalSizeSpec::new(120, 32)),
        )
        .await?;

    let pane = session.pane(0, 0);
    pane.send_text("printf 'ready\n' && sleep 1n").await?;

    pane.wait_for_text("ready").await?;
    let snapshot = pane.snapshot().await?;
    println!("{}x{}", snapshot.cols, snapshot.rows);

    Ok(())
}
use ratatui::{buffer::Buffer, layout::Rect, widgets::Widget};
use ratatui_rmux::{PaneState, PaneWidget};
use rmux_sdk::PaneSnapshot;

fn render(snapshot: PaneSnapshot, area: Rect, buffer: &mut Buffer) {
    let state = PaneState::from_snapshot(snapshot);
    PaneWidget::new(&state).render(area, buffer);
}

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.

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

On Linux and macOS, RMUX reads .rmux.conf from the standard system and user locations:

  1. /etc/rmux.conf
  2. ~/.rmux.conf
  3. $XDG_CONFIG_HOME/rmux/rmux.conf
  4. ~/.config/rmux/rmux.conf

On Windows, RMUX reads .rmux.conf as well, from the following locations:

  1. %XDG_CONFIG_HOME%rmuxrmux.conf
  2. %USERPROFILE%.rmux.conf
  3. %APPDATA%rmuxrmux.conf
  4. %RMUX_CONFIG_FILE%

The workspace is designed to be checked from source with locked dependencies:

cargo fmt --all -- --check
cargo clippy --workspace --all-targets --locked -- -D warnings
cargo test --workspace --locked --no-fail-fast

Additional local checks:

scripts/cfg-check.sh
scripts/unsafe-check.sh
scripts/no-network-in-runtime.sh
scripts/check-platform-neutrality.sh
scripts/ratatui-rmux-budget.sh
scripts/verify-package.sh

Release artifact checks are driven by:

scripts/release-local.sh
scripts/package-unix.sh

#![forbid(unsafe_code)] is used in the upper-level crates. OS and terminal boundary code is isolated in the lower-level runtime crates.

RMUX is dual-licensed under either:

at your option.



Source link

Post Views: 3

Post navigation

❮ Previous Post: ANBERNIC’s PS Vita-inspired handheld finally gets Play Store support
Next Post: Save 20% on the Nothing Phone 4a using this special discount code ❯

You may also like

Uber has always wanted to be more than a ride; now it has reason to hurry
Blog
Uber has always wanted to be more than a ride; now it has reason to hurry
May 10, 2026
Supreme Court arguments make it clear that FCC fines are “nonbinding”
Blog
Supreme Court arguments make it clear that FCC fines are “nonbinding”
April 22, 2026
The haves and have nots of the AI gold rush
Blog
The haves and have nots of the AI gold rush
May 16, 2026
Make YouTube Music look good on foldables with this setting
Blog
Make YouTube Music look good on foldables with this setting
May 3, 2026

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Android 17's 'Continue On' feature will let you move tasks between devices
  • Gemini will soon let you edit videos without knowing how
  • This iPhone Feature Will Reprimand You if Your Camera Lens Is Dirty
  • Apple Sports app expands to more than 90 new countries and regions, gets features for FIFA World Cup 2026
  • Leaving the V8 in the past: The all-electric Mercedes-AMG GT 4-Door

Recent Comments

No comments to show.

Archives

  • May 2026
  • April 2026

Categories

  • Blog

Copyright © 2026 ABC Tool.

Theme: Oceanly News by ScriptsTown