Apsara v0.48.0 · Design system by Raystack
A design system for data-heavy interfaces.
Apsara is an open-source component library built on Base UI: accessible by default, styled with plain CSS tokens, and made for the tables, forms and consoles real products are built from.
- Built on
- Base UI primitives
- Runtime
- React 19 · TypeScript
- Styling
- Plain CSS, semantic tokens, no CSS-in-JS
- Theming
- Light and dark, 3 accents, 3 grays, 2 radii
- License
- Apache 2.0
Example application
| Customer | Plan | Status | Usage | MRR |
|---|---|---|---|---|
| HLHalcyon Labs | Enterprise | active | $12,400 | |
| MEMeridian | Team | trial | $0 | |
| NFNorthwind Freight | Team | active | $3,120 | |
| OSOstrava Studio | Starter | paused | $99 | |
| PCPilgrim & Co | Enterprise | churned | $0 |
Every part, live on the sheet.
Nothing on this page is an image. Each cell is the real component, rendered with its defaults and wired up, so what you see is what you ship. Hover a cell for its documentation.
Change your mind. The sheet re-inks itself.
Three accents, three grays, two radius styles and both modes, all from one provider. These controls are live: they retheme this page, hero drawing included.
Set once on ThemeProvider. Components read the tokens; nothing is hard-coded, so the choice carries to every surface in your app.
Halcyon Labs
Enterprise · 240 seats
SSO enforcement
Require SAML for every member.
Four lines from an empty file.
Apsara ships as one package with three entry points: components, icons and hooks. There is no build step and no configuration file.
- 01Install. pnpm add @raystack/apsara. Requires React 19.
- 02Import the stylesheet once. One CSS file carries every token and every component style. No runtime, no CSS-in-JS.
- 03Wrap in ThemeProvider. Pick an accent, a gray and a radius style. Light and dark are handled for you.
- 04Compose. Every component is a set of parts you assemble, the way the drawing above was assembled.
1import '@raystack/apsara/style.css';2import { Button, Field, Flex, Input, ThemeProvider } from '@raystack/apsara';34export default function App() {5 return (6 <ThemeProvider accentColor="indigo" grayColor="slate" style="modern">7 <Flex direction="column" gap={5}>8 <Field label="Workspace name">9 <Input placeholder="Halcyon Labs" />10 </Field>11 <Button>Save changes</Button>12 </Flex>13 </ThemeProvider>14 );15}