mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-09-22 08:02:24 +00:00
6edfb282008c69c46c2cd35e99f5c48d563ec099
Hovering a pane records the cell under the pointer so ⌘-hover can underline links. Nothing invalidated that cell when the grid shrank under it — a vertical split, un-maximizing a pane, a smaller window — so the remembered row could name a line the grid no longer has. The next modifier press then walked into it: ModifiersChanged → set_link_modifier → every pane in every tab → link_span_at, which indexed the grid with the stale row. Grid's Index<Line> only debug_asserts the bound, so a release build underflows the storage index and panics on the slice check. That panic happens inside gpui's extern "C" input callback, where it cannot unwind — the process aborts, and the OS crash report keeps the abort rather than the panic. Validate the row against the grid before indexing (one choke point, shared by hover and click), and drop the remembered cell on resize. Two more ways the same class of crash reached users: - `new_terminal` unwrapped a failed daemon spawn with `expect`, so a daemon that died took the app down with the next ⌘D/⌘T instead of reporting the failure. It returns a Result now; split, new tab, worktree tab and reopen-closed-tab surface a notification, and session restore drops the leaves it can't rebuild. - A spawn that fails because nothing is listening on the socket now starts a daemon and retries once, the way a disconnect mid-Spawn already did. `connect()` had to stop interpolating the io::Error into a string for that classification to see it. And so the next one is diagnosable at all: a panic hook writes the message, location and backtrace to `crash.log` in the config dir. The GUI has no logger and no stderr when launched from Finder, and the crash report loses the message to the abort. Fixes #201
tty7
A terminal workbench: shells, sessions, SSH, coding agents.
Pure Rust · GPU rendering on Zed's gpui · VT core from Alacritty
English · 简体中文
Why
- Fast — ~2× the throughput of Alacritty, Ghostty, or Kitty (benchmarks)
- Sessions persist — quit or reboot; your shells keep running, no tmux
- Editor-grade input — completion, syntax highlighting, history search built in; zero config for zsh, bash, fish, PowerShell
- Agent-aware — recognizes Claude Code & co. in a pane: status, notifications, session resume
Install
Native builds for each platform on Releases:
| macOS | …-macos-arm64.dmg · …-x86_64.dmg |
drag into Applications |
| Windows | …-setup.exe · portable ….zip |
|
| Linux | …-x86_64.AppImage |
chmod +x and run — x11/wayland libs bundled |
What's inside
| Input | ghost suggestions from history · explained tab completion · syntax highlighting · multi-line editing · click places the caret · ⌃ R fuzzy history |
| Window | tabs & splits · ⌘ P palette · ⌘ F scrollback search · eight themes · IME |
| Coding agents | per-pane agent detection (~17 CLIs): status dot, notifications, branch + diff, resume after reboot, tray icon that signals "needs your input" |
| SSH | native russh stack: profiles with keychain secrets, SFTP panel, port forwarding, jump hosts |
Details for every row: docs/features.md. Keybindings: ⌘ , opens Settings — browse and remap everything, tmux preset included (full list).
Benchmarks
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.
Methodology and one-command reproduction: scripts/bench/.
Built on gpui and alacritty_terminal · Apache-2.0 · Discord · Changelog
Description
A terminal workbench in pure Rust: shells, persistent sessions, SSH, coding agents. GPU-rendered on Zed's gpui, VT core from Alacritty.
ai-agentsalacrittyclaude-codecoding-agentcross-platformdaemondeveloper-toolsgpugpuilinuxmacosptyrustshellsshterminalterminal-emulatorterminal-multiplexertmuxwindows
Readme
Apache-2.0
34 MiB
Languages
Rust
99.1%
Shell
0.5%
PowerShell
0.2%
Inno Setup
0.1%