dowel is an opinionated React component library. Every component ships its own appearance and refuses className and style. What you compose is behaviour and content; what you get back is one coherent surface.
One package, one stylesheet, no build config. dowel is ESM-only.
pnpm add doweldowel ships no typeface โ its --dowel-font token names Inter Variable first and the app supplies it. This site self-hosts it via @fontsource-variable/inter.
import "dowel/dowel.css";
import { Button } from "dowel";
export function Save() {
return <Button variant="primary">Ship it</Button>;
}Import components, bump a version, get the fixes. Your UI does not drift across apps, because there is no copy of it in your repo to drift.
No per-component override API. className and style are omitted from every prop type and neutralised at runtime, so one look survives contact with a deadline.
One stylesheet, three activation paths, and an explicit choice that always beats the OS. Retheming is three CSS variables on :root.
Eight of them. Behaviour comes from Base UI; every one is keyboard-tested and axe-checked.