llms.txt

Constraints

Component-level constraints enforced by the json-render catalog. Violating these causes validation to fail and the snap to not render.

Component Constraints

ComponentPropConstraint
badgelabelMin 1, max 30 chars
buttonlabelMin 1, max 30 chars
itemtitleMin 1, max 100 chars
itemdescriptionMax 160 chars
progressvalueFinite number, 0 to max
progressmaxFinite number > 0
progresslabelMax 60 chars
textcontentMin 1, max 320 chars
inputnameMin 1 char
inputmaxLength1 to 280
inputlabelMax 60 chars
inputplaceholderMax 60 chars
sliderminMust be ≤ max
slidermaxMust be ≥ min
sliderstepFinite number > 0
sliderdefaultValueMust be between min and max
sliderlabelMax 60 chars
switchnameMin 1 char
switchlabelMax 60 chars
toggle_groupoptionsMin 2, max 6 items. Each max 30 chars
toggle_grouplabelMax 60 chars
imageurlHTTPS URL. jpg, png, gif, webp only
bar_chartbarsMin 1, max 6 items
bar_chartbars[].labelMin 1, max 40 chars
bar_chartbars[].valueMust not exceed max (if set)
cell_gridcols2 to 32
cell_gridrows2 to 16
cell_gridcells[].row0 to rows - 1
cell_gridcells[].col0 to cols - 1
cell_gridrowHeight8 to 64

Response Constraints

ConstraintLimit
versionMust be "1.0"
theme.accentMust be a named palette color
ui.rootMust be an ID present in ui.elements
submit target URLHTTPS in production; http://localhost valid in dev
POST response timeout5 seconds

Validation

Schema validation runs at render time. If the snap response fails validation, the snap does not render — the cast falls back to showing the URL as plain text.

URL Validation

For submit, open_url, and open_mini_app actions, params.target must use HTTPS in production. As an exception for local development and emulators, http:// is allowed when the host is loopback only: localhost, 127.0.0.1, or IPv6 loopback ([::1] / ::1). Non-loopback HTTP targets are invalid.

No javascript: URIs.