macOS gives the Option key two jobs a terminal can't serve at once: the OS composes a special character (Option+B types ∫), while Meta bindings need an ESC-prefixed chord (Option+B → ESC b, readline's backward-word). A new `macos_option_as_alt` config (Settings → Terminal → Keyboard, off by default) picks which one wins, matching Ghostty's `macos-option-as-alt` and iTerm2's "Option as Meta". The keystroke is reshaped once at the top of `on_key_down` — on: the composed `key_char` is replaced with the base key so the encoder emits `ESC` + the plain character (uppercased under Shift, like xterm's metaSendsEscape); off: the alt bit is dropped so the composed character goes out bare. Every consumer downstream (the ⌘ dispatcher, the prompt editor, the PTY encoder, the Kitty encoder) then sees one consistent story. This also fixes two existing defects, both settings: * The raw path used to emit `ESC ∫` for Option+B — an ESC prefix bolted onto the composed character, wrong under either reading of Option. * The prompt editor swallowed Option+letter chords entirely: no composed character, no motion. Off now inserts the composed character; on maps M-b / M-f / M-d to the readline word motions (which also lights them up on Linux, where Alt is natively Meta but the chords were no-ops). Known limitation: with the setting on and a non-ASCII IME input source active (e.g. Pinyin), gpui routes printable keys — Option chords included — to the IME first, which commits the composed character before the key event reaches the view; Meta chords need an ASCII-capable source (e.g. ABC). No regression: that state behaved identically before. Closes #13
tty7
A fast, GPU-rendered terminal in pure Rust.
GPU rendering on Zed's gpui · VT core from Alacritty
Install · Benchmarks · Shortcuts · Contributing
English · 简体中文
tty7 is a GPU-rendered terminal. An 11 MB cat finishes in 95 ms — about
2× faster than Alacritty, Ghostty, or Kitty on the same hardware — and the
built-in prompt gives you inline completion, syntax highlighting, and per-flag
hints for common commands. Pure Rust, native on macOS, Windows, and Linux, no
configuration needed.
- ⚡ Fast — an 11 MB
catcompletes in 95 ms, versus 179–239 ms for Alacritty/Ghostty/Kitty; DOOM-fire renders at 888 fps against their 485–617. Same machine, same grid; the harness is in the repo (benchmarks). - ⌨️ Prompt with completions — inline completion, syntax highlighting,
history, and in-terminal search. Type
git commit --,kubectl, ornpmand every flag and subcommand shows up with its description — rich signatures for ~100 common commands, generated from Fig's spec corpus. - 🧠 Shell-aware, zero config — new tabs and splits open in the current working directory, and path completion always follows where you are. zsh, bash, fish, and PowerShell are wired up automatically.
- 🔌 Sessions that survive — shells run in a background daemon, so closing a window, quitting the app, or swapping in a new build never takes a shell down. Detach and reattach, no tmux.
Also included: tabs (drag to reorder, inline rename, number keys to switch) and resizable splits, a command palette, click-to-open links, desktop notifications, and focus-follows-mouse. Eight built-in themes from light to dark, with the native window chrome following the one you pick, plus CJK/IME input.
Native builds for macOS, Windows, and Linux — every release ships all three.
📊 Benchmarks
All four terminals measured back-to-back on the same machine, same day, same 155×40 grid — Apple M1 Pro, macOS 26.3.1, five-run averages (2026-07-04):
| tty7 | Alacritty | Ghostty | Kitty | |
|---|---|---|---|---|
Plaintext IO — 11 MB cat (lower = better) |
95 ms | 239 ms | 179 ms | 185 ms |
| DOOM-fire frame rate (higher = better) | 888 fps | 485 fps | 552 fps | 617 fps |
| Cold-launch memory | 116 MB¹ | 105 MB | 128 MB | 130 MB |
¹ GUI 105 MB + the persistent daemon 11 MB.
tty7 reads the PTY at device speed and parses it in large batches off the render
path, and the hot paths are lock-free — so a big cat never waits on drawing.
(That's also what the background daemon buys you: it can run up to 16 MiB ahead
of the window before backpressure applies.)
Methodology (how each terminal is driven, grid fairness, known pitfalls) and
one-command reproduction live in scripts/bench/ —
run it yourself.
🚀 Install
Grab the build for your platform from Releases:
- macOS —
tty7-<version>-macos-arm64.dmg(Apple Silicon) or…-x86_64.dmg(Intel); open it and dragtty7.appinto Applications. - Windows —
…-windows-x86_64-setup.exe(installer: Start Menu shortcut + uninstall entry), or…-windows-x86_64.zip(portable: unzip and runtty7.exe). - Linux —
…-linux-x86_64.tar.gz; extract and run./tty7(needs the usual x11/wayland runtime libraries).
⌨️ Shortcuts
Keys are shown in macOS notation — on Windows and Linux, read ⌘ as Ctrl. Open Settings with ⌘ , to browse or remap them all. The essentials:
| ⌘ T · ⌘ W · ⌘ ⇧ T | new tab · close tab · reopen closed tab |
| ⌘ D · ⌘ ⇧ D | split right · split down |
| ⌘ ] · ⌘ [ | next pane · previous pane |
| ⌘ ⏎ · ⌘ ⇧ ⏎ | toggle fullscreen · maximize / restore the pane |
| ⌘ K | clear the screen and scrollback |
| ⌘ P | command palette |
| ⌘ F | search the scrollback |
| ⌃ R | reverse-search shell history |
| ⌘ + · ⌘ − · ⌘ 0 | font size up · down · reset |
The full list — and any overrides — lives in Settings → Keybindings.
💭 Built with & inspired by
- gpui — Zed's GPU-accelerated UI framework
alacritty_terminal(Zed's fork) — VT emulator, grid, and PTY- gpui-component — UI widgets, via a pinned fork
- tmux — the inspiration for the persistent-daemon design
🤝 Contributing
Bug reports and PRs are welcome. Security issues go through SECURITY.md; notable changes land in the CHANGELOG.
📝 License
Apache License 2.0 · © 2026 l0ng-ai