Installation
Starting from nothing
If there is no project yet, the scaffolder writes one and fetches the components for it. It asks what you are building — a starter, a SaaS application or an AI product — and which of the thirteen themes to start on.
npx create-dowel-app my-appThe templates do not contain the components. They are the application files plus a list of registry names, and the scaffolder runs the same CLI you would run yourself — so a project created today is built from today’s registry rather than from whatever was current when the template was written.
Adding it to a project you already have
You need a React 19 project with Tailwind CSS v4 already set up, and TypeScript.
1. Initialise
This inspects the project, writes components.json, adds the cn() utility and appends the design tokens to your stylesheet. Nothing you already had is rewritten.
pnpm dlx @dowel-ui/cli initIt detects your package manager, path alias and stylesheet, and asks only about what it cannot work out. If your project is not supported — Tailwind v3, or JavaScript — it says so and stops rather than writing files that will not build.
2. Add components
Each component is installed with whatever it depends on. Adding a date picker also installs the calendar, popover and button it is built from.
pnpm dlx @dowel-ui/cli add button card input3. Use them
Imports are rewritten to your project’s own alias as the files are written.
import { Button } from "~/components/ui/button";
import { Card, CardContent, CardFooter, CardHeader, CardTitle } from "~/components/ui/card";
import { Input } from "~/components/ui/input";
export function CreateProject() {
return (
<Card>
<CardHeader>
<CardTitle>Create project</CardTitle>
</CardHeader>
<CardContent>
<Input placeholder="Project name" />
</CardContent>
<CardFooter className="justify-end">
<Button>Create project</Button>
</CardFooter>
</Card>
);
}Keeping up to date
update compares what you have against the registry and reports each file as up to date, out of date, or locally modified. Files you have edited are left alone unless you pass --overwrite.
See the CLI reference for every command and flag.