Skip to the page
Nitti Design System

Stack

Exact versions pinned in this repository. This repo upgrades first; the four consumers follow through releases of @nitti-ai/design-system.

Releases

The package is versioned, and every change a product would notice is written down as it is made (a changeset). A patch is a fix; a minor is something new, or a change in look that products get for free; a major means a product has to act, and says what to change. Before 1.0.0 a breaking change is a minor that starts with Breaking.

0.1.0@nitti-ai/design-system 0.1.0

0.1.0

Minor Changes

  • First version. The shared design system for Nitti Intelligence and Polyther.

    • Tokens for colour, type, radius, shadow and motion, with the two brand accents in light and dark.
    • The components, on Base UI, each in the design language: buttons, fields, menus, dialogs, tables, tabs and the rest, with AlertDialog, Command, Calendar, Item, ScrollArea, ButtonGroup and toasts.
    • The app shell, the composer and its pickers, the widget grid, and the marks and lockups with their motion.
    • Documents: the reading styles, the shared document page with its contents and sources, and the editor's controls for a BlockNote view.
    • Data: DataTable with its column kinds and card layout, charts on TanStack Charts, the parties of the Riksdag, PersonCard and record pages.
    • For a product adopting it: GUIDE.md, ADOPTING.md and the design-doctor checker.

Versions

PackageVersion
next16.4.0
react19.3.0
tailwindcss4.3.3
shadcn4.21.4
@base-ui/react1.9.0
typescript7.0.2
lucide-react1.54.0
motion14.0.0
@tanstack/charts1.1.0
@tanstack/react-table9.2.8
@blocknote/shadcn0.54.2
turbo2.11.7
oxlint1.87.0
bun1.4.2

Rules for consuming apps

  1. Import @nitti-ai/design-system/globals.css once, from the root layout. Do not redefine its tokens locally.
  2. Load Geist, Geist Mono and Instrument Serif with next/font as --font-geist, --font-geist-mono and --font-instrument-serif, and set data-brand on <html> (Nitti is the default).
  3. Add @nitti-ai/design-system to transpilePackages in next.config.ts.
  4. Use semantic utilities (bg-background, bg-card, text-muted-foreground, bg-success-surface). Never raw hex or Tailwind palette colours.
  5. Separate areas by fill and space, not borders. Hairlines (border-border) are for rows of data only.
  6. Instrument Serif (font-display, text-display/headline/title) for page-setting moments; Geist for everything else; Geist Mono for data only, never for navigation or labels.
  7. Animate with the motion tokens: ease-ios, ease-spring, ease-leave and --motion-fast/base/slow. Every animation needs a reduced-motion outcome.
  8. Motion for React (motion/react) is the motion library. Use it for anything that follows the pointer, makes room or can be interrupted, with the named transitions in @nitti-ai/design-system/lib/motion (springs.makeRoom, settle, lift, snap; leave; instant). Keep CSS for entrances, hovers and loops, which run before JavaScript.
  9. Base UI composes with the render prop, not asChild: <DialogTrigger render={<Button />}>.
  10. Build a missing component here first, then release it; do not fork a shared component inside an app.