l0ng-ai 60b4ebacfd spike(scm): prove the graph's one-canvas rendering plan (G7·0)
A hard-coded three-lane figure, no data layer attached, standing in for the
history section. It exists to answer the four questions the whole rendering
plan rests on before any of it is built on top, because a "no" to any of them
invalidates the rest.

Verified against an isolated dev instance (own config dir and daemon),
screenshots read back:

1. One `canvas` absolutely positioned over the rows, inside the section's own
   `overflow_y_scroll`, paints where it should — lines and nodes land on their
   rows and stay on them after scrolling. A canvas per row was never on the
   table: every `Paths` batch costs a full-drawable render pass.
2. `window.content_mask().bounds` gives usable culling bounds. With 33 rows and
   a 195px viewport it reported `705..900` and the paint loop covered rows
   0..10 — 24 quads instead of ~70. Scrolling moved that to rows 16..26 while
   the mask stayed put, which is exactly right: the mask is the viewport, the
   canvas bounds are what moves.
3. Clicks reach the row `div` through the canvas. A click landed inside the
   lane gutter, on top of a painted line, and selected the row underneath.
   `Canvas::id` returns `None` and it implements no interactivity, so it never
   registers a hitbox — being above in z only decides paint order. That is what
   buys the rows gpui's native hover, click and scroll-into-view for free.
4. The height divider, which is `right_panel_resize` rotated onto the other
   axis, tracks the cursor 1:1 and clamps where it is told to.

Everything is drawn with `paint_quad`: straight segments as thin rects, nodes
as rounded quads for the SDF's analytic anti-aliasing, and cross-lane turns as
right-angle elbows. The elbows read cleanly at a 12px lane pitch — tig,
lazygit and `git log --graph` all draw them square — so curves stay behind a
switch rather than in the first version. Lane centres are snapped to device
pixels before the quad is built, not after, or a column of lines changes width
as it scrolls.

The next commit replaces the fake rows with `CommitPage` and keeps this shape.
2026-08-09 10:08:57 +08:00

tty7

tty7

A terminal workbench: persistent sessions, remote work, agents.

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


CI Version License Discord

English · 简体中文

Why

  • Performance — ~2× the throughput of Alacritty, Ghostty, or Kitty (benchmarks)
  • Persistent sessions — quit or reboot; your shells and supported agent sessions keep running, no tmux
  • Editor-grade input — suggestions, completion, highlighting, history search
  • Remote development — files, repos, panes, and git data stay on the remote machine
  • Native SSH — profiles, SFTP, port forwarding, and jump hosts
  • Agent-aware — Claude Code, Codex & co.: status, notifications, git context
  • CLI + Skills — agents create panes, run commands, and inspect output

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 libraries bundled

What's inside

Editor-grade 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 · nine themes · IME
Agent-aware per-pane detection (~18 CLIs): status dot · notifications · branch + diff · resume after reboot · tray icon when input is needed
Remote workspaces remote files, repos, changes, diffs, worktrees, tabs, and panes · reconnect from any client and continue where you left off
CLI + Skills bundled tty7 CLI · agent skill · pane/workspace control · real PTY commands · output, process, port, and agent status
SSH native russh stack: profiles with keychain secrets · SFTP panel · port forwarding · jump hosts · one-time, unprivileged tty7-server install

Terminal and keybinding reference: docs/features.md. The agent-facing CLI interface is documented in skills/tty7/SKILL.md.

Install the skill with:

npx skills add l0ng-ai/tty7

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 I/O — 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 server 11 MB.

Methodology and one-command reproduction: scripts/bench/.


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%