Open-source project
ariakit/ariakit avatar
ariakit/ariakit

Ariakit: accessible React components you assemble yourself

Toolkit with accessible components, styles, and examples for your next web app

8,623 stars423 forksTypeScriptLicense varies

At a glance

What is it?
Ariakit is a TypeScript toolkit of unstyled, ARIA-compliant React components. It gives you behaviour and accessibility primitives, and leaves the markup and CSS decisions to you.
Who is it for?
Adopt Ariakit if you are building a React interface where you control the markup and CSS and want the ARIA wiring handled for you; the packages directory is MIT licensed, so the core is safe to depend on. Do not adopt it if you expect a finished visual component library, or if you need Solid support today, since @ariakit/solid is marked experimental.
Can I use it commercially?
Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
Is it still maintained?
Yes. The repository received new commits within the last day.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 2, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Ariakit actually gives you, and who it is for

Ariakit is a toolkit of accessible components for web apps. The README describes it as a toolkit with accessible components, styles, and examples, and the repository topics list a11y, accessibility, aria, components, css, react and tailwindcss. That combination tells you the intended audience: React engineers who are comfortable writing their own markup and CSS but do not want to reimplement focus management, keyboard interaction and ARIA attributes for every dialog, menu or combobox. The project is not a design system. There is no opinionated visual language to adopt, and no theme to override. What you get is component behaviour plus the accessibility contract around it, and the styling decisions stay with you. The packages directory holds the core React package, plus an experimental Solid package and an experimental Tailwind package. If your team already has a CSS strategy, whether that is plain CSS, CSS modules or Tailwind utilities, Ariakit does not compete with it.

Composition over configuration: how the components fit together

The repository layout is the clearest statement of the architecture. There is a packages directory holding the published packages, a components directory, an examples directory with one folder per scenario, and a website directory that powers ariakit.com. The examples are named after behaviours rather than after widgets: combobox-filtering, combobox-multiple, dialog-animated, dialog-backdrop-scrollable, dialog-combobox-command-menu, checkbox-as-button, checkbox-group. That naming is a hint about the design. Ariakit components are meant to be composed, so a command menu is a dialog plus a combobox, and a filterable multi-select is a combobox with filtering and multiple selection enabled. The packages are published separately, with @ariakit/react as the main entry point and @ariakit/tailwind and @ariakit/utils as supporting packages, each versioned on its own release cadence. The trade-off is real: you get flexibility and you pay for it in assembly work. A component that ships as one import in a batteries-included library may be three composed Ariakit pieces in your code, and that composition is your responsibility to get right.

Installing @ariakit/react and rendering a first dialog

The README points to ariakit.com for docs, components and examples, and lists @ariakit/react as the primary package. The README does not include an install command or a minimal usage snippet, so the authoritative starting point is the components page on ariakit.com and the matching folder under examples. The repository ships one example directory per scenario: for a dialog, examples/dialog-animated or examples/dialog-backdrop-scrollable, depending on whether you need animation or a scrollable backdrop. Read the example that matches your case rather than guessing at props, because the README does not document the prop surface inline. The same approach applies to the other components: pick the example folder whose name matches your interaction, and treat it as the reference implementation. The root package.json also defines a start script that runs the website package and a dev script that runs the package-json build step alongside the website dev server, which is how the maintainers work on the site and examples together.

The licence is not one licence, and that is the first thing to check

The README is unusually direct about this: the repository contains code with different licenses, and it asks you to read the section carefully. The packages directory is MIT licensed, with the license file at packages/ariakit-react/license. Examples are MIT except for the Plus examples, which fall under the Ariakit Plus License granted to Ariakit Plus customers. The app directory is proprietary with no license granted. The README instructs you to always refer to the most specific license file that applies to the code you are using. For most adopters the practical consequence is narrow: depending on @ariakit/react from npm puts you in MIT territory, and copying an ordinary example is also MIT. The risk sits in the Plus examples and in anything copied out of app. If your workflow is to browse examples and paste them into a product, check the licence file in that specific example directory first, because a Plus example carries different terms. This is a description of what the repository states, not legal advice; the license files themselves carry the terms.

Maintenance cadence and the cost of upgrading

