l0ng-aiandl0ng-ai cf59fc67fc fix(daemon): reap a live-but-unreachable daemon instead of stranding it (#43)
A replaced daemon used to linger forever: both takeover paths (ensure_running
on a failed connect, restart after the Shutdown wait) would unlink the endpoint
and spawn a fresh daemon without checking whether the old process was still
alive. A daemon that couldn't be stopped — a binary predating ClientMsg::Shutdown,
or a wedged teardown — survived unreachable, still holding every pane's PTY and
children. That is exactly how 14 panes (11 live sessions) got silently stranded
across an app update.

Now the daemon records its pid in <config>/daemon.pid after bind, and both
takeover paths reap the recorded daemon before claiming the endpoint:
SIGTERM first — handled by a new sigwait thread that tears down like Shutdown,
giving every pane's child its SIGHUP grace — then SIGKILL if it won't die.
The pidfile is never trusted blindly: the pid must be alive and its executable
basename must match our own, so a crashed daemon's stale pidfile (pid possibly
recycled) is cleared, not killed. Windows reaps via the existing winproc
helpers, descendants-first, mirroring the pane hangup order.

Fixes #42

Co-authored-by: l0ng-ai <24760907+l0ng-ai@users.noreply.github.com>
2026-07-10 14:36:44 +08:00
2026-07-10 11:48:38 +08:00
2026-07-10 11:48:38 +08:00
2026-07-10 11:48:38 +08:00

tty7

tty7

A GPU-rendered terminal in pure Rust.

GPU rendering on Zed's gpui · VT core from Alacritty


CI Version License Discord

Install · Benchmarks · Shortcuts · Contributing

English · 简体中文


tty7

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 cat completes in 95 ms, versus 179239 ms for Alacritty/Ghostty/Kitty; DOOM-fire renders at 888 fps against their 485617. 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, or npm and every flag and subcommand shows up with its description — 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

Download the build for your platform from Releases:

  • macOStty7-<version>-macos-arm64.dmg (Apple Silicon) or …-x86_64.dmg (Intel); open it and drag tty7.app into Applications.
  • Windows…-windows-x86_64-setup.exe (installer: Start Menu shortcut + uninstall entry), or …-windows-x86_64.zip (portable: unzip and run tty7.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

🤝 Contributing

Bug reports and PRs are welcome. For questions and ideas, join the Discord. Notable changes land in the CHANGELOG.

📝 License

Apache License 2.0 · © 2026 l0ng-ai


tty7 — a GPU-rendered terminal in pure Rust.

S
Description
A terminal workbench in pure Rust: shells, persistent sessions, SSH, coding agents. GPU-rendered on Zed's gpui, VT core from Alacritty.
Readme Apache-2.0
34 MiB
Languages
Rust 99.1%
Shell 0.5%
PowerShell 0.2%
Inno Setup 0.1%