A GPU-accelerated terminal multiplexer written in Rust. Column-based layouts and workspaces, a built-in browser client, and remote attach over a binary protocol.
π§ Early and experimental (v0.1). Expect rough edges β not everything is guaranteed to work yet. Primarily developed on Linux and Windows; macOS is untested, treat it as work in progress.
demo.mp4
One 54-second take, no cuts β columns & tiles, lazygit and Claude Code in panes, the overview, then the same session attached from a browser. More at linxy.dev/loomtty.
| Columns & stacked tiles | The same session, from a browser |
|---|---|
- Column + workspace layout β tmux/zellij-style multiplexing, organized in columns.
- GPU rendering β Vulkan / Metal / OpenGL / DirectX 11, with ligatures and inline images (Kitty/Sixel).
- Remote attach β connect to a session on another host over a binary protocol + SSH tunnel.
- Browser client β
loomtty webserves the same session as an installable PWA. - Predictive echo β mosh-style local echo over high-latency links.
- Agent-aware sessions β auto-restores agent panes (Claude Code, Codex, opencode, Droid) on reattach.
- Lua plugins β sandboxed scripting with an event API.
See INSTALL.md for platform builds and shell integration. From source:
cargo build --release
# β target/release/loomtty (client) and target/release/loomtty-server (daemon)loomtty # attach to the last session, or create one
loomtty my-project # attach to / create a named session
loomtty ls # list sessions
loomtty a my-project # attach to an existing session
loomtty kill my-project # kill a sessionRun loomtty init for an interactive config wizard.
Leader: Alt (configurable). loomtty defaults to sticky / zellij-style
input, so you hold Alt and press the key β e.g. Alt n opens a new column.
Set [input] mode = "prefix" for tmux-style tap-leader-then-key.
| Keys | Action |
|---|---|
Alt h j k l |
Focus pane left / down / up / right |
Alt n |
New column |
Alt d |
Split down (new row) |
Alt x |
Close pane |
Alt f |
Full-width column |
Alt r |
Resize mode |
Alt s / Alt m |
Scroll / move mode |
Alt b |
Broadcast input to all panes |
Alt o |
Overview |
Alt p |
Command palette |
Alt q |
Detach |
Alt / |
Keybindings help |
Direct (no leader): Ctrl+Shift+F search Β· Ctrl+Shift+C copy Β·
Ctrl+Shift+V paste (Cmd instead of Ctrl+Shift on macOS).
Config lives at ~/.config/loom/config.toml. A minimal example:
[font]
family = "JetBrains Mono"
size = 12.0
[theme]
preset = "loom_dark" # one_dark, catppuccin_mocha, tokyo_night, dracula, nord, gruvbox_dark, ghostty, β¦
[keys]
leader = "alt"
[input]
mode = "sticky" # "sticky" (zellij-style) or "prefix" (tmux-style)Every option, default, and valid range is documented in
crates/loom-config/src/schema.rs. You can
also edit settings live from the in-app settings panel.
Sourcing the snippet for your shell enables OSC 133 prompt marks β jump-to-prompt
in scroll mode, command status, and exit codes. The scripts live in
crates/loom-server/shell-integration/
(loom.bash, loom.zsh, loom.fish, loom.ps1); see INSTALL.md for setup.
loomtty web turns the multiplexer into a browser terminal: an HTTP SPA plus a
token-authenticated WebSocket gateway, installable as a PWA. The gateway speaks
plain http/ws β put TLS in front (reverse proxy or tunnel) before exposing it
past loopback. See web/README.md.
AGENTS.md is the build / architecture / data-flow guide for contributors and coding agents.
loomtty borrows ideas from work it admires:
- niri β scrollable column layout
- tmux β the detach/attach multiplexer model
- zellij β sticky input modes and a browser client
- Windows Terminal β native Windows + GPU rendering
- Ghostty β GPU-accelerated terminal craft
- mosh β predictive echo over high-latency links
AGPL-3.0-only Β© loomtty contributors.