[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-77927":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},77927,"rmux","Helvesec\u002Frmux","Helvesec","Universal Rust multiplexer with a typed SDK — drive any CLI or TUI app from code. Native on Linux, macOS, and Windows.","https:\u002F\u002Frmux.io",null,"Rust",1702,81,11,3,0,9,174,1332,72,18.74,"Apache License 2.0",false,"main",true,[27,28,29,30],"agent","ai","multiplexer","rust","2026-06-12 02:03:45","\u003Cdiv align=\"center\">\n\n\u003Ca href=\"https:\u002F\u002Frmux.io\">\n  \u003Cpicture>\n    \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Frmux.io\u002Frmux-header-dark.svg\">\n    \u003Cimg src=\"https:\u002F\u002Frmux.io\u002Frmux-header.svg\" alt=\"RMUX\" width=\"500\">\n  \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n\n**Universal Rust multiplexer for the agentic era: detachable, scriptable, and inspectable, with a tmux-compatible CLI, daemon-backed SDK, and native [Ratatui](https:\u002F\u002Fratatui.rs) integration.**\n\nEnglish · [Français](README.fr.md) · [简体中文](README.zh-CN.md) · [日本語](README.ja.md)\n\n[![License: MIT OR Apache-2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT%20OR%20Apache--2.0-blue.svg)](LICENSE-MIT)\n[![Release validation](https:\u002F\u002Fgithub.com\u002FHelvesec\u002Frmux\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002FHelvesec\u002Frmux\u002Factions\u002Fworkflows\u002Fci.yml)\n[![rmux 0.2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Frmux-0.2.0-informational.svg)](#install)\n[![Platform: Linux | macOS | Windows](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Linux%20%7C%20macOS%20%7C%20Windows-lightgrey.svg)](#platform-support)\n[![Unsafe policy](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Funsafe-restricted-success.svg)](#verification)\n\n\u003Cbr \u002F>\n\u003Ca href=\"https:\u002F\u002Frmux.io\">\n  \u003Cimg src=\"https:\u002F\u002Frmux.io\u002Frmux-terminal-demo.gif\" width=\"500\" alt=\"RMUX terminal session demo\" \u002F>\n\u003C\u002Fa>\n\n\u003C\u002Fdiv>\n\n> [!IMPORTANT]\n> 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](https:\u002F\u002Fgithub.com\u002Fhelvesec\u002Frmux\u002Fissues) if you hit one.\n\n## Why RMUX\n\nRMUX 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.\n\nSo 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.\n\nRMUX 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.\n\n## Demos\n\nShort, real examples of what RMUX can be used for.\n\n\u003Ctable>\n  \u003Ctr>\n    \u003Ctd align=\"center\" width=\"20%\">\u003Ca href=\"https:\u002F\u002Frmux.io\u002F#demo-orchestration\">\u003Cimg src=\"https:\u002F\u002Frmux.io\u002Fdemos\u002Fdemo-orchestration.png\" width=\"150\" alt=\"Multi Agents Orchestration demo preview\">\u003C\u002Fa>\u003Cbr>\u003Csub>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FHelvesec\u002Frmux-demos\u002Ftree\u002Fmain\u002Fdemo-orchestration\">\u003Cstrong>Multi Agents Orchestration\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fsub>\u003Cbr>\u003Csub>≃ 514 lines\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"20%\">\u003Ca href=\"https:\u002F\u002Frmux.io\u002F#demo-broadcast\">\u003Cimg src=\"https:\u002F\u002Frmux.io\u002Fdemos\u002Fdemo-broadcast.png\" width=\"150\" alt=\"Agent Broadcast Arena demo preview\">\u003C\u002Fa>\u003Cbr>\u003Csub>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FHelvesec\u002Frmux-demos\u002Ftree\u002Fmain\u002Fbroadcast-demo\">\u003Cstrong>Agent Broadcast Arena\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fsub>\u003Cbr>\u003Csub>≃ 2,171 lines\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"20%\">\u003Ca href=\"https:\u002F\u002Frmux.io\u002F#demo-zellij\">\u003Cimg src=\"https:\u002F\u002Frmux.io\u002Fdemos\u002Fdemo-zellij.png\" width=\"150\" alt=\"Mini-Zellij demo preview\">\u003C\u002Fa>\u003Cbr>\u003Csub>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FHelvesec\u002Frmux-demos\u002Ftree\u002Fmain\u002Fmini-zellij\">\u003Cstrong>Mini-Zellij\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fsub>\u003Cbr>\u003Csub>≃ 944 lines\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"20%\">\u003Ca href=\"https:\u002F\u002Frmux.io\u002F#demo-mirroring\">\u003Cimg src=\"https:\u002F\u002Frmux.io\u002Fdemos\u002Fdemo-mirroring.png\" width=\"150\" alt=\"Terminal browser mirroring demo preview\">\u003C\u002Fa>\u003Cbr>\u003Csub>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FHelvesec\u002Frmux-demos\u002Ftree\u002Fmain\u002Fweb-claude-demo\">\u003Cstrong>Terminal &lt;&gt; Browser Mirroring\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fsub>\u003Cbr>\u003Csub>≃ 649 lines\u003C\u002Fsub>\u003C\u002Ftd>\n    \u003Ctd align=\"center\" width=\"20%\">\u003Ca href=\"https:\u002F\u002Frmux.io\u002F#demo-playwright\">\u003Cimg src=\"https:\u002F\u002Frmux.io\u002Fdemos\u002Fdemo-playwright.png\" width=\"150\" alt=\"Playwright Testing demo preview\">\u003C\u002Fa>\u003Cbr>\u003Csub>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FHelvesec\u002Frmux-demos\u002Ftree\u002Fmain\u002Fterminal-playwright-demo\">\u003Cstrong>Playwright Testing\u003C\u002Fstrong>\u003C\u002Fa>\u003C\u002Fsub>\u003Cbr>\u003Csub>≃ 1,495 lines\u003C\u002Fsub>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftable>\n\n## Install\n\nPrebuilt binary for macOS and Linux:\n\n```sh\ncurl -fsSL https:\u002F\u002Frmux.io\u002Finstall.sh | sh\n```\n\nPrebuilt binary for Windows PowerShell:\n\n```powershell\nirm https:\u002F\u002Frmux.io\u002Finstall.ps1 | iex\n```\n\nDirect downloads and SHA256 checksums are available from the [v0.2.0 GitHub Release](https:\u002F\u002Fgithub.com\u002Fhelvesec\u002Frmux\u002Freleases\u002Ftag\u002Fv0.2.0).\n\nFrom crates.io with Cargo:\n\n```sh\ncargo install rmux --locked\n```\n\nFrom a local checkout:\n\n```sh\ncargo install --path . --locked\n```\n\nFor Rust applications:\n\n```sh\ncargo add rmux-sdk\ncargo add ratatui-rmux\n```\n\n## Documentation\n\nThe full RMUX documentation is available at [rmux.io\u002Fdocs](https:\u002F\u002Frmux.io\u002Fdocs\u002F).\n\nIt includes [installation guides](https:\u002F\u002Frmux.io\u002Fdocs\u002Fget-started\u002F), [CLI references](https:\u002F\u002Frmux.io\u002Fdocs\u002Fcli\u002F), [SDK examples](https:\u002F\u002Frmux.io\u002Fdocs\u002Fexamples\u002F), [terminal automation examples](https:\u002F\u002Frmux.io\u002Fdocs\u002Fexamples\u002F#\u002Fterminal-playwright), and [API documentation](https:\u002F\u002Frmux.io\u002Fdocs\u002Fapi\u002F).\n\n## CLI Quickstart\n\n```sh\nrmux new-session -d -s work\nrmux split-window -h -t work\nrmux send-keys -t work 'echo \"hello from rmux\"' Enter\nrmux attach-session -t work\n```\n\nUse command help locally:\n\n```sh\nrmux list-commands\nrmux new-session --help\nrmux split-window --help\n```\n\n## SDK Quickstart\n\n```toml\n[dependencies]\nrmux-sdk = \"0.2\"\ntokio = { version = \"1\", features = [\"rt-multi-thread\", \"macros\"] }\n```\n\n```rust\nuse std::time::Duration;\n\nuse rmux_sdk::{\n    EnsureSession, EnsureSessionPolicy, Rmux, SessionName, TerminalSizeSpec,\n};\n\n#[tokio::main]\nasync fn main() -> rmux_sdk::Result\u003C()> {\n    let rmux = Rmux::builder()\n        .default_timeout(Duration::from_secs(5))\n        .connect_or_start()\n        .await?;\n\n    let session_name = SessionName::new(\"work\").expect(\"valid session name\");\n    let session = rmux\n        .ensure_session(\n            EnsureSession::named(session_name)\n                .policy(EnsureSessionPolicy::CreateOrReuse)\n                .detached(true)\n                .size(TerminalSizeSpec::new(120, 32)),\n        )\n        .await?;\n\n    let pane = session.pane(0, 0);\n    pane.send_text(\"printf 'ready\\\\n' && sleep 1\\n\").await?;\n\n    pane.wait_for_text(\"ready\").await?;\n    let snapshot = pane.snapshot().await?;\n    println!(\"{}x{}\", snapshot.cols, snapshot.rows);\n\n    Ok(())\n}\n```\n\n## Ratatui Widget\n\n```rust\nuse ratatui::{buffer::Buffer, layout::Rect, widgets::Widget};\nuse ratatui_rmux::{PaneState, PaneWidget};\nuse rmux_sdk::PaneSnapshot;\n\nfn render(snapshot: PaneSnapshot, area: Rect, buffer: &mut Buffer) {\n    let state = PaneState::from_snapshot(snapshot);\n    PaneWidget::new(&state).render(area, buffer);\n}\n```\n\n## Architecture\n\n\u003Cdiv align=\"center\">\n\n\u003Cpicture>\n  \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Frmux.io\u002Frmux-architecture-dark.png\">\n  \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Frmux.io\u002Frmux-architecture-light.png\">\n  \u003Cimg src=\"https:\u002F\u002Frmux.io\u002Frmux-architecture-dark.png\" alt=\"RMUX runtime architecture\" width=\"800\">\n\u003C\u002Fpicture>\n\n\u003C\u002Fdiv>\n\nThree 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.\n\n## Workspace\n\n| Crate | Role | Publication |\n| :--- | :--- | :--- |\n| `rmux-types` | Shared platform-neutral value types | public |\n| `rmux-proto` | Detached IPC DTOs, framing, wire-safe errors | public |\n| `rmux-os` | Small OS boundary helpers | public |\n| `rmux-ipc` | Local IPC endpoints and transports | public |\n| `rmux-sdk` | Daemon-backed Rust SDK | public |\n| `ratatui-rmux` | Ratatui integration widget | public |\n| `rmux-pty` | PTY allocation, resize, child process control | support crate |\n| `rmux-core` | Sessions, panes, layouts, formats, hooks, buffers | support crate |\n| `rmux-server` | Tokio daemon and request dispatch | support crate |\n| `rmux-client` | Local IPC client and attach plumbing | support crate |\n| `rmux` | CLI and hidden daemon entrypoint | public binary |\n| `rmux-render-core` | Shared snapshot rendering core | workspace-internal |\n\n## Platform Support\n\n| Platform | PTY backend | IPC backend | Default endpoint |\n| :--- | :--- | :--- | :--- |\n| Linux | Unix PTY | Unix socket | `\u002Ftmp\u002Frmux-{uid}\u002Fdefault` |\n| macOS | Unix PTY | Unix socket | `\u002Ftmp\u002Frmux-{uid}\u002Fdefault` |\n| Windows | ConPTY | Named pipe | per-user named pipe |\n\n## Configuration\n\nOn Linux and macOS, RMUX reads `.rmux.conf` from the standard system and user locations:\n\n1. `\u002Fetc\u002Frmux.conf`\n2. `~\u002F.rmux.conf`\n3. `$XDG_CONFIG_HOME\u002Frmux\u002Frmux.conf`\n4. `~\u002F.config\u002Frmux\u002Frmux.conf`\n\nOn Windows, RMUX reads `.rmux.conf` as well, from the following locations:\n\n1. `%XDG_CONFIG_HOME%\\rmux\\rmux.conf`\n2. `%USERPROFILE%\\.rmux.conf`\n3. `%APPDATA%\\rmux\\rmux.conf`\n4. `%RMUX_CONFIG_FILE%`\n\n## Verification\n\nThe workspace is designed to be checked from source with locked dependencies:\n\n```sh\ncargo fmt --all -- --check\ncargo clippy --workspace --all-targets --locked -- -D warnings\ncargo test --workspace --locked --no-fail-fast\n```\n\nAdditional local checks:\n\n```sh\nscripts\u002Fcfg-check.sh\nscripts\u002Funsafe-check.sh\nscripts\u002Fno-network-in-runtime.sh\nscripts\u002Fcheck-platform-neutrality.sh\nscripts\u002Fratatui-rmux-budget.sh\nscripts\u002Fverify-package.sh\n```\n\nRelease artifact checks are driven by:\n\n```sh\nscripts\u002Frelease-local.sh\nscripts\u002Fpackage-unix.sh\n```\n\n`#![forbid(unsafe_code)]` is used in the upper-level crates. OS and terminal boundary code is isolated in the lower-level runtime crates.\n\n## License\n\nRMUX is dual-licensed under either:\n\n- [MIT License](LICENSE-MIT)\n- [Apache License 2.0](LICENSE-APACHE)\n\nat your option.\n","RMUX 是一个通用的 Rust 多路复用器，它提供了一个类型化的 SDK，能够从代码驱动任何 CLI 或 TUI 应用。其核心功能包括与 tmux 兼容的命令行界面、后台守护进程支持的 SDK 以及与 Ratatui 的原生集成，这使得 RMUX 在 Linux、macOS 和 Windows 上都能实现高效运行。通过 RMUX，用户可以执行可分离的任务、重新连接会话、检查状态，并通过编程方式控制终端应用，非常适合需要长期运行代理程序（如通过 SSH 运行）而不丢失终端访问权限的场景，同时也适用于无头 CLI 工作流和日常的多终端管理工作。",2,"2026-06-11 03:56:14","CREATED_QUERY"]