Kit-trees — composite: 1 (frozen)

A kit-tree is a JSON element tree over the Element Contract: the only way extensions, themes, stores and agents add storefront UI without shipping code. It is rendered through the active theme's kit, so it looks native everywhere; it is validated statically (elements, props, bindings, caps) before it can ever render. Anything beyond this language is a P2 sealed section.

Node

{ "el": "Box", "props": { "surface": "surface-alt", "padding": "m" },
  "children": [ { "el": "Heading", "props": { "level": 3 }, "children": [ { "$bind": "$config.baslik" } ] },
                { "el": "KeyValueList", "each": "$ext.ibans", "as": "hesap",
                  "props": { "rows": [ { "key": { "$bind": "$hesap.banka" }, "value": { "$bind": "$hesap.iban" } } ] } } ] }

Bindings

prefixsource
$props.*a composite instance's props (the owner's form, from the composite's JSON Schema)
$config.*a block fill's per-placement config (configSchema)
$ext.*the extension's OWN config, only the pointers listed in exposeConfig
$data.*declared data the platform prefetches: productList, productByHandle, collectionList, metafields
$ctx.*storeName, payments.{cardEnabled,kapidaEnabled,havaleEnabled,taksitAvailable}, route.{path,kind,handle}
$blocksa composite instance's block list ({ type, props }[])
$item / $<as>the current each item

Formatters on a binding: money (kuruş → "1.249,90 TL"), href (a bundle link → URL), media (a media ref → the kit's image source), markdown (→ safe HTML for Prose).

Where trees come from

Generated from the live platform registries at build time — reference pages cannot go stale. Markdown variant: /reference/kit-trees.md