Getting Started
GuideGet @forma-studio/components running in your React + Tailwind CSS v4 project in under five minutes.
Install
pnpm add @forma-studio/components Then install the peer dependencies if you don't already have them:
pnpm add react react-dom tailwindcss @base-ui-components/react Load fonts
The library uses Syne (headings), DM Sans (UI text), and DM Mono (code). Font files are not bundled — you must load them.
Add to your HTML <head>:
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Syne:wght@400;600;700;800&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;1,9..40,300&family=DM+Mono:wght@300;400;500&display=swap" rel="stylesheet" /> Self-hosted, no CDN. Install the packages:
pnpm add @fontsource/syne @fontsource/dm-sans @fontsource/dm-mono Then import in your app entry point:
import '@fontsource/syne/800.css'
import '@fontsource/dm-sans/300.css'
import '@fontsource/dm-sans/400.css'
import '@fontsource/dm-sans/500.css'
import '@fontsource/dm-mono/400.css' Override the font variables in :root to use any fonts you like:
:root {
--font-display: 'Your Heading Font', sans-serif;
--font-body: 'Your Body Font', sans-serif;
--font-mono: 'Your Mono Font', monospace;
} Setup CSS
In your global CSS entry point, import Tailwind and the component styles:
@import "tailwindcss";
@import "@forma-studio/components/styles"; This single import gives you:
- All design tokens as CSS custom properties (
--color-bg-base,--radius-sm, etc.) - Pre-compiled component styles
- Tailwind v4 bridge so tokens work as utility classes (
bg-bg-base,text-text-primary) - Dark-first theme with light mode via
data-theme="light"
Use a component
import { Button } from '@forma-studio/components'
export function App() {
return (
<Button.Root variant="primary" size="md">
Get started
</Button.Root>
)
} TypeScript types are bundled — no separate @types/* package needed.
Component anatomy
All components use a namespace compound pattern. Each export is a namespace object with subcomponents:
import { Accordion } from '@forma-studio/components'
<Accordion.Root>
<Accordion.Item value="q1">
<Accordion.Trigger>Question</Accordion.Trigger>
<Accordion.Panel>Answer</Accordion.Panel>
</Accordion.Item>
</Accordion.Root> This makes it clear which subcomponents belong together and avoids import collisions when composing multiple components on the same page.
Peer dependency versions
| Package | Required version |
|---|---|
| react | ^19.0.0 |
| react-dom | ^19.0.0 |
| tailwindcss | ^4.0.0 |
| @base-ui-components/react | ^1.0.0-rc.0 |