{"id":48120855,"url":"https://github.com/midasdf/zplit","last_synced_at":"2026-04-04T16:19:26.713Z","repository":{"id":344971529,"uuid":"1183877589","full_name":"midasdf/zplit","owner":"midasdf","description":"A \u003c100KB terminal multiplexer in Zig. Zero dependencies. Light enough to run where others won't.","archived":false,"fork":false,"pushed_at":"2026-03-29T15:29:40.000Z","size":17821,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-29T18:07:54.442Z","etag":null,"topics":["terminal-multiplexer","tui","zellij-alternative","zig"],"latest_commit_sha":null,"homepage":null,"language":"Zig","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/midasdf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":null,"dco":null,"cla":null}},"created_at":"2026-03-17T03:09:34.000Z","updated_at":"2026-03-29T15:29:43.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/midasdf/zplit","commit_stats":null,"previous_names":["midasdf/zlice"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/midasdf/zplit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/midasdf%2Fzplit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/midasdf%2Fzplit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/midasdf%2Fzplit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/midasdf%2Fzplit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/midasdf","download_url":"https://codeload.github.com/midasdf/zplit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/midasdf%2Fzplit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31405700,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T10:20:44.708Z","status":"ssl_error","status_checked_at":"2026-04-04T10:20:06.846Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["terminal-multiplexer","tui","zellij-alternative","zig"],"created_at":"2026-04-04T16:19:26.271Z","updated_at":"2026-04-04T16:19:26.706Z","avatar_url":"https://github.com/midasdf.png","language":"Zig","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zplit\n\n**A terminal multiplexer under 100KB.**\n\nWritten in Zig. Zero dependencies. Statically linked. Light enough to run where others won't.\n\n![zplit screenshot](docs/screenshot.png)\n\n## Why\n\nMeasured on Raspberry Pi Zero 2W (aarch64, Arch Linux ARM), March 2026:\n\n| | zplit | tmux 3.6a | zellij 0.43.1 |\n|---|---|---|---|\n| Binary | **91 KB** | 1.3 MB | 44 MB |\n| Language | Zig | C | Rust + WASM |\n| Runtime deps | **0** | libevent, ncurses, etc. | curl, glibc, zlib, etc. |\n| Text reflow | Yes | No | Yes |\n| CJK width | Yes | Yes | Yes |\n\n\u003e zplit binary = static aarch64 `ReleaseSmall` (92,848 bytes). tmux/zellij = installed size from `pacman -Si`/`pacman -Qi` on aarch64.\n\n## Features\n\n- **Pane splitting** — horizontal, vertical, resize, focus navigation\n- **Tabs** — create, close, switch\n- **Session persistence** — detach/attach, layout saved on detach/quit\n- **Zellij-style modes** — NORMAL, PANE, TAB, SCROLL, SESSION, LOCKED\n- **Text reflow** — content reflows when terminal width changes\n- **Scrollback** — preserved on screen clear, scroll mode to browse history\n- **CJK support** — fullwidth characters, Japanese input (fcitx5)\n- **Terminal emulation** — SGR colors (256 + RGB), alternate screen, DA1/DSR\n- **Alternate screen** — vim, htop, etc. restore correctly on exit\n- **Single binary** — client/server in one executable, zero runtime dependencies\n\n## Install\n\n### Build from source\n\n```bash\n# Requires Zig 0.15+\ngit clone https://github.com/midasdf/zplit.git\ncd zplit\nzig build -Doptimize=ReleaseSmall\n# Binary at zig-out/bin/zplit (\u003c100KB)\n```\n\n### Cross-compile for ARM\n\n```bash\nzig build -Doptimize=ReleaseSmall -Dtarget=aarch64-linux-gnu\n# Static binary, runs on any aarch64 Linux\n```\n\n## Usage\n\n```bash\nzplit                    # Start new session\nzplit attach \u003cname\u003e      # Attach to existing session\nzplit list               # List sessions\n```\n\n### Keybindings\n\nAll modes return to NORMAL with `Esc` or `Enter`.\n\n| Key | Mode | Action |\n|-----|------|--------|\n| `Ctrl+p` | → PANE | Pane operations |\n| `Ctrl+t` | → TAB | Tab operations |\n| `Ctrl+s` | → SCROLL | Browse scrollback |\n| `Ctrl+o` | → SESSION | Detach/quit |\n| `Ctrl+g` | → LOCKED | Pass all keys to PTY |\n\n**PANE mode:**\n`h/j/k/l` focus | `H/J/K/L` resize | `n` split-h | `v` split-v | `x` close\n\n**TAB mode:**\n`h/l` switch | `n` new | `x` close\n\n**SCROLL mode:**\n`j/k` line | `u/d` half-page | `PageUp/PageDown`\n\n**SESSION mode:**\n`d` detach | `q` quit\n\n## Configuration\n\n`~/.config/zplit/config.toml`\n\n```toml\n[general]\ndefault_shell = \"/bin/fish\"\nscrollback_lines = 1000\nmax_panes = 8\n\n[appearance]\nstatus_bar = true\npane_border_style = \"single\"\n\n[keybinds]\npane_mode = \"ctrl+p\"\ntab_mode = \"ctrl+t\"\nscroll_mode = \"ctrl+s\"\n```\n\n## Architecture\n\nSingle binary acts as both client and server, connected via Unix domain socket.\n\n| Client (thin relay) | | Server (owns everything) |\n|---|---|---|\n| Terminal raw mode | Unix | PTY management |\n| Input parser (CSI) | domain | VT parser (custom) |\n| Mode state machine | socket | Grid + reflow engine |\n| | | Screen compositor |\n| | | Tab / Pane tree |\n\n17 source files, ~7400 lines of Zig. No external dependencies.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmidasdf%2Fzplit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmidasdf%2Fzplit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmidasdf%2Fzplit/lists"}