Cre8 app factory
The library

93 components the model already knows.

Every one is a real, registered web component — the raw vocabulary your agents compose with, and the same elements a human would hand-write.

cre8-buttoncre8-cardcre8-badgecre8-alertcre8-modalcre8-tablecre8-tabscre8-accordioncre8-selectcre8-date-pickercre8-multi-selectcre8-progress-metercre8-progress-stepscre8-gridcre8-herocre8-featurecre8-headercre8-footercre8-primary-navcre8-breadcrumbscre8-paginationcre8-tooltipcre8-popovercre8-dropdowncre8-checkbox-fieldcre8-radio-fieldcre8-tag-listcre8-skeleton-loadercre8-loading-spinnercre8-split-button+ 63 more
Live, not a screenshot

Rendered from the published package

The card below is real @tmorrow/cre8-react running in your browser — the same components an agent emits, rendering the same way they will in your app.

Loading live components…
Usage

Both renderers, same component

Web Components run anywhere. React wrappers exist for 72 of them when you want typed props and JSX.

HTML · @tmorrow/cre8-wc
<cre8-card>
  <cre8-badge text="Accessible" variant="success"></cre8-badge>
  <cre8-button text="Primary action" variant="primary"></cre8-button>
</cre8-card>
React · @tmorrow/cre8-react
import { Cre8Badge, Cre8Button, Cre8Card } from '@tmorrow/cre8-react'

<Cre8Card>
  <Cre8Badge text="Accessible" variant="success" />
  <Cre8Button text="Primary action" variant="primary" />
</Cre8Card>

Rendering these server-side? The React wrappers build on @lit/react, and importing one reaches customElements at module scope — so they run in the browser only. In Next.js, load them from a client component with dynamic(..., { ssr: false }). This very page does exactly that.