{"id":48330914,"url":"https://github.com/nicholasglazer/teru","last_synced_at":"2026-04-19T08:01:45.314Z","repository":{"id":348194486,"uuid":"1196835096","full_name":"nicholasglazer/teru","owner":"nicholasglazer","description":"AI-first terminal emulator, multiplexer, and tiling manager. Written in Zig.","archived":false,"fork":false,"pushed_at":"2026-04-17T07:07:58.000Z","size":2872,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-17T09:14:28.504Z","etag":null,"topics":["ai","claude-code","mcp","multiplexer","terminal","terminal-emulator","tiling-window-manager","tmux-alternative","zig"],"latest_commit_sha":null,"homepage":"https://teru.sh","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/nicholasglazer.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":"nicholasglazer"}},"created_at":"2026-03-31T04:53:41.000Z","updated_at":"2026-04-17T07:08:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nicholasglazer/teru","commit_stats":null,"previous_names":["nicholasglazer/teru"],"tags_count":34,"template":false,"template_full_name":null,"purl":"pkg:github/nicholasglazer/teru","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasglazer%2Fteru","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasglazer%2Fteru/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasglazer%2Fteru/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasglazer%2Fteru/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nicholasglazer","download_url":"https://codeload.github.com/nicholasglazer/teru/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicholasglazer%2Fteru/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31999173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T20:23:30.271Z","status":"online","status_checked_at":"2026-04-19T02:00:07.110Z","response_time":55,"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":["ai","claude-code","mcp","multiplexer","terminal","terminal-emulator","tiling-window-manager","tmux-alternative","zig"],"created_at":"2026-04-05T01:03:08.572Z","updated_at":"2026-04-19T08:01:44.852Z","avatar_url":"https://github.com/nicholasglazer.png","language":"Zig","funding_links":["https://github.com/sponsors/nicholasglazer"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# teru\n\n**A terminal emulator and a Wayland compositor, written in Zig. No GPU, no FreeType, no fontconfig.\nDesigned around an MCP control plane so AI agents and shell scripts can drive both as easily as a user can.**\n\n\u003ca href=\"https://teru.sh\"\u003eteru.sh\u003c/a\u003e\n · \u003ca href=\"#install\"\u003einstall\u003c/a\u003e\n · \u003ca href=\"#quickstart\"\u003equickstart\u003c/a\u003e\n · \u003ca href=\"docs/BENCHMARKS.md\"\u003ebenchmarks\u003c/a\u003e\n · \u003ca href=\"docs/ARCHITECTURE.md\"\u003earchitecture\u003c/a\u003e\n · \u003ca href=\"docs/MCP-API.md\"\u003emcp api\u003c/a\u003e\n\n\u003csub\u003eZig 0.16 · Linux · macOS · Windows · MIT · \u003ca href=\"docs/AI-INTEGRATION.md\"\u003eAI integration\u003c/a\u003e\u003c/sub\u003e\n\n\u003c/div\u003e\n\n---\n\n## What's in the box\n\n| Binary | What it is | Size (ReleaseFast) |\n|---|---|---:|\n| `teru` | Terminal emulator, multiplexer, tiling manager, session daemon | **6.6 MB** |\n| `teruwm` | Wayland compositor (wlroots) built on libteru | **5.6 MB** |\n| `teruwmctl` | Shell CLI + MCP stdio adapter for the compositor | **11.9 MB** |\n\nOne source tree (`src/`), three artifacts. All share the libteru library: VT parser, grid, SIMD software renderer,\nlayout engine, 45-tool MCP control plane.\n\n## Why\n\nMost terminals, multiplexers, and tiling WMs are three programs glued with config files. Every layer\n— tmux for panes, alacritty for pixels, sway for windows — speaks its own API, and none of them\nlet an external process reliably script \"open a new pane running X on workspace 3, focus it, read\nits output\". teru bundles the three concerns into one codebase that exposes every capability over\na JSON-RPC socket, so a Python script or an AI agent can do things you'd otherwise need a\nhuman with a keyboard for.\n\n**Concrete differentiators** (things no other terminal or compositor has):\n\n- **MCP control plane.** 20 tools for the terminal, 36 tools for the compositor. Every feature\n  that has a keybind also has a tool. [docs/MCP-API.md](docs/MCP-API.md).\n- **Push widgets.** External daemons register `{widget:name}` entries in the bar and push updates\n  via MCP — event-driven, no polling. [docs/AI-INTEGRATION.md](docs/AI-INTEGRATION.md#push-widgets).\n- **Hot restart.** `Mod+Ctrl+Shift+R` exec()s a freshly compiled teruwm; PTY fds survive the\n  exec so your shells don't blink. [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md#hot-restart).\n- **CPU-only SIMD renderer.** `@Vector(4, u32)` alpha blending. Works over SSH, in VMs, in\n  containers, on machines with no GPU driver loaded. [docs/BENCHMARKS.md](docs/BENCHMARKS.md).\n- **Process graph.** Every pane, every agent, every child process is a node in a DAG the MCP\n  can query. OSC 9999 lets any process self-declare as an AI agent.\n- **Single statically-linked binary per platform.** No Python, no Node, no Electron.\n\n## Install\n\n```bash\n# Arch Linux (AUR)\nparu -S teru                         # builds teru; teruwm is a separate -git package\n\n# macOS\nbrew install nicholasglazer/teru/teru\n\n# Windows\nscoop bucket add teru https://github.com/nicholasglazer/scoop-teru\nscoop install teru\n\n# From source (any platform)\ngit clone https://github.com/nicholasglazer/teru.git \u0026\u0026 cd teru\nzig build -Doptimize=ReleaseFast                     # → zig-out/bin/teru\nzig build -Doptimize=ReleaseFast -Dcompositor        # → zig-out/bin/teruwm   (Linux only)\n```\n\nDetails for every platform: [docs/INSTALLING.md](docs/INSTALLING.md).\n\n## Quickstart\n\n### Running the terminal\n\n```bash\nteru                                 # windowed, X11/Wayland auto-detected\nteru -n work                         # named persistent session (auto-starts daemon)\nteru --raw                           # over SSH — no windowing, full VT support\nteru -e htop                         # run a specific command instead of the shell\nteru --mcp-server                    # stdio MCP proxy (alias: --mcp-bridge)\n```\n\nKeybinds (Alt is the mod): `Alt+Enter` new pane, `Alt+J/K` focus, `Alt+1..9` workspace,\n`Alt+Space` cycle layout, `Alt+X` close. Full list: [docs/KEYBINDINGS.md](docs/KEYBINDINGS.md).\n\n### Running the compositor\n\n`teruwm` replaces `sway`/`hyprland`/`river`. It's a full Wayland compositor — you launch it from a\nTTY, not from inside another session. It ships `teru` as its native terminal but also runs any\nWayland or XWayland client (Chromium, Emacs, Figma, etc. — all verified).\n\n```bash\n# From a TTY:\nteruwm\n# Inside teruwm, Mod defaults to Super (the Windows/Command key):\n#   Mod+Enter     new terminal pane\n#   Mod+1..9      workspace\n#   Mod+B         toggle top bar\n#   Mod+Shift+B   toggle bottom bar\n#   Mod+Drag      grab a tiled pane with the cursor → it becomes floating\n#   Mod+X         close pane or client window\n#   Mod+Shift+R         reload config\n#   Mod+Ctrl+Shift+R    hot-restart compositor (PTYs survive)\n```\n\nKeybinds: [docs/KEYBINDINGS.md](docs/KEYBINDINGS.md). Config: [docs/CONFIGURATION.md](docs/CONFIGURATION.md).\n\n## Performance\n\nNumbers measured on a Core Ultra 9 185H with ReleaseFast. Full methodology, distribution\n(p50/p95/p99), and peer comparisons in [docs/BENCHMARKS.md](docs/BENCHMARKS.md).\n\n| Metric | Value |\n|---|---:|\n| `teru` binary size | 6.6 MB |\n| `teruwm` binary size | 5.6 MB |\n| `teru --help` startup (p50) | 0.73 ms |\n| VtParser throughput, `dense_cells` | 401 MB/s |\n| Full pipeline (parse + render), `dense_cells` | 391 MB/s |\n\nSingle-number marketing claims are explicitly avoided — see the BENCHMARKS doc for why and\nwhat's not measured.\n\n## Docs\n\nEverything user-facing lives in `docs/`. Concept-by-concept:\n\n- [docs/INSTALLING.md](docs/INSTALLING.md) — platform-specific build + package manager install\n- [docs/KEYBINDINGS.md](docs/KEYBINDINGS.md) — every default keybind for teru and teruwm, prefix/scroll/vi modes, mouse\n- [docs/CONFIGURATION.md](docs/CONFIGURATION.md) — `teru.conf`, `teruwm/config`, bar widgets, thresholds, window rules\n- [docs/AI-INTEGRATION.md](docs/AI-INTEGRATION.md) — MCP protocol, CustomPaneBackend, OSC 9999, push widgets, session templates\n- [docs/MCP-API.md](docs/MCP-API.md) — 43-tool reference: both servers, every tool's schema and example\n- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) — source tree, wlroots integration, scene graph, hot restart\n- [docs/BENCHMARKS.md](docs/BENCHMARKS.md) — methodology, results, planned follow-ups\n\n## Status\n\n| Area | Status |\n|---|---|\n| teru terminal, Linux (X11 + Wayland) | production; 472 inline tests |\n| teru terminal, macOS (AppKit) | feature-complete, needs hardware testing; US ANSI keyboard only |\n| teru terminal, Windows (Win32 + ConPTY) | all subsystems wired; needs hardware testing |\n| teruwm compositor, Linux (wlroots) | usable; XDG + XWayland verified with Chromium / Emacs / Figma |\n| Session persistence (`-n NAME`) | production |\n| MCP (56 tools) | production; E2E suite covers every tool |\n| Hot restart | production; shells survive exec |\n| Push widgets | production |\n| Keypress-to-photon latency numbers | waiting on phototransistor rig — deliberately not published until measured in hardware |\n\n## Contributing\n\n```bash\ngit clone https://github.com/nicholasglazer/teru.git \u0026\u0026 cd teru\nzig build test                        # 472+ inline tests\nzig build -Dcompositor                # compositor build (Linux)\nbash tools/run-bench.sh               # regression benchmarks\n```\n\nOne concern per commit; inline tests for new behavior; keep the benchmark numbers in\n[BENCHMARKS.md](docs/BENCHMARKS.md) current if you change the hot path. Areas where help is most\nuseful: full Unicode (CJK + emoji + font fallback), macOS/Windows hardware testing,\nwp_presentation_time export for compositor frame jitter metrics.\n\n## License\n\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicholasglazer%2Fteru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicholasglazer%2Fteru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicholasglazer%2Fteru/lists"}