Skip to main content
There are 14 component kinds. Every component is a ComponentNode with an id, a type, and an untyped props bag. This page lists each kind and the props the renderers read. Props are stored as Record<string, any>. The names below are the keys the iOS SDK reads (ComponentProps) plus the intended shapes documented in the schema. A prop can be a plain value or a dynamic (conditional) value; string props also support {{variable}} interpolation.

Universal props

These apply to every visible component (a few do not apply to screenRoot or custom, noted in those sections).
GroupProps
VisibilityisVisible (bool), visibility (string), opacity (0 to 1), disabled (bool)
Sizewidth, height, minWidth, maxWidth, minHeight, maxHeight (number px, "NN%", or "auto"/"fill")
PaddingpaddingVertical, paddingHorizontal, paddingTop/Bottom/Left/Right, paddingAdvanced (bool)
MarginmarginTop, marginBottom, marginLeft, marginRight
Corner radiuscornerRadius, cornerAdvanced (bool), cornerTopLeft/TopRight/BottomLeft/BottomRight
BorderborderWidth, borderColor, borderStyle, borderOpacity
BackgroundbackgroundColor, fill, overflow
ShadowboxShadowColor, boxShadowOpacity, boxShadowX, boxShadowY, boxShadowBlur, boxShadowSpread, boxShadowInner
PositionpositionType (normal/relative/absolute/fixed/sticky), top, right, bottom, left, zIndex
Press feedbackpressFeedback object { style, scale, opacity, pressDuration, releaseDuration }
Attentionattention object { effect, duration, delay, repeat, intensity }
Animationanimations (step timeline), plus legacy animateOn/animOpacity/animScale/…
Layout, styling, and animation props are covered in depth under Properties, Layout and sizing, and Animations. The sections below list the props that are specific to each kind.

screenRoot

The implicit root container of a screen, rendered as the “Root Stack”. Treated as a stack; it exposes stack layout props (axis, spacing, align, justify) and spacing only. It is not added from the palette.

stack

A flex container. The primary layout primitive. Children render along an axis.
PropTypeNotes
axis"vertical" | "horizontal" | "layered"Also accepts legacy direction.
spacingnumberGap between children. Also accepts legacy gap.
justifystringMain-axis distribution (Top/Center/Bottom/Fill Equally/Space Evenly/Space Around/Space Between, or Left/Center/Right by axis).
alignstringCross-axis alignment.
wrapstringWrap behavior.
scrollBehavior"no-scroll" | "scroll" | "paginated" | "infinite"Scrolling.
staggerChildrenboolStagger children’s appear animations.
staggerIntervalnumberMs between each child (default 80).
staggerOrder"natural" | "reverse" | "center-out" | "random"Stagger order.
staggerHaptic"none" | "tick" | "ramp"Per-child haptic.
Supports the onAppear and onPress interactions.

text

A text label.
PropTypeNotes
textstringThe content. Supports {{variable}} interpolation.
colorstringText color.
fontSizenumberPoint size (8 to 120).
fontWeightstring"100" to "900" or named weight.
fontFamilystringSystem, custom, or a Google font.
textAlignstringLeft/Center/Right.
lineHeightnumberLine height.
letterSpacingnumberTracking.
textCasestringCase transform.
maxLinesnumberTruncate after N lines.
textEffectobject{ type, speed, delay, duration, cursor, cursorChar, haptic }. Types: typewriter, typewriterWord, fadePerLine, countUp, scramble.
textRotationobjectWord cycling: { enabled, values[], interval, transition, transitionDuration, loop, pauseOnLast }.

image

A remote or bundled image.
PropTypeNotes
srcstringFull http(s):// URL, a data: URL, or a relative path joined to the media base URL.
altstringAlt text.
fitstringcover / contain / fill / tile.
tintColorstringOptional tint.

button

A tappable container. Shares the stack style surface, so it accepts the stack layout and box props plus the text props below.
PropTypeNotes
textstringButton label.
variant"primary" | "secondary" | "ghost" | "destructive"Resolves default colors against globalStyles.colors. Per-prop overrides win.
colorstringText color (overrides variant).
fontSize, fontWeight, fontFamily, textAlignLabel typography.
iconSizenumberSize of an icon child.
layout/box propsaxis, spacing, justify, align, padding, backgroundColor, border, cornerRadius, shadow, width, height.
The main interaction is onPress. A Back Button is a button with a goBack action; a Close Button is a button with a closeFlow action.

input

