← Default view

Unofficial accessibility conformance report · Exhibit A

The VPAT nobody wrote

Every kit in this field says it is accessible. Seven vendors, seven claims. Below, each claim is set beside whatever independent party actually checked it. Five of the seven evidence cells are empty — and the empty column is the finding.

Report date
2026-07-14
Prepared for
itenium-ui (Itenium.Forge)
Subjects
7 React UI kits & primitive layers
Method
Desk review — vendor docs, public issue trackers, npm manifests, 3rd-party audits
Standard referenced
WCAG 2.1 / 2.2 AA · WAI-ARIA APG
Evidence base
26 citations · survey depth

No VPAT on file — 0 of 7 No subject in scope publishes a VPAT or Accessibility Conformance Report.

Determination

"shadcn/ui vs Base UI" was never a real choice. Since July 2026, Base UI is the default primitive layer inside shadcn/ui, with Radix retained as a supported -b radix opt-out and every component shipped for both [1]. Accessibility is therefore not a property of the kit you pick. It is a property of the primitive layer underneath it — and of the styling you paste on top.

Ranked on evidence rather than marketing:

React Aria ≫ Base UI ≈ Radix > Mantine > MUI Core
↑ the only published screen-reader matrix · ↑ 88 open a11y issues, no compliance doc since 2019

§1   The load path What actually bears the weight

Three of these are not peers. Two of them are the foundation; one is a pile of code you copy on top of someone else's foundation; two dug no foundation at all and wrote the ARIA themselves.

shadcn/ui ⭐ 119k · styling layer only

inherits every ARIA role, focus trap
and roving tabindex from ↓

Base UI — default since Jul 2026 a11y written by ex-Radix + Floating UI + MUI engineers [2]

alternate footing: Radix via -b radix [1]

MUI Core ⭐ 98.6k · 7.8M weekly

rests on nothing ↓

No primitive layer deps: Popper + transition-group. No Base UI, no Radix. The MUI Core team wrote all of it. [21]
Mantine ⭐ 31.4k · 1.6M weekly

rests on nothing ↓

No primitive layer deps: @floating-ui/react + react-remove-scroll. Focus traps and ARIA wiring are a small team's own work. [22]

The bedrock — who actually writes accessibility behaviour in React

  • React AriaAdobe. ⭐ 15.7k · 7.4M weekly. The benchmark — and the only one that names what it tests on. [10]
  • Base UI 1.0Stable 11 Dec 2025, 35 components, ⭐ 10.3k · 6.2M weekly. Backed by MUI the company. [20]
  • Radix PrimitivesWorkOS. ⭐ 19.1k · 66.8M weekly on react-dialog alone. Maintained, not stalled — but no longer the frontier. [18]
  • Ark UI / Zag.jsChakra team. ⭐ 5.3k · 0.93M weekly. Finite-state machines per component; no independent a11y evidence found. [24]
Figure 1 — Foundation and superstructure. Picking shadcn/ui buys zero first-party accessibility engineering: every accessible behaviour in it was written by the Base UI or Radix team. What shadcn adds is styling — which, per §3, is exactly where its WCAG failures live.

§2   Claim vs. evidence The ledger

Left column: what the vendor asserts, in its own words. Right column: what an independent party verified. Read the right column first.

Table 1 — Vendor assertion set against third-party verification, per subject
Subject What the vendor asserts What an independent party verified
React Aria
★ benchmark
Tested across a named 5-way screen-reader matrix. Warns that "automated accessibility testing tools sometimes catch false positives in React Aria." Claims no WCAG level. [10] ✗ No third-party audit on record. Only an outside opinion: "the most accessibility-rigorous option in this list." [14]
Base UI Adheres to WAI-ARIA APG; manages focus automatically; "tested on a broad spectrum of browsers, devices, platforms, screen readers, and environments" — no matrix named, no WCAG level. [12] ✗ No record. Nobody outside the project has published a check.
Radix "High-quality, accessible design systems." [4] ✓ audited — 35 issues Publicis Sapient's Accessibility Center of Excellence tested VoiceOver/Safari (macOS + iOS), NVDA/Firefox and TalkBack/Chrome. Filed Aug 2023 as issue #2317. Still open. [23]
shadcn/ui "Beautifully-designed, accessible components." Accessibility is inherited, not authored. [5] ⚠ audited — 34/48 pass Jul 2026, VoiceOver/Safari + NVDA/Firefox + axe + Lighthouse + WAVE: 34 pass WCAG 2.2 AA, 9 need minor fixes, 5 "will fail a real procurement audit." Doubles as marketing for the author's paid kit — indicative, not authoritative. [15]
Mantine jest-axe on all interactive components; manual screen-reader testing with VoiceOver only. Volunteers the disclaimer: "there are still things that you need to do." [11] ✗ No record. Honest vendor, zero external corroboration.
MUI Core AA is an aim, not a claim: "Level AA … is what we aim to support" — stated per-component, never library-wide. [25] ✗ No record — and none requested successfully. The ADA/WCAG compliance-documentation issue has sat open since Jan 2019. [13]
Ark UI "Accessible, complex, feature-rich" — every component backed by a Zag.js finite state machine. [24] ✗ No record.

