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