Ariakit

Unstyled, accessible React components implementing WAI-ARIA patterns for building custom design systems.

Library
npm
v0.4.39
8,609stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
89/100Excellent
Development Activity100
Maintenance96
Community60
Maturity60
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
94/100Excellent
Architecture92
Code Quality95
Innovation88
Learning Curve100

Ariakit is a toolkit of accessible, unstyled React components built on the WAI-ARIA authoring practices, giving teams composable primitives for dialogs, comboboxes, menus, tabs, forms, and other interactive UI patterns without dictating visual design. Each component ships with sensible default behavior — focus management, keyboard navigation, roving tabindex, and ARIA attribute wiring — that developers can override piece by piece through a low-level hooks API.

Under the hood, Ariakit favors composition over configuration: every component exports a store (from @ariakit/react-store) that holds and updates its state, plus a set of sub-components that consume that store via context, so state can be lifted, shared across components, or driven imperatively when needed. The library is maintained as a multi-framework monorepo — the same core architecture also powers a Solid.js port — and is developed with strict TypeScript, extensive unit and real-browser tests, and a public API stable enough to back production design systems.

What You Get

  • A broad set of accessible component families (Dialog, Combobox, Menu, Tab, Form, Toolbar, Select, Popover, Hovercard, and more) covering the majority of interactive UI patterns.
  • A dedicated state layer (@ariakit/react-store) so component state can be read, shared, or driven imperatively outside of React’s render cycle.
  • Zero built-in styles — full control over markup and CSS while Ariakit handles ARIA roles, keyboard interaction, and focus management.
  • TypeScript-first APIs with per-component prop types and JSDoc, enabling editor-driven discovery of every option.
  • A subpath-exports map so consumers can import a single component’s code without pulling in the rest of the toolkit.
  • A living component gallery and examples site (ariakit.com) documenting each primitive with runnable demos.

Common Use Cases

  • Building an in-house design system that needs accessible primitives without adopting a full UI kit’s visual style.
  • Implementing complex interaction patterns (multi-level menus, comboboxes with async options, nested dialogs) without hand-rolling ARIA and focus-trap logic.
  • Migrating off ad-hoc accessibility patches by replacing custom dropdown/dialog/tab code with tested, spec-compliant components.
  • Powering component libraries that need framework parity across React and Solid from a shared architecture.

Under The Hood

Architecture The library follows a layered, composable-hooks architecture: each interactive pattern implements a store-backed hook composed via a shared createHook/forwardRef utility layer, which itself layers on more primitive hooks (focusable, disclosure-content) from sibling packages, then is re-exported as a plain component from the public package — a thin proxy layer separating the published API surface from the actual implementation. State lives in a dedicated store package built on a framework-agnostic core store, so state can be read or written outside React’s render cycle and shared across nested components; nested-dialog handling (tree walking, outside-interaction marking, focus restoration) is itself split into isolated, composable helper modules rather than embedded in one large component. This layered separation — public API package, implementation package, state package, framework-agnostic utilities — is mirrored again for a parallel Solid.js port, which is strong evidence the abstraction genuinely generalizes across framework boundaries rather than being React-specific.

Tech Stack TypeScript in strict mode across a pnpm workspace monorepo containing many interdependent packages; each package builds independently via a purpose-built script that emits type declarations separately from bundling. The documentation and example site is an Astro-based app with embedded live examples of the library, and a companion Next.js app supports additional tooling. Linting and formatting run through a modern Rust-based toolchain rather than the traditional ESLint/Prettier combo, with git hooks enforcing checks locally; releases are automated through a changeset-based versioning workflow. Peer dependencies span a wide range of React major versions, signaling deliberate, ongoing compatibility work rather than a pin to a single release line.