Observation 2.1 — the shape of the ledger

Five of seven evidence cells are empty. Of the two that are filled, both are unflattering: Radix's audit found 35 issues and has been open for three years; shadcn's found five components that will fail procurement. The libraries with the best reputations are simply the ones nobody has audited. Absence of evidence is being read as evidence of absence across this entire market.

§3   Conformance matrix Five criteria, seven subjects

Table 2 — Documentation and evidence criteria. Every cell carries a word, not just a colour.
Subject Named SR test matrix 3rd-party audit WCAG level claimed VPAT / ACR Open a11y issues
React Aria ✓ yes — 5 combos ✗ none ✗ none — "a good resource to reference" ✗ none 33 [7]
Base UI ⚠ vague — "broad spectrum" ✗ none ✗ none — APG adherence only ✗ none 7 [3]
Radix ✗ none ⚠ yes — 35 issues, unresolved ✗ none ✗ none 10 [4]
shadcn/ui ⚠ inherited ⚠ yes — 34/48 pass ✗ none ✗ none 6 [5]
Mantine ⚠ VoiceOver only ✗ none ✗ none — WAI-ARIA "guidelines" ✗ none 0 [6]
MUI Core ✗ none ✗ none ⚠ "aim to support" AA ✗ none — requested Jan 2019, still open 88 [9]
Ark UI ✗ none ✗ none ✗ none ✗ none 12 total [8]

3.1 · The only published test matrix in the field

One library, out of seven, tells you what it was tested against. This table is the entire reason React Aria is the benchmark — not superior code, but inspectable code [10].

Table 3 — React Aria's declared screen-reader coverage. Every other subject: no equivalent table exists.
Screen reader Platform Browsers
VoiceOvermacOSSafari, Chrome
JAWSWindowsFirefox, Chrome
NVDAWindowsFirefox, Chrome
VoiceOveriOSSafari
TalkBackAndroidChrome

Mantine's equivalent is one row of that table — VoiceOver, manually [11]. Base UI's is the phrase "a broad spectrum" [12]. MUI Core, Radix and Ark UI publish nothing at all.

3.2 · Open accessibility-labelled issues

A backlog is ambiguous evidence: 33 open issues on React Spectrum reflect scrutiny, and Mantine's zero reflects a tidy 35-issue tracker rather than a proven-clean library. But 88 is not ambiguous.

MUI Core 88 — largest backlog in the field
React Spectrum 33
Ark UI 12 (all issues)
Radix 10
Base UI 7 (young library)
shadcn/ui 6
Mantine 0 (and no audit either)

§4   Findings register 7 findings · 3 high severity

F-01High

The default shadcn focus ring fails WCAG 1.4.11 — at 2.4:1

The default Button uses focus-visible:ring-ring/50, rendering the focus indicator at 50% opacity. Against a white background the measured contrast is 2.4:1 — below the 3:1 non-text threshold [15].

This is a Tailwind-token defect, not a primitive defect. Switching from Radix to Base UI does not fix it — and because shadcn code lands in your repository, it becomes itenium-ui's WCAG failure the moment the component is copied in.

F-02High

shadcn's Chart component is invisible to screen readers

The Recharts SVG renders as an empty <svg> to assistive technology — a WCAG 1.1.1 failure out of the box, with no accessible alternative shipped [15]. An admin console is chart-heavy by definition. Budget a table fallback for every chart.

F-03High

MUI has had a compliance-documentation request open since January 2019

