LLM-first developer tool for generating Component Catalogues
Components can be organized using status, kind, tags, and hierarchy. These properties enable filtering, searching, and logical grouping in the catalogue.
Indicates the component’s maturity level.
| Status | Description | Use When |
|---|---|---|
stable |
Production-ready | API is finalized, fully tested |
beta |
Nearly ready | API may change, needs feedback |
deprecated |
Being phased out | Replacement available, avoid for new code |
{
"id": "button",
"status": "stable"
}
Defines the component’s role in the hierarchy.
| Kind | Description | Landing Page |
|---|---|---|
standalone |
Independent component | ✅ Shown |
subcomponent |
Part of a parent component | ❌ Hidden (shown under parent) |
feature |
Feature enhancement | ✅ Shown |
{
"id": "table-row",
"kind": "subcomponent",
"parentId": "data-table"
}
Independent components that can be used on their own.
{
"id": "button",
"kind": "standalone"
}
Components that are part of a larger component. Must specify parentId.
{
"id": "tab-panel",
"kind": "subcomponent",
"parentId": "tabs"
}
Parent component can list its subcomponents:
{
"id": "tabs",
"kind": "standalone",
"subcomponents": ["tab-panel", "tab-list", "tab-trigger"]
}
Enhancements or utilities that augment other components.
{
"id": "tooltip",
"kind": "feature"
}
Free-form labels for search and filtering.
{
"id": "button",
"tags": ["form", "action", "interactive", "input"]
}
| Category | Examples |
|---|---|
| Function | form, navigation, layout, display |
| Interaction | interactive, static, animated |
| Content | text, media, data, icon |
| Domain | auth, commerce, social |
Tags are searchable from the landing page. Searching “form” will match components with:
form in the IDform in the titleform in tagsform in descriptionDefine relationships using parentId and subcomponents:
Parent (data-table/component.json):
{
"id": "data-table",
"kind": "standalone",
"subcomponents": ["table-header", "table-row", "table-cell"]
}
Child (table-row/component.json):
{
"id": "table-row",
"kind": "subcomponent",
"parentId": "data-table"
}
standalone and feature componentsUsers can filter by:
Filters can be set via URL:
/#/?status=stable&kind=standalone&q=button
registry/components/
├── auth/
│ ├── login-form/
│ └── signup-form/
├── commerce/
│ ├── product-card/
│ └── cart-item/
└── common/
├── button/
└── input/
Use tags to group: ["auth", "form"]
// Atoms
{ "id": "button", "tags": ["atom"] }
{ "id": "icon", "tags": ["atom"] }
// Molecules
{ "id": "search-input", "tags": ["molecule"] }
{ "id": "card", "tags": ["molecule"] }
// Organisms
{ "id": "header", "tags": ["organism"] }
{ "id": "product-grid", "tags": ["organism"] }
{ "id": "date-picker", "tags": ["forms", "input", "date"] }
{ "id": "data-table", "tags": ["data", "display", "table"] }
{ "id": "modal", "tags": ["overlay", "dialog"] }
betastable after API stabilizesdeprecated when replacement existssubcomponent for tightly coupled childrenfeature for optional enhancementscatalogue validate to check referencesparentId points to existing componentsubcomponents array matches actual components