Adoption
What the repo actually imports — read from the monorepo, not from a list somebody maintains.
Measured, not claimed
A design system's README says how many components it has; its repo says how many of them anything uses. This page reads the second number the same way tests/consumers.test.ts does, so it cannot drift the way a hand-written coverage table does — that table is edited by the person adding the component, and it always says yes.
By app
How much of the system each service is on. A low number is not automatically a problem — Trellis is four pages of sign-in — but a low number on a large app is where the next duplicated component is.
By export
Every value export, and who imports it. Type-only exports are left out — importing a type is not adoption of anything, and counting it would inflate every number on this page.
| Export | Apps | Who |
|---|---|---|
| Logo | 13 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis, trellis-site |
| ThemeScript | 13 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis, trellis-site |
| Alert | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| AuthShell | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| Button | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| Card | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| CardContent | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| CardHeader | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| CardTitle | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| Checkbox | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| EmptyState | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| Input | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| PageHeader | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| SavedViews | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| Table | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| TableBody | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| TableCell | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| TableHead | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| TableHeader | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| TableRow | 12 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, sage, seed, trellis |
| AppShell | 11 | bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed, trellis |
| Badge | 11 | bloom, branch, echo, grove, hana, harvest, ivy, mint, root, seed, trellis |
| Field | 11 | bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed, trellis |
| Select | 11 | bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed, trellis |
| CopyField | 10 | bloom, branch, echo, grove, hana, harvest, ivy, mint, seed, trellis |
| Filter | 10 | bloom, echo, grove, hana, harvest, ivy, mint, root, sage, seed |
| FilterBar | 10 | bloom, echo, grove, hana, harvest, ivy, mint, root, sage, seed |
| Textarea | 10 | bloom, branch, echo, grove, harvest, ivy, mint, root, sage, seed |
| BackLink | 9 | bloom, branch, echo, harvest, ivy, mint, root, sage, seed |
| buttonVariants | 9 | bloom, branch, echo, grove, harvest, ivy, mint, sage, seed |
| SubmitButton | 9 | bloom, branch, grove, hana, harvest, ivy, mint, seed, trellis |
| cn | 7 | branch, echo, grove, harvest, ivy, sage, seed |
| NavList | 7 | bloom, branch, echo, grove, mint, seed, trellis |
| StatusBadge | 5 | echo, ivy, root, sage, seed |
| RelativeTime | 4 | echo, grove, ivy, trellis |
| Skeleton | 4 | grove, hana, ivy, root |
| ConfirmDialog | 3 | ivy, mint, root |
| Avatar | 2 | grove, seed |
| FormMessage | 2 | ivy, root |
| SignOutButton | 2 | hana, trellis |
| Stat | 2 | echo, ivy |
| Switch | 2 | ivy, sage |
| Timestamp | 2 | echo, grove |
| ago | 1 | echo |
| BrandTheme | 1 | hana |
| Breadcrumbs | 1 | grove |
| bytes | 1 | grove |
| CopyButton | 1 | grove |
| count | 1 | echo |
| DataList | 1 | seed |
| DataListMeta | 1 | seed |
| DataListRow | 1 | seed |
| Dialog | 1 | root |
| FileField | 1 | grove |
| JsonBlock | 1 | ivy |
| Kbd | 1 | grove |
| PageError | 1 | grove |
| Pagination | 1 | grove |
| percent | 1 | echo |
| SearchField | 1 | grove |
| SidebarScript | 1 | hana |
| SidebarToggle | 1 | hana |
| SparkBars | 1 | echo |
| Sparkline | 1 | echo |
| stamp | 1 | echo |
| StatGrid | 1 | ivy |
| ThemeToggle | 1 | trellis-site |
| Timeline | 1 | ivy |
| TimelineItem | 1 | ivy |
| until | 1 | echo |
Shipped, and nothing imports it yet
The honest half. Every component in Azalea was added because the same thing already existed two or more times in the apps — and that claim is only worth something if the replacements are visible. These are the ones where they are not, yet.
Not a defect list
How this is counted
Every .ts and .tsx file under apps/*/src is read, and named imports from @trellis/azalea are matched against the barrel. It counts imports, not renders — a component imported once and used a hundred times counts once, which is the right unit for “has this app adopted it” and the wrong one for “how much of the UI is Azalea”. tests/adoption.test.ts asserts the two parsers and that the scan finds the repo at all — a broken root lookup would render a page of zeroes that reads exactly like “nothing has adopted anything”.