A text field. Reads and writes a bound variable.
PropTypeNotes
inputTypetext / email / number / password / url / phone / multiline / searchMaps to the keyboard type. Also accepts legacy type.
placeholderstringPlaceholder text.
placeholderColorstringPlaceholder color.
variableKeystringThe variable this field reads on appear and writes on change.
maxLengthnumberCharacter limit.
rowsnumberVisible rows for multiline.
returnKeyTypestringReturn key label.
validationobject{ required, minLength, maxLength, pattern, patternMessage }.
Interactions: onChange, onFocus, onBlur (binding to the variable is implicit via variableKey).

toggle

A switch bound to a boolean variable.
PropTypeNotes
valueboolInitial value (bound variable wins on load).
variableKeystringThe boolean variable to read/write.
activeColorstringOn color.
inactiveColorstringOff color.
labelstringOptional label.
Interaction: onChange.
There is no checkbox component kind. A checkbox is composed as a Block (a tappable stack with an icon whose glyph swaps via a conditional value). Old checkbox nodes are migrated into that shape on load.

progress

A linear progress bar.
PropTypeNotes
mode"auto" | "custom"auto derives the value from screen position; custom uses value.
valuenumber (0 to 1)Progress when mode is custom.
colorstringFill color.
trackColorstringTrack color.
animateProgressboolAnimate value changes.
animationDurationnumberMs.
animationCurvestringEasing.
progress is not in the component palette; it is added via the Progress Bar block or in a zone.

ringProgress

A circular progress ring. A separate primitive from progress.
PropTypeNotes
mode"determinate" | "indeterminate"Default determinate.
valuenumber (0 to 1)Only meaningful when determinate.
sizenumberOuter diameter. Default 96.
strokeWidthnumberRing thickness. Default 8.
colorstringArc color. Default #4F46E5.
trackColorstringBackground ring. Default #E5E7EB.
animateOnAppearboolAnimate value changes. Default true.
animationDurationnumberMs. Default 800.
animationCurvelinear / ease-in / ease-out / ease-in-out
revealOnAppearboolScripted reveal: animate 0 to value on appear, ignoring the variable.
childrenComponentNode[]Centered slot (usually one text or icon).

icon

A vector icon (Lucide).
PropTypeNotes
iconNamestringIcon name. Accepts a conditional value so the glyph can be variable-driven.
sizenumberGlyph size.
colorstringGlyph color.
strokeWidthnumberStroke width.

slider

A numeric range control. Binds like input.
PropTypeNotes
minnumberRange minimum. Default 0.
maxnumberRange maximum. Default 100.
stepnumberIncrement. Default 1.
valuenumberInitial value (bound variable wins on load).
variableKeystringTwo-way binding (read on appear, written on change).
trackColorstringUnfilled track. Default #E5E7EB.
fillColorstringFilled portion. Default #4F46E5.
thumbColorstringKnob. Default #4F46E5.
showValueLabelboolShow the current value.
valueFormatstringDisplay template, "{{value}}" is substituted (for example "{{value}} kg").
Interaction: onChange.

lottie

A Lottie animation.
PropTypeNotes
srcstringAnimation URL. Resolved like image src.
autoplayboolPlay on appear. Default true.
loopboolLoop. Default true.
speednumberPlayback multiplier. Default 1.
width, heightnumber or stringSize.

comparisonChart

A “you with us vs you without us” comparison curve.
PropTypeNotes
seriesarray{ label, color, points: [{x, y}], style?, showArea?, showEndDot?, animate? }. Capped at 5 series.
xLabels{ start, end }Axis end labels.
yLabelstringY-axis label.
markers[{ x, label }]Vertical annotations.
animateOnAppearboolDraw curves on appear. Default true.
animationDurationnumberMs. Default 900.
staggerSeriesboolReveal series in sequence. Default false.
staggerDelaynumberMs between series. Default 250.
legendboolShow per-series legend. Default false.
heightnumber or stringChart height; width fills the parent.

custom

An app-scoped custom component placed by reference. Custom components render as placeholder shells in the editor and resolve to your registered native view on iOS. They have limited layout props (no background, border, shadow, padding, typography, position, z-index). Instance props (CustomComponentInstanceProps):
PropTypeNotes
customComponent{ key: string; version: number }Reference to the definition (CustomComponentRef). version defaults to 1.
inputsRecord<string, CustomComponentInputValue>Per input: { source: "value", value } or { source: "bind", variable }.
widthsize mode or config"content" / "fill" / number, or { mode, min?, max? }.
heightsize mode or configSame shape as width.
Custom components emit outputs (events) that you wire to actions in the editor. The native side and the editor agree on a key + version + input keys + output keys contract. See Custom components.

Notes

  • Components removed from the schema (spacer, divider, card, chip, carousel, video, checkbox, and the old placeholder chart) are rewritten or stripped by migrations on load. See Schema versions.
  • Any prop the renderers do not read is ignored, not an error.