# SpaceUI > A React 19 component library and design system for dark interfaces. Zero runtime dependencies, precompiled CSS, and a role-based design-token system. Install it, import one stylesheet, and the components are finished: there is no theme to configure, no provider to mount and no build-time plugin to register. - Package: `@inkorange/space-ui` v1.11.0, MIT - Peer dependencies: react >= 19, react-dom >= 19. No other runtime dependencies. - Repository: https://github.com/inkorange/space-ui - Interactive gallery: https://space-components.vercel.app - Full API reference for machines: https://space-components.vercel.app/llms-full.txt - Full API reference as HTML: https://space-components.vercel.app/reference.html ## Install ```bash npm install @inkorange/space-ui ``` ```tsx import "@inkorange/space-ui/styles.css"; import { Card, Heading, Text, Badge, Button } from "@inkorange/space-ui"; export function Planet() { return ( Kepler-442b Temperate A super-earth in the habitable zone. ); } ``` Two further entry points exist: `@inkorange/space-ui/styles.css` is the one required stylesheet, and `@inkorange/space-ui/tokens.css` is the token layer on its own, for a project that wants the palette and the scales without the components. ## Rules for writing code against this library 1. **Import the stylesheet once, at the application root.** Every component's CSS ships precompiled in one file. There is no per-component import and no Sass for consumers. ```tsx import "@inkorange/space-ui/styles.css"; ``` 2. **Do not add a provider, context or theme wrapper.** Components read design tokens straight from CSS custom properties on the document. Nothing needs to be mounted above them. 3. **The library is dark-only, by design.** The tokens can be re-pointed, but the components are drawn as lit glass over a dark ground, so a light palette misrepresents every surface. There is no supported light theme; do not build one. 4. **Style with tokens, never with raw lengths or colours.** Spacing comes from the step scale, control heights from the ladder, colour from a named role. A raw px value puts the layout off the 8pt grid the whole library shares. ```css /* Right */ .panel { padding: var(--spacing-md); gap: var(--spacing-sm); } /* Wrong — off the grid, and it will not retune with the library */ .panel { padding: 16px; gap: 8px; } ``` 5. **Override a component token on a class, not with an inline style.** An inline style sets the property at the highest specificity there is, so it defeats every media and container query the consumer later writes. Set the token on a class instead. ```css /* Right */ .featured { --sp-carousel-view-count: 2.5; } /* Wrong */ ``` 6. **Component tokens are named --sp-[component]-[modifier]-[type].** So `--sp-carousel-gap-size`, `--sp-checkbox-label-gap-size`. Every token a component accepts is listed with that component below. 7. **Boolean props default to false, so the bare attribute is the idiom.** Write `