Skip to content
Tech News
← Back to articles

The text mode lie: why modern TUIs are a nightmare for accessibility

read original get Accessible TUI Keyboard Layout → more articles
Why This Matters

This article highlights the misconception that all terminal-based applications are inherently accessible, revealing that modern TUIs often hinder accessibility for blind users due to their grid-based rendering approach. As TUIs become more prevalent in developer tools, ensuring their compatibility with screen readers is crucial for inclusive technology. Addressing these accessibility issues is vital for creating equitable digital experiences for all users in the tech industry.

Key Takeaways

The mythical, it's text, so it's accessible

There is a persistent misconception among sighted developers: if an application runs in a terminal, it is inherently accessible. The logic assumes that because there are no graphics, no complex DOM, and no WebGL canvases, the content is just raw ASCII text that a screen reader can easily parse.

The reality is different. Most modern Text User Interfaces (TUIs) are often more hostile to accessibility than poorly coded graphical interfaces. The very tools designed to improve the Developer Experience (DX) in the terminal—frameworks like Ink (JS/React), Bubble Tea (Go), or tcell—are actively destroying the experience for blind users.

The Architectural Flaw: Stream vs. Grid

To understand the failure, we must distinguish between two distinct concepts often conflated under “terminal apps”: the CLI (Command Line Interface) and the TUI.

The CLI (The Stream): This operates on a standard input/output model ( stdin / stdout ). You type a command, the system appends the result below, and the cursor moves down. This is linear and chronological. For a screen reader, specifically kernel-level readers like Speakup, this is ideal. The TUI (The Grid): This treats the terminal window not as a stream of text, but as a 2D grid of pixels, where every character cell is a pixel. It abandons the temporal flow for a spatial layout.

Case Study: The gemini-cli Madness

Let's look at a concrete example: gemini-cli , a tool written in Node.js using the Ink framework. On the surface, it looks like a simple chat interface. But underneath, Ink is trying to reconcile a React component tree into a terminal grid.

When you use this tool with Speakup (Linux) or NVDA (Windows), the application doesn't just fail; it actively spams you.

Because the framework treats the screen as a reactive canvas, every update triggers a redraw. When the AI is “thinking,” the tool updates a timer or a spinner. To do this, it moves the hardware cursor to the timer location, writes the new time, and moves it back.

... continue reading