Themeable to the core
Every color, surface, and interaction state resolves through one semantic token vocabulary. Flip to dark mode or swap a preset, and your entire UI follows — no per-component overrides.
Elegant, themeable, accessible components for SolidJS. Powered by semantic design tokens and Tailwind v4 — so every component is themeable, accessible, and SSR-ready out of the box.
hope-ui features: Semantic tokens, Light & dark, WAI-ARIA patterns, SSR-ready, Tree-shakeable, TypeScript-first, Tailwind v4, Themeable presets, SolidJS 2.0.
Every component paints from the same semantic tokens, so restyling the app is one preset swap.
Every color, surface, and interaction state resolves through one semantic token vocabulary. Flip to dark mode or swap a preset, and your entire UI follows — no per-component overrides.
WAI-ARIA patterns, focus management, and full keyboard interaction are built into every primitive — verified with axe on real browsers.
Fine-grained reactivity with clean server rendering and hydration. The Solid internals hope-ui relies on are pinned by characterization tests against the 2.0 beta.
Styling flows through tailwind-variants recipes into clean, unprefixed utilities — no runtime CSS-in-JS, no style tags to hydrate.
Not a swatch board — every card below is a working slice of an app. Open the pickers, tab through the rows, dismiss the banner. What you see is exactly what ships.
A searchable people field, the permission picker beside it, and the button that sends it.
Status pips down a list, one role token per state.
Arrow keys move the cursor, PageUp/PageDown change month.
| Sun | Mon | Tue | Wed | Thu | Fri | Sat |
|---|---|---|---|---|---|---|
Multi-select with roving focus — Space toggles, type to jump.
A non-modal popover for sharing; a modal, focus-trapped dialog for deleting.
Production · deployed 2 hours ago
A dismissible banner with its own actions row — the compound anatomy, not a preset shape.
acme-web #128 is live on preview — built and shipped in 42 seconds.
You never hard-code a color. Components reference finished semantic tokens, and a preset maps them to a palette — so restyling or theming is a contract, not a rewrite.
// one import per component subpath
import { Button } from "@hope-ui/components/button";
<Button variant="soft" colorScheme="primary">
Save changes
</Button>Install the components, drop in a preset, and ship an interface you’re proud of — themeable and accessible from the very first line.