Code Quality An extensive test suite spans unit tests co-located with source (including dedicated tests for the nested-dialog orchestration logic), a custom testing package built on top of standard React testing utilities, and a separate suite of real-browser tests running across multiple browser engines and mobile platforms — a level of testing rigor uncommon even among accessibility-focused UI libraries. Strict typing is enforced project-wide, and CI runs type-checking, linting, visual-regression, and performance-benchmark jobs on every change. Naming is consistent and descriptive throughout, and responsibilities are kept narrow — the nested-dialog handling alone is broken into many small, single-purpose utility files rather than one large component.

API Design The store-per-component pattern gives consumers an escape hatch to read or set state imperatively without prop-drilling, while the common case — wrapping a disclosure and a dialog — requires almost no boilerplate, a rare balance for a library this granular. Sub-components automatically wire their own ARIA attributes by reading shared context, removing a category of manual ARIA bookkeeping most component libraries leave to consumers. Types are hand-authored per component with full documentation comments, so editor autocomplete surfaces prop documentation inline. What distinguishes it from comparable accessible-component libraries is first-class nested-dialog orchestration — tree walking, marking outside elements inert, and per-dialog focus restoration — built directly into the primitive rather than left for consumers to solve themselves.

Used by 11 apps in this directory

TypeScript
99%
AGPL 3.0

fountain-ink

Blogging

64

A self-hostable, decentralized blogging platform built on Lens Protocol — own your content, audience, and distribution forever.

View details
26
Repo Health
66
Technical
66
Dependency
Built with
TypeScript99%
Updated 7 months ago
TypeScript
71%
Other

highlight.io

Developer Tools · Analytics · Monitoring

9,372

Open-source full-stack monitoring that unifies session replay, error tracking, logging, and distributed tracing so you can stop context-switching between tools.

View details
69
Repo Health
78
Technical
65
Dependency
Built with
TypeScript71%
Go16%
Updated 2 weeks ago
TypeScript
81%
MIT

LibreChat

Developer Tools · AI Assistants

42,871

Unite every major AI model in one self-hosted chat platform with agents, code execution, MCP tools, and enterprise authentication.

View details
93
Repo Health
81
Technical
65
Dependency
Built with
TypeScript81%
JavaScript18%
Updated today
TypeScript
81%
MIT

LibreChat

Developer Tools · AI Assistants

42,871

Unite every major AI model in one self-hosted chat platform with agents, code execution, MCP tools, and enterprise authentication.

View details
93
Repo Health
81
Technical
65
Dependency
Built with
TypeScript81%
JavaScript18%
Updated today
TypeScript
86%
MIT

medusa

Ecommerce

36,163

The most flexible open-source commerce platform — build B2C, B2B, and marketplace applications with modular, composable commerce primitives.

View details
93
Repo Health
87
Technical
63
Dependency
Built with
TypeScript86%
JavaScript14%
Updated 2 days ago
TypeScript
82%
AGPL 3.0

Standard Notes

Note Taking

6,621

End-to-end encrypted notes and files — private by design, built to last, and fully self-hostable.

View details
88
Repo Health
83
Technical
67
Dependency
Built with
TypeScript82%
JavaScript14%
Updated 3 days ago
Python
70%
Apache 2.0

SurfSense

Search · AI Assistants

16,103

The open-source, unlimited NotebookLM alternative with real-time collaboration, a desktop app, and no vendor lock-in.

View details
88
Repo Health
71
Technical
66
Dependency
Built with
Python70%
TypeScript28%
Updated yesterday
TypeScript
99%
Other

Teable

Databases · No Code Platforms

21,759

A no-code PostgreSQL database with spreadsheet UX, real-time collaboration, and native AI agents — built for teams that outgrow Airtable.

View details
79
Repo Health
76
Technical
63
Dependency
Built with
TypeScript99%
Updated today
TypeScript
98%
Apache 2.0

TinaCMS

CMS

13,780

An open-source, Git-backed headless CMS that gives editors a live visual editing UI over Markdown, MDX, JSON, and YAML content while developers keep everything in version control.

View details
92
Repo Health
74
Technical
59
Dependency
Built with
TypeScript98%
Updated today

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search