Ghostty VoiceOver Accessibility Fork

A research fork of Ghostty implementing a screen-reader accessibility layer for the terminal.

Screen recording of the Ghostty VoiceOver accessibility fork running with spoken terminal output.
Status
Research fork
Date
July 2026
What it is
This fork implements a VoiceOver-oriented accessibility layer for Ghostty. The accessibility tree is a projection of the Zig terminal source state, not a second model derived from rendered output.
Architecture
The projection is built on the existing render thread with no new threads. Cell geometry for accessibilityFrame is computed on demand from grid coordinates and kept separate from the audio and reading path.
Flood handling
Flood detection reads PTY output counters including bytes, newlines and scroll-lines rather than render dirty-rows. This avoids false floods from repaints, startup paint and cursor movement.
Notification model
The PTY layer decides whether speech is allowed. The projection diff only supplies payload when authorized, so viewport scrolls do not re-surface old output as new content.
VoiceOver behavior
Passwords are suppressed through screen-derived announcements, not keystroke-derived announcements. Burst output is suppressed during flood and summarized on settle. Alt-screen and full-screen TUIs are review-only.
Verification
Verified with trace logs and CPU benchmarks against the upstream baseline. VoiceOver-off cost is effectively zero, flood-time CPU stays below baseline, and there is no post-flood drain.
Role
Accessibility architecture, implementation, trace validation, performance benchmarking and demo capture.
Reference
GitHub repository

This is not affiliated with the official Ghostty app. It is a research project.

Back to projects

Blinding Pixels · GitHub