This page is generated from the engine's own component registry, so it always matches what the engine implements. Every demo runs live in the sandbox; switch the theme to see all of them change.
71 components
Layout
<ROW>
container
Lays its children out side by side; wraps on narrow screens.
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
COLS
3
Columns at full width.
MIN
220px
Minimum column width before columns drop.
GAP
16px
Space between cells.
<ACONTAINER>
also DISPLAY, BOXcontainer
The general container: FLOW row or column, with gap, padding and background.
<ACONTAINERFLOW="row"GAP="16px"PAD="16px"COLOR="var(--bg-2)">
<TEXTTEXT="An ACONTAINER holds any children in a row or a column." />
</ACONTAINER>
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
FLOW
column
Direction of children.column · row
GAP
12px
Space between children.
WRAP
false
Wrap children (row flow).true · false
JUSTIFY
—
Main-axis distribution.start · center · end · between
ALIGN
—
Cross-axis alignment.start · center · end · stretch
COLOR
—
Background colour (any CSS colour or var(--bg-2)).
<CARD>
container
A surface that groups related content. With ACTION it becomes clickable.
<CARDTITLE="Weekly digest"SUBTITLE="Every Monday at 9:00"ICON="mail">
<TEXTTEXT="A short summary of what changed across your boards." />
<ROW><BUTTONLABEL="Subscribe"SIZE="sm" /></ROW>
</CARD>
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
TITLE
—
Optional heading.
SUBTITLE
—
Optional line under the heading.
ICON
—
Icon or emoji beside the heading.
ACTION
—
Action fired on click.
GAP
12px
Space between children.
STYLE
—
flat (no border), raised, outline or accent.flat · raised · outline · accent
<HERO>
container
A page-opening block: eyebrow, headline, lead text and actions.
<HEROEYEBROW="New"TITLE="Ship the entire app as one spec"SUBTITLE="Declare the screens, wire them by label and let the engine do the rest.">
<BUTTONLABEL="Get started" />
<BUTTONLABEL="Read the guide"STYLE="ghost" />
</HERO>
Children: widgets (usually buttons)
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
EYEBROW
—
Small label above the title.
TITLE
—
Headline.
SUBTITLE
—
Lead paragraph.
IMAGE
—
Optional image shown beside (or behind, with STYLE="cover").
ALIGN
left
Text alignment.left · center
STYLE
—
cover puts the image behind the text.cover · plain
<TABS>
container
Tabbed panels. Each <TAB LABEL> holds its own widgets.
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
—
Collection to repeat over.
WHERE
—
Filter, e.g. board={boards.id} AND hot=1.
SORT
—
Sort, e.g. created desc.
LIMIT
—
Maximum number of records.
LAYOUT
column
How repeated items flow.column · row · grid
COLS
3
Columns when LAYOUT="grid".
MIN
220px
Minimum column width when LAYOUT="grid".
GAP
12px
Space between items.
ACTION
—
Action fired when an item is clicked; the item becomes the active record.
EMPTY
Nothing here yet.
Text shown when there are no records.
<RECORD-COMPARE>
data-bound
Choose two saved records and compare explicit scalar fields. Changed values are marked. This is a manual comparison, not a visual diff, version control system or semantic assessment.
LABEL: from OP and FIELD ("Average score", "Total price", "Lowest price", "Highest price"; a count is the collection humanised), except in STYLE="badge".
Attribute
Default
What it does
SRC
—
Collection.
WHERE
—
Filter.
FIELD
—
Field to aggregate (not needed for count).
QTY
—
Optional quantity field; each row contributes FIELD × QTY.
OP
sum
Aggregate.sum · count · avg · min · max
FORMAT
num
Number format.num · money · compact
LABEL
—
Label shown before the value.
STYLE
inline
Presentation.inline · stat · badge
<RECORDBAR>
data-bound
VB-style record navigator: first, previous, next, last. Moves the active record of SRC.
<RECORDBARSRC="products"LABEL="Product"FIELD="name" />
<TEXTSTYLE="h3"TEXT="{products.name|default:Pick a record}" />
<PICTUREBIND="products.images"HEIGHT="220px" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
—
Collection.
WHERE
—
Filter.
LABEL
Record
Label.
FIELD
—
Field shown for the current record.
<TREE>
data-bound
A collapsible tree, from <NODE> children or from records with a PARENT field.
Children: <EDGE FROM TO LABEL> (declarative links)
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
—
Node collection.
LINKS
—
Optional link collection.
ID
id
Node identifier field.
LABEL
name
Node label field or template.
GROUP
group
Node group field.
META
—
Optional second line field or template.
FROM
from
Link source identifier field.
TO
to
Link target identifier field.
RELATION
label
Link label field.
HEIGHT
440px
Diagram height.
ACTION
—
Action fired when a node is selected; its record becomes active.
OPEN
—
State to open when a node is selected.
Content
<TEXT>
A run of text. STYLE picks its role in the type scale.
<TEXTSTYLE="h2"TEXT="Everything is a label" />
<TEXTSTYLE="eyebrow"TEXT="Release notes" />
<TEXTSTYLE="lead"TEXT="Wire any button to any state by giving both the same name." />
<TEXTSTYLE="muted"TEXT="Signed in as {user}" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
TEXT
—
The text. {placeholders} read the pipe or the record in scope. Inner text works too.
STYLE
body
Role in the type scale.display · h1 · h2 · h3 · lead · body · muted · small · micro · eyebrow · mono · quote
SIZE
—
Explicit font size.
WEIGHT
—
Font weight, e.g. 600.
COLOR
—
Text colour.
ALIGN
—
Text alignment.left · center · right
LINES
—
Clamp to this many lines.
BIND
—
Read the text from a path instead, e.g. record.title.
<ARTICLE>
Long-form text written in a small, safe subset of Markdown.
<ARTICLE>
## Why a graph
States are **nodes**. Labels are *edges*.
- Declare the screens
- Wire them by label
- Bind components to data
</ARTICLE>
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
BIND
—
Path to the Markdown, e.g. record.body.
TEXT
—
Markdown given inline (inner text works too).
SIZE
—
Base font size, e.g. 17px.
<IMG>
also IMAGE
An image. SRC may be a {placeholder} bound to a record field.
LABEL: a button with no LABEL, text or ICON is labelled from its ACTION: a state uses its nav label, anything else is humanised ("checkout" → "Checkout").
ACTION="back" with no LABEL or ICON reads "Back" with an arrow.
Attribute
Default
What it does
LABEL
Button
Text on the button.
ACTION
—
Action label, e.g. open, save(posts), back, theme(ocean).
ICON
—
Icon name or emoji.
STYLE
primary
Visual weight.primary · secondary · ghost · danger · link
SIZE
md
Size.sm · md · lg
FULL
false
Stretch to the full width.true · false
SET
—
KV assignments made before the action fires, e.g. status=done; filter=open.
<BUTTON-BAR>
A group of buttons. SEGMENTED makes it a toggle whose choice is published into the pipe.
TYPE: from the ID where it is unambiguous: email, phone/tel, url/website, date/*_date/birthday, password, and age/qty/quantity/count/price/amount as number.
LABEL: the ID humanised, unless the input already has a PLACEHOLDER. A search input (ID search, q or query, or TYPE="search") gets PLACEHOLDER "Search…" instead of a label.
Attribute
Default
What it does
TYPE
text
Field type.text · textarea · number · email · password · search · date · time · color · range · url
LABEL
—
Label shown above the field.
PLACEHOLDER
—
Hint text.
VALUE
—
Initial value; {record.field} prefills an edit form.
ACTION
—
Action fired on Enter.
LIVE
false
Refresh data-bound components as you type (live filtering).true · false
REQUIRED
false
Must be filled before a SAVE or UPDATE wire runs.true · false
ROWS
4
Rows for a textarea.
MIN
—
Minimum (number, range).
MAX
—
Maximum (number, range).
STEP
—
Step (number, range).
KEEP
false
Keep the value after a save.true · false
<SELECT>
data-bound
A drop-down. Options come from OPTIONS, <OPTION> children or a collection.
Children: <FIELD NAME LABEL TYPE PLACEHOLDER REQUIRED OPTIONS VALUE>
Defaults and inference
SAVE="books" saves the fields as a new record in that collection: the engine adds the wire itself.
SUBMIT-LABEL: "Add " plus the collection in the singular ("Add book") with SAVE, and "Save" with UPDATE.
FIELD LABEL: the NAME humanised ("first_name" and "firstName" → "First name").
FIELD TYPE: select when it has OPTIONS; otherwise from the NAME where it is unambiguous (email, tel, url, date, password, number, and textarea for notes, description, body, message or bio).
Flags need no value: REQUIRED is read as REQUIRED="true".
With UPDATE, each FIELD starts with the record's value ({books.title}).
After SAVE with no TO, a form on a screen of its own goes back to where you came from; a form on the same screen as the list it saves to stays put.
Attribute
Default
What it does
SAVE
—
Collection to add a record to on submit. No ACTION or WIRE is needed.
UPDATE
—
Collection whose active record the form edits; fields start with its values.
TO
—
State to go to after SAVE or UPDATE.
SET
—
Extra KV pairs written with the record, e.g. status=new; author={user}.
ACTION
—
Action fired on submit; a WIRE with SAVE="coll" turns the fields into a record.
SUBMIT-LABEL
Submit
Submit button text.
TITLE
—
Optional heading.
COLS
1
Lay fields out in this many columns (they stack on a phone).
<JSON-CHECK>
Check JSON against a flat, exact field contract. Reports syntax, missing fields, extra fields and type errors locally. Nested schemas, coercion and remote references are not supported.
<JSON-CHECKSHAPE="title:string,done:boolean" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SHAPE
title:string,done:boolean
Comma-separated required name:type fields. All fields are required; extra fields are rejected. Maximum 12 fields.
LABEL
JSON input
Accessible input label.
VALUE
—
Initial JSON text. No data is sent or saved.
<REVIEW-IMPORT>
Validate and import bounded review findings into one local collection. Exact keys, no inference, no network or code execution. Identical findings are skipped; location grouping does not establish agreement or truth.
<REVIEW-IMPORTSRC="review_findings" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
review_findings
Local target collection. Maximum 200 active findings.
VALUE
—
Example JSON array.
TO
—
State to open after a successful import.
<UNICODE-INSPECTOR>
Inspect glyphs, Unicode code points and browser-native normalization forms locally. Code-point decomposition is not grapheme-cluster analysis.
<UNICODE-INSPECTORVALUE="É" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
LABEL
Text to inspect
Accessible input label.
VALUE
É
Initial text, limited to 512 code units.
App
<LOGIN>
A sign-in card. On the public site any name works and nothing leaves the browser.
<LOGINTITLE="Welcome back"SUBTITLE="Sign in to post and reply" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
TITLE
Sign in
Heading.
SUBTITLE
—
Line under the heading.
LABEL
Continue
Button text.
NOTE
Demo sign-in: any name works, and it is kept in this browser only.
Small print under the button.
<THEME-PICKER>
Lets the user switch the app between themes at runtime.
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
—
Collection.
WHERE
—
Filter.
SORT
—
Sort.
LIMIT
—
Maximum items.
TITLE
title
Field or template for the title.
META
—
Field or template for the second line.
THUMB
thumb
Thumbnail field.
ACTIVE
—
Id of the current item.
ACTION
—
Action when an item is clicked.
OPEN
—
State to open the clicked item in. No WIRE needed.
HEADING
—
Optional heading above the list.
<AUDIO>
data-bound
A music player: waveform scrubber, transport, volume and a track list from a collection.
<AUDIOSRC="tracks"LIST="false" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
—
Collection of tracks (fields src, title, artist, duration, peaks, color).
WHERE
—
Filter.
SORT
—
Sort.
SOURCE
—
A single audio file URL (instead of SRC).
FILE
src
Field holding the audio URL.
LIST
true
Show the track list.true · false
AUTONEXT
true
Continue to the next track.true · false
TITLE
title
Title field.
ARTIST
artist
Artist field.
<WAVEFORM>
data-bound
A waveform of peak values. FOR links it to an AUDIO player so it tracks and seeks.
<WAVEFORMSRC="tracks"HEIGHT="64px" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
—
Collection whose first record holds the peaks (with FIELD).
FIELD
peaks
Field holding the peaks.
WHERE
—
Filter.
BIND
—
Or: path to a list of peaks (0–1), e.g. tracks.peaks.
FOR
—
ID of an AUDIO component to follow.
HEIGHT
64px
Height.
<CANVAS>
A drawing surface with brush, eraser, shapes, fill, undo and PNG export. Other components drive it with actions: paint.tool(eraser), paint.clear(), paint.keep(sketches).
<CANVASID="sketch"HEIGHT="260px" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
With RATING, TITLE is "Reviews" and PLACEHOLDER is "Write a review…" unless set.
Attribute
Default
What it does
GUID
—
Data asset; defaults to the record in scope or the active record.
SRC
comments
Collection that stores comments (each has a guid field).
TITLE
Comments
Heading.
RATING
false
Ask for a 1–5 star rating: reviews.true · false
PLACEHOLDER
Add a comment…
Hint in the text box.
MAX_DEPTH
2
How deep replies may nest.
SHOW_LIKES
true
Show like buttons on comments.true · false
<REVIEWS>
data-boundGUID-bound
Reviews for the data asset in scope: the star rating, likes and a threaded list with star input. No wiring needed.
<REVIEWSGUID="products/mug" />
Defaults and inference
Binds to the record in scope or the active record, like every social component: the same as RATING + LIKES + COMMENT-THREAD RATING="true" with that GUID.
Attribute
Default
What it does
GUID
—
Data asset; defaults to the record in scope or the active record.
TITLE
Reviews
Heading.
PLACEHOLDER
Write a review…
Hint in the text box.
LIKES
true
Show the like button beside the rating.true · false
<ACTION-BAR>
data-boundGUID-bound
Like, save and comment-count buttons for the data asset in scope.
<ACTION-BARGUID="demo/hello" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
GUID
—
Data asset; defaults to the record in scope or the active record.
ITEMS
like,save,comments
Which buttons to show.
<RELATED>
data-boundGUID-bound
Other records like the active one, ranked by shared tags or category. It finds its collection from the active record.
<RELATEDSRC="videos"HEADING="More like this"META="{channel} · {duration|dur}"LIMIT="3" />
Defaults and inference
Nothing beyond the defaults in the table: an attribute you leave out takes the value shown there.
Attribute
Default
What it does
SRC
—
Collection; defaults to the active record's collection.
BY
tags,category
Fields compared to rank similarity.
LIMIT
6
How many to show.
TITLE
title
Field or template for the title.
META
—
Field or template for the second line.
THUMB
thumb
Thumbnail field.
HEADING
Related
Heading.
ACTION
—
Action when an item is clicked; the item becomes the active record.
OPEN
—
State to open the clicked item in. No WIRE needed.
<CONVERSATION>
also CHATdata-bound
A collection-backed message conversation with a composer. Messages persist locally; live networking requires a separately configured data backend.