The last push to the default branch was on 2026-09-21, and recent releases include @ariakit/[email protected], @ariakit/[email protected] and @ariakit/[email protected], all published on 2026-09-14. The version numbers are worth reading closely. The supporting packages are still on 0.x, which is the conventional signal that their APIs can move between minor releases. The Tailwind package is also marked experimental in the README, as is the Solid package. If you depend on @ariakit/tailwind, plan for breaking changes on minor version bumps rather than treating it like a stable dependency. The repository uses changesets (the .changeset directory is present at the top level), which is the standard mechanism for generating changelogs and version bumps across a monorepo, so release notes are the place to look before upgrading. The test tooling is broad: the root package.json defines scripts for Chrome, Firefox, Safari, iOS and Android, headed and headless, and the README credits BrowserStack for browser testing. That breadth is a signal about how much surface area the project maintains, and it is also a signal about how much a change to shared behaviour can ripple through.

Where Ariakit is the wrong choice

If you want a finished visual component library, Ariakit is the wrong tool, and no amount of reading the examples changes that. The toolkit gives you behaviour and accessibility, and the README's own framing puts styles alongside components rather than inside them. Teams that need a polished default look on day one will spend their first week writing CSS that another library would have shipped. The second case is framework lock-in. The React package is the mature one; @ariakit/solid is labelled experimental in the README. If your project is on Solid, you are on the experimental path, with the API-stability expectations that implies. The third case is a team that will not read source. The README does not document component props, so the examples and the website are load-bearing. If your workflow depends on autocomplete-driven discovery from a package's type definitions alone, expect more friction than with a library whose README doubles as a reference.

Ariakit against a headless primitive library such as Radix

The closest comparison is another headless primitive library, and Radix appears in the search terms around this project. The difference is in the shape of the API rather than in the goal, since both aim to give you accessible behaviour without imposing visuals. Radix-style primitives tend to be organised as compound components with a fixed set of named parts, where the library decides the internal structure and you slot content into the parts it defines. Ariakit's examples suggest a more composition-driven model, where a single interaction is assembled from several components that you wire together, which is why the example names describe behaviours (combobox-filtering, dialog-combobox-command-menu) rather than widgets. The practical consequence: Ariakit gives you more freedom in how the pieces connect and asks you to understand that wiring, while a more prescriptive primitive set gives you less freedom and less assembly work. Neither is strictly better. If your team wants to look up one component and use it, the prescriptive model is faster. If your interaction does not map cleanly onto a library's predefined parts, Ariakit's composition is the more forgiving shape.

Editorial conclusion

Adopt Ariakit if you are building a React interface where you control the markup and CSS and want the ARIA wiring handled for you; the packages directory is MIT licensed, so the core is safe to depend on. Do not adopt it if you expect a finished visual component library, or if you need Solid support today, since @ariakit/solid is marked experimental. Before committing, verify the license file that applies to the specific directory you are copying from, because the repository mixes MIT, the Ariakit Plus License and a proprietary app license, and confirm that the example you are adapting is not one of the Plus examples. Then read the source of the one component you plan to use first, since the README points to the website for component documentation rather than documenting behaviour inline.

Frequently asked questions

What is Ariakit used for?

Ariakit is a toolkit of accessible components for web apps, distributed mainly as the @ariakit/react package. It provides component behaviour and ARIA wiring while leaving markup and styling decisions to the developer.

How do I install Ariakit in a React project?

The README lists @ariakit/react as the primary package and points to ariakit.com for docs, components and examples. It does not include an install command or a minimal usage snippet, so the website and the examples directory are the places to start.

Is Ariakit free to use?

The packages directory is MIT licensed, and examples are MIT except for the Plus examples, which fall under the Ariakit Plus License. The app directory is proprietary with no license granted, and the README says to refer to the most specific license file that applies.

Does Ariakit support frameworks other than React?

The README lists @ariakit/solid as experimental alongside the React package, and @ariakit/tailwind is also marked experimental. The React package is the one the README presents as the main entry point.

Official sources

  1. ariakit/ariakit on GitHub
  2. Issues
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/ariakit-ariakit.svg)](https://hysenlabs.com/projects/ariakit-ariakit)