Skip to main content
Normal UI

Getting started

Normal UI ships as two npm packages. Both are public and experimental (0.x): attributes and names may change before 1.0. MIT licensed. You need React 19 for the components; the CSS works anywhere.

Plain HTML or any framework

pnpm add @imsus/normal-ui-css
import '@imsus/normal-ui-css'; // tokens + base styles + patterns
import '@imsus/normal-ui-css/themes/govuk.css'; // optional: govuk, mcmaster, usgraphics

Write semantic elements and they already look right. data-color-scheme="light|dark" on <html> forces a color scheme (without it, the device decides); data-theme="<id>" applies a theme. Override any value with your own custom property; your unlayered CSS beats the layers underneath.

React

pnpm add @imsus/normal-ui-react
import '@imsus/normal-ui-css';
import '@imsus/normal-ui-css/themes/govuk.css'; // optional
import '@imsus/normal-ui-react/styles.css';
import { Alert, Button, TextField } from '@imsus/normal-ui-react';

<>
  <Alert kind="warning">3 products are almost out of stock.</Alert>
  <TextField label="Email address" type="email" autoComplete="email" />
  <Button type="submit">Save address</Button>
</>

Components take native props plus className and style (applied after the component's own styles) and xstyle for StyleX users. Interactive components carry 'use client'; importing one into a server-component page is the client boundary. Works in the last 2 Chrome, Firefox, and Safari.