Accessibility at Chirp
Chirp's web client has a skip link, labeled landmarks, a channel drawer that closes on Escape, polite live announcements for typing, and reduced-motion rules for its Instruments animations, and its tests run axe-core on three surfaces. An axe-core run over every captured view found violations the first time, mostly color contrast; we fixed them in the web client, and the latest run reports none on the desktop views and one on a phone-width view, which we list below instead of hiding it. We do not claim a WCAG level.

What Chirp supports today
Each line says what the product does, how we know, and where to look. “Not yet tested” means exactly that: we have not checked, and we do not claim it.
Partly supported
Keyboard operation
The web client has a skip link to the main content, and on small screens the channel rail is a drawer that closes on Escape. A keyboard-only walkthrough of every flow has not been recorded, and keyboard use of Instruments is a written contract that has not been tested.
Evidence
- frontend/src/App.tsx in the Chirp repo: the Skip to main content link and the main landmark
- frontend/src/components/Sidebar.tsx and frontend/src/__tests__/mobile-nav.test.tsx: the drawer closes on Escape, and does not react to Escape when it is already closed
- docs/instruments.md states keyboard, dynamic type, and 44-point targets as an acceptance contract for Instruments; it is not a test result
Partly supported
Screen reader landmarks and labels
The client has a labeled Channels region, accessible names on unread badges, polite live announcements for typing, and alert roles on errors, and two axe tests pass on three surfaces. The wider axe run over every captured view reports no violations, and nothing has been tested with a screen reader.
Evidence
- frontend/src/__tests__/a11y.test.tsx runs vitest-axe in jsdom on the zero-workspace screen, and on the workspace switcher menu with the create-workspace dialog open; both expect no violations
- frontend/src/components/TypingIndicator.tsx sets aria-live polite, and frontend/src/components/ThreadPane.tsx and Attachments.tsx use role alert for errors
- frontend/src/__tests__/sidebar.test.tsx: a channel with unread mentions gets a distinct accessible label
- The harness axe-core 4.11.4 run (screenshots/output/chirp/a11y.json) reports no violations in the 32 view runs and 26 incomplete checks that need a manual look; the known gaps explain
Partly supported
Contrast in light and dark
Chirp's own axe run reports no color-contrast violation in any of its 32 desktop view runs. It first found 59 elements in all 32 runs; brand-accent text, text on an accent fill, amber text, and the sidebar status prompt were raised to at least 4.5 to 1 in both themes. axe left 26 checks undecided, so contrast is not fully verified, and one element pair on the phone-width Tasks page in light mode still fails.
Evidence
- screenshots/output/chirp/a11y.json: axe-core 4.11.4 at 1920 by 1200, 16 views in light and dark; no violations in the 32 runs, and 26 incomplete checks
- frontend/src/global.css sets --brand-accent separately for light and dark
Partly supported
Reduced motion
A prefers-reduced-motion rule stops the pulse on a running Instrument and the row transitions on the Instruments board. Other motion in the client is not covered by a rule or a test.
Evidence
- frontend/src/global.css: the prefers-reduced-motion rule for the Instrument node animation and the Instrument row transition
- No test exercises reduced motion.
Not yet tested
Text resize and zoom
Resizing text to 200 percent has not been tested.
Partly supported
Mobile and touch
Nine views fit a 375 by 667 phone screen with no sideways scrolling in both themes, and the channel rail becomes a drawer. The same run found one color-contrast violation, on the Tasks page in light mode, and tap-target size was not measured. A scrollable block that was not keyboard-focusable was fixed.
Evidence
- screenshots/output/chirp/mobile.json: 9 views in light and dark at 375 by 667, 18 runs, no horizontal overflow in any; one color-contrast violation (2 elements, Tasks, light)
- frontend/src/__tests__/mobile-nav.test.tsx: the drawer never exceeds the viewport width and is neutralized at the md breakpoint and up
No WCAG conformance level is claimed for Chirp. Its repository states a WCAG 2.1 AA target, which is a goal and not a test result. No one has audited it against WCAG or tested it with a screen reader, and an automated axe-core run cannot find every problem; it also left 26 checks undecided for a person to review.
What does not work yet
- axe-core 4.11.4 on all 16 captured views in light and dark (32 runs at 1920 by 1200) reports no violations, with 26 incomplete checks that axe could not decide and nobody has reviewed. The first run found 59 contrast elements in all 32 runs plus three landmark rules, a missing page heading, and a non-focusable scrollable block, and a later run found heading-order on the four Instrument views; all were fixed in Chirp's web client the same day, with regression tests.
- At 375 by 667 (9 views, 18 runs) there is no horizontal overflow, but axe flags color-contrast (serious) on 2 elements in 1 run, the Tasks page in light mode. It is open. scrollable-region-focusable and page-has-heading-one, which the first run found, were fixed.
- Chirp has not been tested with a screen reader. Its VoiceOver, dynamic type, and 44-point target goals for Instruments are a written contract, not test results.
- The jsdom axe tests cover only three surfaces, and they cannot evaluate color. Reduced motion covers only the Instruments animations, and 200 percent text resize is untested.
How this site is built and checked
This site targets WCAG 2.2 level AA. That is a target we build and test toward, not a certification, and no one has audited it for conformance.
Structure
A skip link, labeled landmarks (header, navigation, main, footer), one h1 per page, and headings that do not skip levels.
Keyboard and focus
Links and buttons are native elements, so they work from the keyboard. Focus is drawn as a visible ring, and the menu closes with Escape.
Contrast
Text meets 4.5 to 1 in both the light and dark themes, checked against the stylesheet by the test suite.
Motion
Transitions and animation switch off when your system asks for reduced motion.
Small screens and zoom
Layouts hold at 375 pixels wide with no sideways scrolling, text resizes with the browser, and touch targets are at least 44 pixels.
Automated scan
Every page is scanned with axe-core at 375 and 1440 pixels in light and dark, and the checks fail on any serious or critical violation. Automated tools find only part of the problems, so this is a floor, not proof.
Images
Every product screenshot has a text description and comes in a light and a dark version that follows your theme.
Your theme choice
The theme follows your system setting until you pick one with the button in the header.
Tell us what is in your way
If something here or in Chirp does not work for you, write to Renkara Media Group. Say what you were doing, what you used, and what happened, and a person will answer.
Statement last reviewed 10/29/2026.