Kobalte

Unstyled, WAI-ARIA compliant UI primitives and components for building design systems with SolidJS.

Library
npm
v0.13.13
1,849stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
78/100Good
Development Activity80
Maintenance84
Community56
Maturity52
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
83/100Excellent
Architecture88
Code Quality85
Innovation75
Learning Curve85

Kobalte is a UI toolkit that gives SolidJS applications a full set of unstyled, accessible components and primitives — accordions, dialogs, comboboxes, selects, menus, sliders, toasts, and more — each implemented against WAI-ARIA Authoring Practices so keyboard interaction, focus management, and screen-reader semantics come built in rather than bolted on afterward.

Rather than shipping opinionated CSS, every component exposes its interaction state through data-* attributes, which pairs directly with the companion @kobalte/tailwindcss plugin (or plain CSS) so teams can build a fully custom design system on top of accessible, tested behavior instead of re-implementing it from scratch. It fills the same role for SolidJS that Radix UI and React Aria fill for React.

What You Get

  • 30+ compound components covering forms, overlays, navigation, and feedback (Accordion, Combobox, Dialog, DropdownMenu, Menubar, NumberField, Popover, Select, Slider, Tabs, Toast, Tooltip, and more)
  • Shared low-level primitives (create-focus-scope, create-collection, create-escape-key-down, dismissable-layer, popper positioning) that every component is built from and that consumers can reuse directly
  • A polymorphic as/asChild-style rendering API so any sub-part can render as a different element or custom component without losing behavior
  • First-class form integration via a shared form-control context (validation state, required/disabled propagation, error messaging) across all form-like components
  • Built-in internationalization (RTL support, localized number/date parsing via @internationalized/number) and a live-announcer for assistive-technology status updates
  • An official @kobalte/tailwindcss plugin for styling components’ data-state attributes with Tailwind modifiers, alongside a vanilla-extract plugin for CSS-in-JS setups

Common Use Cases

  • Building an in-house design system for a SolidJS product without hand-rolling ARIA-compliant dialogs, menus, and form controls
  • Replacing native <select>/<input> elements with fully styleable, keyboard-accessible Combobox, Select, and NumberField components
  • Composing complex overlay UI (nested menus, popovers, tooltips, dismissable modals) that correctly manages focus and escape/outside-click behavior
  • Adding toast notifications, accordions, and disclosure widgets that meet WCAG keyboard and screen-reader expectations out of the box
  • Adopting a consistent, accessible component API across a component library that still needs a fully custom visual theme

Under The Hood

Architecture The monorepo (managed with pnpm workspaces + Turborepo) separates @kobalte/core from @kobalte/utils (shared helpers), @kobalte/tailwindcss, and @kobalte/vanilla-extract (styling plugins), with each of the 30+ components living in its own src/<component>/ directory built from a consistent root/sub-part decomposition (e.g. select-root.tsx, select-trigger.tsx, select-content.tsx, select-context.tsx) that shares state through Solid context rather than prop drilling. Cross-cutting behavior — focus scoping, dismissable layers, DOM collections for keyboard navigation, escape-key handling, popper-style positioning — is factored into a src/primitives/ layer (create-focus-scope, create-collection, create-escape-key-down, create-hide-outside) that every component composes rather than reimplements, which is the core architectural bet: change a primitive once and every consuming component inherits the fix.

Tech Stack Written in TypeScript on SolidJS (peer dependency solid-js ^1.9.8), using @floating-ui/dom for overlay positioning, @internationalized/number for locale-aware number parsing, and small solid-primitives/solid-presence/solid-prevent-scroll packages for reactive utilities. The package builds with tsup (targeting both JS and Solid-preserving JSX output for solid conditional exports), development/demos run through Vite, and the whole monorepo is orchestrated by Turborepo with Changesets for release/versioning.

Code Quality The package ships 37+ component-level test files run with Vitest and @solidjs/testing-library, exercising keyboard interaction, pointer events, and ARIA attribute output rather than just render smoke tests. Biome enforces linting/formatting across the monorepo (with a handful of explicitly-disabled a11y/style rules documented in biome.json), and GitHub Actions workflows run build, test, and format checks on every change. Types are strict TypeScript throughout with no any-heavy escape hatches in the public API surface.

API Design Every component follows the same compound-component shape (Root, Trigger, Content, Label, etc.) regardless of complexity, so learning one component’s API substantially transfers to the next; state is surfaced via data-* attributes (data-expanded, data-highlighted) rather than className toggling, which is what lets the companion Tailwind plugin style state with simple modifiers instead of JS-driven class logic. This is a deliberate, well-executed port of the Radix UI / React Aria API shape into SolidJS’s reactivity model rather than a novel interaction paradigm — its value is bringing an already-proven accessible-component API to a framework that lacked one.

Used by 8 apps in this directory

Rust
53%
Other

Cap

Team Chat · Video Conferencing

21,859

Open source Loom alternative with GPU-accelerated recording, instant share links, AI summaries, and full self-hosting via Docker Compose.

View details
89
Repo Health
81
Technical
64
Dependency
Built with
Rust53%
TypeScript43%
Updated yesterday
Rust
53%
Other

Cap

Team Chat · Video Conferencing

21,859

Open source Loom alternative with GPU-accelerated recording, instant share links, AI summaries, and full self-hosting via Docker Compose.

View details
89
Repo Health
81
Technical
64
Dependency
Built with
Rust53%
TypeScript43%
Updated yesterday
TypeScript
95%
Apache 2.0

Enclosed

Security

2,072

Send end-to-end encrypted notes and files where the server never sees your content — true zero-knowledge sharing.

View details
57
Repo Health
88
Technical
71
Dependency
Built with
TypeScript95%
Updated 4 days ago
Rust
47%
MIT

Kuku

Note Taking

219

A local-first, open-source Markdown knowledge workspace for macOS — plain files, personal wiki and Second Brain workflows, AI-assisted diffs, and encrypted sync, built as an Obsidian alternative.

View details
81
Repo Health
67
Technical
67
Dependency
Built with
Rust47%
TypeScript40%
Updated yesterday
TypeScript
98%
Other

Novu

Developer Tools

39,870

Open-source communication infrastructure that connects your products and AI agents to every channel your users live on — Inbox, Email, SMS, Push, Chat, and more.

View details
93
Repo Health
80
Technical
64
Dependency
Built with
TypeScript98%
Updated yesterday
TypeScript
75%
MIT

OpenCode

AI Code Assistants

205,271

A fully open-source AI coding agent built for the terminal, with a TUI, desktop app, web client, plugin system, and SDK — one of the most-starred AI coding agents on GitHub.

View details
89
Repo Health
76
Technical
66
Dependency
Built with
TypeScript75%
MDX21%
Updated today
TypeScript
94%
AGPL 3.0

Papra

Bookmarks Archiving

5,296

Self-hosted document archiving with email ingestion, OCR full-text search, and pluggable storage — store once, find anything.

View details
86
Repo Health
82
Technical
69
Dependency
Built with
TypeScript94%
Updated yesterday
TypeScript
94%
AGPL 3.0

Papra

Bookmarks Archiving

5,296

Self-hosted document archiving with email ingestion, OCR full-text search, and pluggable storage — store once, find anything.

View details
86
Repo Health
82
Technical
69
Dependency
Built with
TypeScript94%
Updated yesterday

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