{"id":37231680,"url":"https://github.com/jzombie/term-wm","last_synced_at":"2026-01-15T03:45:23.080Z","repository":{"id":332418018,"uuid":"1129151203","full_name":"jzombie/term-wm","owner":"jzombie","description":"A cross-platform terminal multiplexer, window manager, and Ratatui component library.  Written in Rust.","archived":false,"fork":false,"pushed_at":"2026-01-11T06:39:51.000Z","size":415,"stargazers_count":0,"open_issues_count":9,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-13T20:54:20.014Z","etag":null,"topics":["command-line-utilities","ratatui","terminal-emulator","terminal-multiplexer","terminal-user-interface","terminal-window-manager","tiling-window-manager"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/term-wm","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jzombie.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-06T17:17:26.000Z","updated_at":"2026-01-09T18:34:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jzombie/term-wm","commit_stats":null,"previous_names":["jzombie/term-wm"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jzombie/term-wm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Fterm-wm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Fterm-wm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Fterm-wm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Fterm-wm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jzombie","download_url":"https://codeload.github.com/jzombie/term-wm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jzombie%2Fterm-wm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28442342,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T00:55:22.719Z","status":"online","status_checked_at":"2026-01-15T02:00:08.019Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["command-line-utilities","ratatui","terminal-emulator","terminal-multiplexer","terminal-user-interface","terminal-window-manager","tiling-window-manager"],"created_at":"2026-01-15T03:45:21.816Z","updated_at":"2026-01-15T03:45:23.070Z","avatar_url":"https://github.com/jzombie.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n# term-wm\n\n[![made-with-rust][rust-logo]][rust-src-page] [![crates.io][crates-badge]][crates-page] [![MIT licensed][mit-license-badge]][mit-license-page] [![Apache 2.0 licensed][apache-2.0-license-badge]][apache-2.0-license-page] [![Coverage][coveralls-badge]][coveralls-page]\n\n**WORK IN PROGRESS.**\n\nA cross-platform terminal multiplexer, window manager, and [Ratatui](https://crates.io/crates/ratatui) component library.\n\nIt is controllable via mouse and keyboard and works the same over SSH, Mac, Linux, and Windows.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/jzombie/live-assets/blob/main/term-wm-0.5.0-alpha-mac.gif?raw=true\" alt=\"term-wm 0.5.0-alpha on macOS\" /\u003e\u003cbr /\u003e\n  \u003cem\u003epictured: term-wm 0.5.0-alpha on macOS\u003c/em\u003e\n\u003c/div\u003e\n\n`term-wm` serves two distinct purposes:\n\n- **For Users:** A standalone, keyboard-driven window manager for your terminal shell.\n- **For Developers:** A reusable library of TUI primitives for building window-managed Ratatui applications.\n\n## Design Philosophy: Retro-Modern\n\n`term-wm` is heavily inspired by the utilitarian beauty of **90's Unix user interfaces** (like [CDE](https://en.wikipedia.org/wiki/Common_Desktop_Environmen)) and the cooperative tiling of **Windows 1.0**.\n\nIt bridges the gap between standard terminal multiplexers and full desktop environments by adapting GUI metaphors to the command line.\n\nWorking with the terminal grid, the project aims to provide a rich window management experience despite the architectural constraints of a text-based terminal. Since terminals lack pixel-perfect positioning and rely on a rigid character cell grid, `term-wm` employs creative layout algorithms to make borders, resizing, and overlapping layers feel fluid and natural, even within the strict boundaries of ANSI/VT standards.\n\n## For Users: The Window Manager\n\nAs a standalone application, `term-wm` allows you to manage multiple shell sessions, panes, and floating windows with a philosophy centered on **zero-conflict key bindings** with your running applications.\n\n### The \"No-Conflict\" Philosophy (`Esc`)\n\nUnlike other multiplexers that require complex prefix chords (like `Ctrl+b`), `term-wm` uses `Esc` as a context-aware modifier. This ensures that sub-shells and embedded apps (like `vim`, `tmux`, `screen`, etc.) retain their own keybindings without fighting the window manager.\n\n\u003e _Should_ the `Esc` key need to be sent to a child window, pressing `Esc` twice (double-`Esc`) will route it to the window as a single key press.\n\n| Context     | Action         | Behavior                                                                 |\n|-------------|----------------|--------------------------------------------------------------------------|\n| App Focused | Press Esc      | Enters WM Mode. An overlay appears; keys now control the window manager. |\n| WM Mode     | Press Esc      | Dismisses overlay; focus returns to the app.                             |\n| Any         | Double-tap Esc | Routes a single `Esc` through to the focused child window.               |\n\n\n## For Developers: The Library\n\n`term-wm` exports its core logic as a crate, allowing you to build complex terminal user interface (TUI) applications without reinventing view navigation or layout engines.\n\nIt provides a framework to render Ratatui components in a fashion that automatically handles focus routing and view lifecycle, letting you focus on component creation while term-wm enforces consistent layout.\n\n### Layout Contracts\n\nThe library uses **Layout Contracts** to define how screen real estate is negotiated between your application logic and the term-wm engine:\n\n- **AppManaged:** The application retains full control. You set regions and coordinates directly; the WM steps back.\n- **WindowManaged:** The window manager (WM) takes ownership. It enforces tiling, floating rules, and standard constraints, managing the dimensions of your components automatically.\n\n### Integration\n\nBy using `term-wm` primitives, your application gains:\n\n- Standardized focus cycles.\n- Z-ordering for floating components.\n- A pre-built \"Command Palette\" pattern for global actions.\n\n## Build \u0026 Installation\n\n### Requirements\n\n- If building from source: [Rust toolchain (stable)](https://rust-lang.org/tools/install/)\n- A terminal emulator supporting Raw Mode and standard ANSI escape sequences (most terminal emulators support this including Windows 11 Command Prompt, macOS, and Ubuntu).\n\n### Building from Source\n\n```bash\ngit clone https://github.com/jzombie/term-wm.git\ncd term-wm\ncargo build --release\n```\n\n_There is also a published Rust crate at: https://crates.io/crates/term-wm_\n\n### Running from Source\n\nThe easiest way to run the latest build is via [Cargo](https://rust-lang.org/tools/install/), which handles platform differences automatically:\n\n```bash\ncargo run --release\n```\n\n### Installing from Source\n\nTo install `term-wm` as an executable system command, you can install it directly to your system.\n\n```bash\ncargo install --path .\n```\n\n**To uninstall:**\n\n```bash\ncargo uninstall term-wm\n```\n\n## Performance \u0026 Benchmarking\n\nThe project emphasizes high-throughput rendering. Included in the repository is [term-bench](./crates/term-bench/), a tool designed to stress-test terminal emulators and window managers.\n\n**1. Standalone (Native Terminal Performance)**\n\n```bash\ncargo run -p term-bench --release -- --duration 15 --fps 120\n```\n\n**2. Managed (Inside term-wm)** This launches the window manager and immediately feeds the benchmark into the first pane.\n\n```bash\ncargo run --release -- \"./target/release/term-bench --duration 15 --fps 120\"\n```\n\n_The benchmark reports frame pacing, render times (avg/1% lows), and cell-update throughput._\n\n## License\n\n`term-wm` is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0).\n\nSee [LICENSE-APACHE](./LICENSE-APACHE) and [LICENSE-MIT](./LICENSE-MIT) for details.\n\n[rust-src-page]: https://www.rust-lang.org/\n[rust-logo]: https://img.shields.io/badge/Made%20with-Rust-black?logo=Rust\u0026style=for-the-badge\n\n[crates-page]: https://crates.io/crates/term-wm\n[crates-badge]: https://img.shields.io/crates/v/term-wm.svg?style=for-the-badge\n\n[mit-license-page]: ./LICENSE-MIT\n[mit-license-badge]: https://img.shields.io/badge/license-MIT-blue.svg?style=for-the-badge\n\n[apache-2.0-license-page]: ./LICENSE-APACHE\n[apache-2.0-license-badge]: https://img.shields.io/badge/license-Apache%202.0-blue.svg?style=for-the-badge\n\n[coveralls-page]: https://coveralls.io/github/jzombie/term-wm?branch=main\n[coveralls-badge]: https://img.shields.io/coveralls/github/jzombie/term-wm?style=for-the-badge\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzombie%2Fterm-wm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjzombie%2Fterm-wm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjzombie%2Fterm-wm/lists"}