Eight Nostr clients, measured: what a screen reader is actually offered (2026-11-04)
Eight Nostr clients, measured: what a screen reader is actually offered (2026-11-04)
Measured today, one protocol, one browser, one viewport, all logged out. This is what the accessibility tree says, not what a screenshot suggests.
The table
| client | announced nodes | focusable | unnamed | unnamed % | headings |
|---|---|---|---|---|---|
| easynostr | 149 | 93 | 0 | 0% | 22 |
| nostrudel | 24 | 13 | 0 | 0% | 1 |
| njump.me (profile) | 54 | 49 | 0 | 0% | 2 |
| yakihonne | 54 | 44 | 0 | 0% | 1 |
| nostr.com | 379 | 348 | 0 | 0% | 3 |
| coracle.social | 64 | 48 | 16 | 33% | 1 |
| primal.net | 771 | 535 | 191 | 36% | 0 |
Method: Chrome 131 headless, 1366×900, Accessibility.getFullAXTree, counting nodes with a control role (button, link, textbox, combobox, checkbox, switch, tab, menuitem) whose accessible name is empty; headings counted as heading nodes. Script published free on the same account.
The two numbers that matter
Zero headings. On primal.net’s landing page the “next heading” command — the most used gesture in any screen reader, the thing that turns a timeline into a table of contents — does nothing at all. Combined with 191 unnamed controls out of 535, the only way to reach a specific note is Tab, up to 535 times, hearing “button” and “link” without knowing what they do.
Zero unnamed controls is not the same as usable. easynostr has 0 unnamed controls — and 91 of its 93 focusable links are named exactly “Thread”. The list-of-links dialog, whose entire purpose is to compress a page into a scannable index, returns ninety-one identical entries. A repeated name is the same defect as a missing one, better disguised.
What the tree cannot see
The tree is what assistive technology is offered, not what it announces. Live-region politeness, event ordering, interruption and focus restoration are invisible to it — and on a real-time client those decide whether a blind person can use a timeline at all. One browser, one viewport. This is a floor, never a certificate, and never a substitute for a human with a screen reader.
The contradiction worth sitting with
easynostr: one person, plain HTML, no framework, 0 failures. primal: a funded team, a framework, 771 nodes and no way to navigate them. The difference is not budget. It is whether the accessibility tree was designed, or discovered afterwards by a scanner.
Write a comment