Issue #14187, Create ADA compliance documentation, was filed on 15 Jan 2019. Seven years later there is no maintainer position and no VPAT [13]. Combined with 88 open a11y issues [9] and a 2026 roadmap that points engineering attention at Base UI instead [16], MUI Core is the weakest accessibility bet of the four candidates.

F-04Medium

Radix's only independent audit is three years old and still open

35 issues, found across VoiceOver/Safari (macOS + iOS), NVDA/Firefox and TalkBack/Chrome by a professional accessibility practice, filed as #2317 in August 2023 and never closed [23]. It is simultaneously the best-documented a11y signal in this entire comparison and the most damning one — because it is the only kit that got looked at properly, and it did not come out clean.

F-05Medium

Mantine's manual testing covers one screen reader of five

VoiceOver only. No NVDA, no JAWS — meaning the entire Windows enterprise-desktop population is untested [11]. Mantine implements every focus trap, roving tabindex and ARIA relationship itself, on top of nothing but Floating UI [22]. A small team's unaudited work with a one-reader test surface.

F-06Medium

Adopting Material UI today buys none of Base UI's accessibility work

Base UI is built by MUI the company, but Material UI v9.2 carries no @base-ui dependency at all [21]. MUI's roadmap says new components are built on Base UI primitives — Material UI is not being rebuilt on top of them [16]. "Base UI is by the MUI team" is true and irrelevant to what you inherit from @mui/material.

F-07Low

"Radix is abandoned" is stale — but the momentum has moved

radix-ui 1.6.2 shipped 6 Jul 2026 with release candidates through 13 Jul [18]; the repo is still "Maintained by @workos" [4] with a named maintainer [17]. But updates have slowed on complex components while Base UI iterates faster [14], and new shadcn projects now pick Base UI over Radix 2:1 [1]. Radix in a 2026 greenfield is a defensible conservative bet, not a forward one.

§5   Remediation What itenium-ui does about it

  1. Stop framing it as shadcn or Base UI

    Default shadcn init is shadcn-on-Base-UI as of July 2026, with a -b radix escape hatch and a component-by-component migration path in the CLI [1]. Base UI docs landed in shadcn in January 2026, with every component rebuilt for both libraries first [26]. One choice, not two.

  2. Fix the focus ring on day one

    Whatever you adopt, the ring-ring/50 token at 2.4:1 is your first bug — and it is a Tailwind 4 token fix that lives in your repository, not upstream [15]. Then sweep the other four flagged components: Combobox, Data Table, Context Menu, Input OTP.

  3. Plan a table fallback for every chart

    Do not ship shadcn's Recharts-backed Chart as the only representation of any dataset [15].

  4. If accessibility is contractual, look past all four candidates

    Under EAA, public-sector or enterprise procurement pressure, React Aria Components is the only library whose testing you can actually inspect [10]. It is not one of the four candidates — it is the honest fifth option, and it sits perfectly well under a Tailwind design layer.

  5. Assume you will write the VPAT yourself

    Nobody in this field publishes one. Adobe publishes ACRs for products, not for the React Aria library [10]. The kit choice does not change whether you audit itenium-ui — it only changes how much remediation precedes the audit.

Closing note on this document

A report about accessibility that is itself inaccessible would be the worst possible finding. This page uses real table semantics with row and column headers, a single unbroken heading order, WCAG AA contrast on every text pair, a visible focus indicator that clears 3:1 (see F-01 for why that number matters), keyboard-reachable scroll regions, and a status vocabulary in which every colour is paired with a glyph and a word — because colour is never the sole carrier of meaning. Check it. That is the point of an audit.

§6   Evidence appendix 26 sources

§7   Related findings Same expedition

This report is one angle of Which React UI component kit should itenium-ui adopt in 2026? The other five:

survey MUI vs shadcn/ui vs Mantine vs Base UI: the 2026 maturity and governance baseline

Four kits turn out not to be one category: libraries, a registry, and primitives.

expedition Styling engine and Tailwind 4 interop: which React component kit survives the cascade

Tailwind 4 layers every utility — any kit shipping unlayered CSS silently outranks it.

survey Admin-console component coverage: what each kit actually ships in 2026

Only Mantine covers a CRUD console in-box; MUI's grid features are paywalled.

survey Theming, tokens and brand reach across the four kits

The token substrate decides the kit: @theme versus a JS theme object.

recon Nx 21 build ergonomics: which UI kit survives a shared itenium-ui library

shadcn's copy-in model works in a shared Nx lib — if you own the plumbing.