[{"data":1,"prerenderedAt":4768},["ShallowReactive",2],{"navigation_docs":3,"-docs-getting-started-quick-start":2047},[4,75,166,221,431,1771],{"title":5,"path":6,"stem":7,"children":8},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started\u002Findex",[9,10,17,23,30,37,44,51,57,63,69],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13,"children":14,"icon":16},"Apps and Sites","\u002Fdocs\u002Fgetting-started\u002Fapps-and-sites","docs\u002Fgetting-started\u002Fapps-and-sites\u002Findex",[15],{"title":11,"path":12,"stem":13,"icon":16},"i-lucide-columns-2",{"title":18,"path":19,"stem":20,"children":21},"Architecture Overview","\u002Fdocs\u002Fgetting-started\u002Farchitecture","docs\u002Fgetting-started\u002Farchitecture\u002Findex",[22],{"title":18,"path":19,"stem":20},{"title":24,"path":25,"stem":26,"children":27,"icon":29},"Bring an existing frontend","\u002Fdocs\u002Fgetting-started\u002Fbring-an-existing-frontend","docs\u002Fgetting-started\u002Fbring-an-existing-frontend\u002Findex",[28],{"title":24,"path":25,"stem":26,"icon":29},"i-lucide-arrow-right-left",{"title":31,"path":32,"stem":33,"children":34,"icon":36},"Concepts","\u002Fdocs\u002Fgetting-started\u002Fconcepts","docs\u002Fgetting-started\u002Fconcepts\u002Findex",[35],{"title":31,"path":32,"stem":33,"icon":36},"i-lucide-shapes",{"title":38,"path":39,"stem":40,"children":41,"icon":43},"Frontend stacks","\u002Fdocs\u002Fgetting-started\u002Ffrontend-stacks","docs\u002Fgetting-started\u002Ffrontend-stacks\u002Findex",[42],{"title":38,"path":39,"stem":40,"icon":43},"i-lucide-layers",{"title":45,"path":46,"stem":47,"children":48,"icon":50},"Get Help","\u002Fdocs\u002Fgetting-started\u002Fget-help","docs\u002Fgetting-started\u002Fget-help\u002Findex",[49],{"title":45,"path":46,"stem":47,"icon":50},"i-lucide-life-buoy",{"title":52,"path":53,"stem":54,"children":55},"Glossary","\u002Fdocs\u002Fgetting-started\u002Fglossary","docs\u002Fgetting-started\u002Fglossary\u002Findex",[56],{"title":52,"path":53,"stem":54},{"title":58,"path":59,"stem":60,"children":61},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","docs\u002Fgetting-started\u002Fplatform-overview\u002Findex",[62],{"title":58,"path":59,"stem":60},{"title":64,"path":65,"stem":66,"children":67},"Prerequisites","\u002Fdocs\u002Fgetting-started\u002Fprerequisites","docs\u002Fgetting-started\u002Fprerequisites\u002Findex",[68],{"title":64,"path":65,"stem":66},{"title":70,"path":71,"stem":72,"children":73},"Your First App in 15 Minutes","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start\u002Findex",[74],{"title":70,"path":71,"stem":72},{"title":76,"path":77,"stem":78,"children":79},"Guides","\u002Fdocs\u002Fguides","docs\u002Fguides\u002Findex",[80,81,111,117,123,129,136],{"title":76,"path":77,"stem":78},{"title":82,"path":83,"stem":84,"children":85},"Build a revenexx App","\u002Fdocs\u002Fguides\u002Fapps","docs\u002Fguides\u002Fapps\u002Findex",[86,87,93,99,105],{"title":82,"path":83,"stem":84},{"title":88,"path":89,"stem":90,"children":91},"Add a data model","\u002Fdocs\u002Fguides\u002Fapps\u002Fadd-a-data-model","docs\u002Fguides\u002Fapps\u002Fadd-a-data-model\u002Findex",[92],{"title":88,"path":89,"stem":90},{"title":94,"path":95,"stem":96,"children":97},"Build your first app","\u002Fdocs\u002Fguides\u002Fapps\u002Fbuild-your-first-app","docs\u002Fguides\u002Fapps\u002Fbuild-your-first-app\u002Findex",[98],{"title":94,"path":95,"stem":96},{"title":100,"path":101,"stem":102,"children":103},"Deploy with the CLI","\u002Fdocs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli","docs\u002Fguides\u002Fapps\u002Fdeploy-with-the-cli\u002Findex",[104],{"title":100,"path":101,"stem":102},{"title":106,"path":107,"stem":108,"children":109},"Operate an App in production","\u002Fdocs\u002Fguides\u002Fapps\u002Foperate-in-production","docs\u002Fguides\u002Fapps\u002Foperate-in-production\u002Findex",[110],{"title":106,"path":107,"stem":108},{"title":112,"path":113,"stem":114,"children":115},"Configure pricing rules","\u002Fdocs\u002Fguides\u002Fconfigure-pricing-rules","docs\u002Fguides\u002Fconfigure-pricing-rules\u002Findex",[116],{"title":112,"path":113,"stem":114},{"title":118,"path":119,"stem":120,"children":121},"Examples","\u002Fdocs\u002Fguides\u002Fexamples","docs\u002Fguides\u002Fexamples\u002Findex",[122],{"title":118,"path":119,"stem":120},{"title":124,"path":125,"stem":126,"children":127},"Import a BMECAT product catalog","\u002Fdocs\u002Fguides\u002Fimport-a-bmecat-catalog","docs\u002Fguides\u002Fimport-a-bmecat-catalog\u002Findex",[128],{"title":124,"path":125,"stem":126},{"title":130,"path":131,"stem":132,"children":133,"icon":135},"Operate & go live","\u002Fdocs\u002Fguides\u002Foperate","docs\u002Fguides\u002Foperate\u002Findex",[134],{"title":130,"path":131,"stem":132,"icon":135},"i-lucide-activity",{"title":137,"path":138,"stem":139,"children":140},"Build a storefront Theme","\u002Fdocs\u002Fguides\u002Fthemes","docs\u002Fguides\u002Fthemes\u002Findex",[141,142,148,154,160],{"title":137,"path":138,"stem":139},{"title":143,"path":144,"stem":145,"children":146},"Build your first Theme","\u002Fdocs\u002Fguides\u002Fthemes\u002Fbuild-your-first-theme","docs\u002Fguides\u002Fthemes\u002Fbuild-your-first-theme\u002Findex",[147],{"title":143,"path":144,"stem":145},{"title":149,"path":150,"stem":151,"children":152},"Customize blocks","\u002Fdocs\u002Fguides\u002Fthemes\u002Fcustomize-blocks","docs\u002Fguides\u002Fthemes\u002Fcustomize-blocks\u002Findex",[153],{"title":149,"path":150,"stem":151},{"title":155,"path":156,"stem":157,"children":158},"Deploy your storefront","\u002Fdocs\u002Fguides\u002Fthemes\u002Fdeploy-your-storefront","docs\u002Fguides\u002Fthemes\u002Fdeploy-your-storefront\u002Findex",[159],{"title":155,"path":156,"stem":157},{"title":161,"path":162,"stem":163,"children":164},"Theme tokens and styling","\u002Fdocs\u002Fguides\u002Fthemes\u002Ftheme-tokens-and-styling","docs\u002Fguides\u002Fthemes\u002Ftheme-tokens-and-styling\u002Findex",[165],{"title":161,"path":162,"stem":163},{"title":167,"path":168,"stem":169,"children":170},"SDKs","\u002Fdocs\u002Fsdks","docs\u002Fsdks\u002Findex",[171,172,178,184,190,196,202,208,215],{"title":167,"path":168,"stem":169},{"title":173,"path":174,"stem":175,"children":176},"App SDK","\u002Fdocs\u002Fsdks\u002Fapp-sdk","docs\u002Fsdks\u002Fapp-sdk\u002Findex",[177],{"title":173,"path":174,"stem":175},{"title":179,"path":180,"stem":181,"children":182},"CLI","\u002Fdocs\u002Fsdks\u002Fcli","docs\u002Fsdks\u002Fcli\u002Findex",[183],{"title":179,"path":180,"stem":181},{"title":185,"path":186,"stem":187,"children":188},"Design systems","\u002Fdocs\u002Fsdks\u002Fdesign-systems","docs\u002Fsdks\u002Fdesign-systems\u002Findex",[189],{"title":185,"path":186,"stem":187},{"title":191,"path":192,"stem":193,"children":194},"Integration Node SDK","\u002Fdocs\u002Fsdks\u002Fintegration-nodes","docs\u002Fsdks\u002Fintegration-nodes\u002Findex",[195],{"title":191,"path":192,"stem":193},{"title":197,"path":198,"stem":199,"children":200},"Node SDK","\u002Fdocs\u002Fsdks\u002Fnode","docs\u002Fsdks\u002Fnode\u002Findex",[201],{"title":197,"path":198,"stem":199},{"title":203,"path":204,"stem":205,"children":206},"PHP SDK","\u002Fdocs\u002Fsdks\u002Fphp","docs\u002Fsdks\u002Fphp\u002Findex",[207],{"title":203,"path":204,"stem":205},{"title":209,"path":210,"stem":211,"children":212,"icon":214},"Versioning","\u002Fdocs\u002Fsdks\u002Fversioning","docs\u002Fsdks\u002Fversioning\u002Findex",[213],{"title":209,"path":210,"stem":211,"icon":214},"i-lucide-git-branch",{"title":216,"path":217,"stem":218,"children":219},"Web \u002F JavaScript SDK","\u002Fdocs\u002Fsdks\u002Fweb","docs\u002Fsdks\u002Fweb\u002Findex",[220],{"title":216,"path":217,"stem":218},{"title":222,"path":223,"stem":224,"children":225},"Services","\u002Fdocs\u002Fservices","docs\u002Fservices\u002Findex",[226,227,263,293,311,365,413],{"title":222,"path":223,"stem":224},{"title":228,"path":229,"stem":230,"children":231},"API usage","\u002Fdocs\u002Fservices\u002Fapi-usage","docs\u002Fservices\u002Fapi-usage\u002Findex",[232,233,239,245,251,257],{"title":228,"path":229,"stem":230},{"title":234,"path":235,"stem":236,"children":237},"Errors","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Ferrors","docs\u002Fservices\u002Fapi-usage\u002Ferrors\u002Findex",[238],{"title":234,"path":235,"stem":236},{"title":240,"path":241,"stem":242,"children":243},"Retries & idempotency","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fidempotency","docs\u002Fservices\u002Fapi-usage\u002Fidempotency\u002Findex",[244],{"title":240,"path":241,"stem":242},{"title":246,"path":247,"stem":248,"children":249},"Pagination & filtering","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fpagination","docs\u002Fservices\u002Fapi-usage\u002Fpagination\u002Findex",[250],{"title":246,"path":247,"stem":248},{"title":252,"path":253,"stem":254,"children":255},"Rate limits","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Frate-limits","docs\u002Fservices\u002Fapi-usage\u002Frate-limits\u002Findex",[256],{"title":252,"path":253,"stem":254},{"title":258,"path":259,"stem":260,"children":261},"Versioning & stability","\u002Fdocs\u002Fservices\u002Fapi-usage\u002Fversioning","docs\u002Fservices\u002Fapi-usage\u002Fversioning\u002Findex",[262],{"title":258,"path":259,"stem":260},{"title":264,"path":265,"stem":266,"children":267},"Authentication","\u002Fdocs\u002Fservices\u002Fauth","docs\u002Fservices\u002Fauth\u002Findex",[268,269,275,281,287],{"title":264,"path":265,"stem":266},{"title":270,"path":271,"stem":272,"children":273},"API keys","\u002Fdocs\u002Fservices\u002Fauth\u002Fapi-keys","docs\u002Fservices\u002Fauth\u002Fapi-keys\u002Findex",[274],{"title":270,"path":271,"stem":272},{"title":276,"path":277,"stem":278,"children":279},"Multi-factor authentication","\u002Fdocs\u002Fservices\u002Fauth\u002Fmfa","docs\u002Fservices\u002Fauth\u002Fmfa\u002Findex",[280],{"title":276,"path":277,"stem":278},{"title":282,"path":283,"stem":284,"children":285},"Social sign-in","\u002Fdocs\u002Fservices\u002Fauth\u002Foauth2","docs\u002Fservices\u002Fauth\u002Foauth2\u002Findex",[286],{"title":282,"path":283,"stem":284},{"title":288,"path":289,"stem":290,"children":291},"Sessions","\u002Fdocs\u002Fservices\u002Fauth\u002Fsessions","docs\u002Fservices\u002Fauth\u002Fsessions\u002Findex",[292],{"title":288,"path":289,"stem":290},{"title":294,"path":295,"stem":296,"children":297},"Events","\u002Fdocs\u002Fservices\u002Fevents","docs\u002Fservices\u002Fevents\u002Findex",[298,299,305],{"title":294,"path":295,"stem":296},{"title":300,"path":301,"stem":302,"children":303},"Consuming events","\u002Fdocs\u002Fservices\u002Fevents\u002Fconsuming-events","docs\u002Fservices\u002Fevents\u002Fconsuming-events\u002Findex",[304],{"title":300,"path":301,"stem":302},{"title":306,"path":307,"stem":308,"children":309},"Event types","\u002Fdocs\u002Fservices\u002Fevents\u002Fevent-types","docs\u002Fservices\u002Fevents\u002Fevent-types\u002Findex",[310],{"title":306,"path":307,"stem":308},{"title":312,"path":313,"stem":314,"children":315},"Network","\u002Fdocs\u002Fservices\u002Fnetwork","docs\u002Fservices\u002Fnetwork\u002Findex",[316,317,323,329,335,341,347,353,359],{"title":312,"path":313,"stem":314},{"title":318,"path":319,"stem":320,"children":321},"Caching","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcaching","docs\u002Fservices\u002Fnetwork\u002Fcaching\u002Findex",[322],{"title":318,"path":319,"stem":320},{"title":324,"path":325,"stem":326,"children":327},"Content delivery (CDN)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcdn","docs\u002Fservices\u002Fnetwork\u002Fcdn\u002Findex",[328],{"title":324,"path":325,"stem":326},{"title":330,"path":331,"stem":332,"children":333},"Compression","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fcompression","docs\u002Fservices\u002Fnetwork\u002Fcompression\u002Findex",[334],{"title":330,"path":331,"stem":332},{"title":336,"path":337,"stem":338,"children":339},"DDoS mitigation","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fddos","docs\u002Fservices\u002Fnetwork\u002Fddos\u002Findex",[340],{"title":336,"path":337,"stem":338},{"title":342,"path":343,"stem":344,"children":345},"Edge network","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fedges","docs\u002Fservices\u002Fnetwork\u002Fedges\u002Findex",[346],{"title":342,"path":343,"stem":344},{"title":348,"path":349,"stem":350,"children":351},"Endpoints","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fendpoints","docs\u002Fservices\u002Fnetwork\u002Fendpoints\u002Findex",[352],{"title":348,"path":349,"stem":350},{"title":354,"path":355,"stem":356,"children":357},"Transport Layer Security (TLS)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Ftls","docs\u002Fservices\u002Fnetwork\u002Ftls\u002Findex",[358],{"title":354,"path":355,"stem":356},{"title":360,"path":361,"stem":362,"children":363},"Web application firewall (WAF)","\u002Fdocs\u002Fservices\u002Fnetwork\u002Fwaf","docs\u002Fservices\u002Fnetwork\u002Fwaf\u002Findex",[364],{"title":360,"path":361,"stem":362},{"title":366,"path":367,"stem":368,"children":369},"Storage","\u002Fdocs\u002Fservices\u002Fstorage","docs\u002Fservices\u002Fstorage\u002Findex",[370,371,377,383,389,395,401,407],{"title":366,"path":367,"stem":368},{"title":372,"path":373,"stem":374,"children":375},"Folders","\u002Fdocs\u002Fservices\u002Fstorage\u002Fbuckets","docs\u002Fservices\u002Fstorage\u002Fbuckets\u002Findex",[376],{"title":372,"path":373,"stem":374},{"title":378,"path":379,"stem":380,"children":381},"Signed URLs and access","\u002Fdocs\u002Fservices\u002Fstorage\u002Ffile-tokens","docs\u002Fservices\u002Fstorage\u002Ffile-tokens\u002Findex",[382],{"title":378,"path":379,"stem":380},{"title":384,"path":385,"stem":386,"children":387},"Serve and transform images","\u002Fdocs\u002Fservices\u002Fstorage\u002Fimages","docs\u002Fservices\u002Fstorage\u002Fimages\u002Findex",[388],{"title":384,"path":385,"stem":386},{"title":390,"path":391,"stem":392,"children":393},"3D assets","\u002Fdocs\u002Fservices\u002Fstorage\u002Fmodel-viewer","docs\u002Fservices\u002Fstorage\u002Fmodel-viewer\u002Findex",[394],{"title":390,"path":391,"stem":392},{"title":396,"path":397,"stem":398,"children":399},"Access control and visibility","\u002Fdocs\u002Fservices\u002Fstorage\u002Fpermissions","docs\u002Fservices\u002Fstorage\u002Fpermissions\u002Findex",[400],{"title":396,"path":397,"stem":398},{"title":402,"path":403,"stem":404,"children":405},"Quick start","\u002Fdocs\u002Fservices\u002Fstorage\u002Fquick-start","docs\u002Fservices\u002Fstorage\u002Fquick-start\u002Findex",[406],{"title":402,"path":403,"stem":404},{"title":408,"path":409,"stem":410,"children":411},"Upload and manage files","\u002Fdocs\u002Fservices\u002Fstorage\u002Fupload-download","docs\u002Fservices\u002Fstorage\u002Fupload-download\u002Findex",[412],{"title":408,"path":409,"stem":410},{"title":414,"path":415,"stem":416,"children":417},"Webhooks","\u002Fdocs\u002Fservices\u002Fwebhooks","docs\u002Fservices\u002Fwebhooks\u002Findex",[418,419,425],{"title":414,"path":415,"stem":416},{"title":420,"path":421,"stem":422,"children":423},"Delivery","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fdelivery","docs\u002Fservices\u002Fwebhooks\u002Fdelivery\u002Findex",[424],{"title":420,"path":421,"stem":422},{"title":426,"path":427,"stem":428,"children":429},"Security","\u002Fdocs\u002Fservices\u002Fwebhooks\u002Fsecurity","docs\u002Fservices\u002Fwebhooks\u002Fsecurity\u002Findex",[430],{"title":426,"path":427,"stem":428},{"title":432,"path":433,"stem":434,"children":435},"Studios","\u002Fdocs\u002Fstudios","docs\u002Fstudios\u002Findex",[436,437,443,610,958,1240,1422],{"title":432,"path":433,"stem":434},{"title":438,"path":439,"stem":440,"children":441},"AI Studio","\u002Fdocs\u002Fstudios\u002Fai","docs\u002Fstudios\u002Fai\u002Findex",[442],{"title":438,"path":439,"stem":440},{"title":444,"path":445,"stem":446,"children":447},"Analytics Studio","\u002Fdocs\u002Fstudios\u002Fanalytics","docs\u002Fstudios\u002Fanalytics\u002Findex",[448,449,492,529,535,554,585],{"title":444,"path":445,"stem":446},{"title":450,"path":451,"stem":452,"children":453,"icon":455},"Make your app's data analyzable","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Findex",[454,456,462,468,474,480,486],{"title":450,"path":451,"stem":452,"icon":455},"i-lucide-table-2",{"title":457,"path":458,"stem":459,"children":460},"Column locators","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fcolumn-locators\u002Findex",[461],{"title":457,"path":458,"stem":459},{"title":463,"path":464,"stem":465,"children":466},"Declaring a view","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fdeclaring-a-view\u002Findex",[467],{"title":463,"path":464,"stem":465},{"title":469,"path":470,"stem":471,"children":472},"Example","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fexample\u002Findex",[473],{"title":469,"path":470,"stem":471},{"title":475,"path":476,"stem":477,"children":478},"Semantic roles","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fsemantic-roles\u002Findex",[479],{"title":475,"path":476,"stem":477},{"title":481,"path":482,"stem":483,"children":484},"Tenant isolation","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Ftenant-isolation\u002Findex",[485],{"title":481,"path":482,"stem":483},{"title":487,"path":488,"stem":489,"children":490},"The contract","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract","docs\u002Fstudios\u002Fanalytics\u002Fanalytics-json\u002Fthe-contract\u002Findex",[491],{"title":487,"path":488,"stem":489},{"title":493,"path":494,"stem":495,"children":496,"icon":498},"Stream commerce activity","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Findex",[497,499,505,511,517,523],{"title":493,"path":494,"stem":495,"icon":498},"i-lucide-radio",{"title":500,"path":501,"stem":502,"children":503},"Delivery guarantees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fdelivery-guarantees\u002Findex",[504],{"title":500,"path":501,"stem":502},{"title":506,"path":507,"stem":508,"children":509},"Event types for reporting","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fevent-types-for-reporting\u002Findex",[510],{"title":506,"path":507,"stem":508},{"title":512,"path":513,"stem":514,"children":515},"Register an endpoint","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fregister-an-endpoint\u002Findex",[516],{"title":512,"path":513,"stem":514},{"title":518,"path":519,"stem":520,"children":521},"The event stream","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fthe-event-stream\u002Findex",[522],{"title":518,"path":519,"stem":520},{"title":524,"path":525,"stem":526,"children":527},"Verify a delivery","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery","docs\u002Fstudios\u002Fanalytics\u002Fevents\u002Fverify-a-delivery\u002Findex",[528],{"title":524,"path":525,"stem":526},{"title":530,"path":531,"stem":532,"children":533,"icon":29},"Getting data out","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out","docs\u002Fstudios\u002Fanalytics\u002Fgetting-data-out\u002Findex",[534],{"title":530,"path":531,"stem":532,"icon":29},{"title":536,"path":537,"stem":538,"children":539,"icon":541},"Limits and what's next","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Findex",[540,542,548],{"title":536,"path":537,"stem":538,"icon":541},"i-lucide-list-checks",{"title":543,"path":544,"stem":545,"children":546},"Designing for what's coming","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fdesigning-for-whats-coming\u002Findex",[547],{"title":543,"path":544,"stem":545},{"title":549,"path":550,"stem":551,"children":552},"What does not exist yet","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet","docs\u002Fstudios\u002Fanalytics\u002Flimits\u002Fwhat-does-not-exist-yet\u002Findex",[553],{"title":549,"path":550,"stem":551},{"title":555,"path":556,"stem":557,"children":558,"icon":560},"Build your own reporting store","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Findex",[559,561,567,573,579],{"title":555,"path":556,"stem":557,"icon":560},"i-lucide-database",{"title":562,"path":563,"stem":564,"children":565},"Backfill","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fbackfill\u002Findex",[566],{"title":562,"path":563,"stem":564},{"title":568,"path":569,"stem":570,"children":571},"Incremental sync","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fincremental-sync\u002Findex",[572],{"title":568,"path":569,"stem":570},{"title":574,"path":575,"stem":576,"children":577},"Modelling","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fmodelling\u002Findex",[578],{"title":574,"path":575,"stem":576},{"title":580,"path":581,"stem":582,"children":583},"Pull versus push","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push","docs\u002Fstudios\u002Fanalytics\u002Fown-store\u002Fpull-vs-push\u002Findex",[584],{"title":580,"path":581,"stem":582},{"title":586,"path":587,"stem":588,"children":589,"icon":591},"What the tenant sees","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Findex",[590,592,598,604],{"title":586,"path":587,"stem":588,"icon":591},"i-lucide-chart-column",{"title":593,"path":594,"stem":595,"children":596},"Cohorts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fcohorts\u002Findex",[597],{"title":593,"path":594,"stem":595},{"title":599,"path":600,"stem":601,"children":602},"Datasets and charts","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fdatasets-and-charts\u002Findex",[603],{"title":599,"path":600,"stem":601},{"title":605,"path":606,"stem":607,"children":608},"Studio overview","\u002Fdocs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview","docs\u002Fstudios\u002Fanalytics\u002Fwhat-the-tenant-sees\u002Fstudio-overview\u002Findex",[609],{"title":605,"path":606,"stem":607},{"title":611,"path":612,"stem":613,"children":614},"App Studio","\u002Fdocs\u002Fstudios\u002Fapps","docs\u002Fstudios\u002Fapps\u002Findex",[615,616,653,724,789,807,874],{"title":611,"path":612,"stem":613},{"title":617,"path":618,"stem":619,"children":620,"icon":622},"Admin UI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Findex",[621,623,629,635,641,647],{"title":617,"path":618,"stem":619,"icon":622},"i-lucide-layout-dashboard",{"title":624,"path":625,"stem":626,"children":627},"How the Cockpit renders","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fhow-cockpit-renders\u002Findex",[628],{"title":624,"path":625,"stem":626},{"title":630,"path":631,"stem":632,"children":633},"Preview locally","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fpreview-locally\u002Findex",[634],{"title":630,"path":631,"stem":632},{"title":636,"path":637,"stem":638,"children":639},"Reading settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Freading-settings\u002Findex",[640],{"title":636,"path":637,"stem":638},{"title":642,"path":643,"stem":644,"children":645},"Settings","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fsettings\u002Findex",[646],{"title":642,"path":643,"stem":644},{"title":648,"path":649,"stem":650,"children":651},"Vocabularies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies","docs\u002Fstudios\u002Fapps\u002Fadmin-ui\u002Fvocabularies\u002Findex",[652],{"title":648,"path":649,"stem":650},{"title":654,"path":655,"stem":656,"children":657,"icon":659},"Your app's API","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Findex",[658,660,665,671,677,683,689,694,700,706,712,718],{"title":654,"path":655,"stem":656,"icon":659},"i-lucide-route",{"title":318,"path":661,"stem":662,"children":663},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcaching\u002Findex",[664],{"title":318,"path":661,"stem":662},{"title":666,"path":667,"stem":668,"children":669},"Calling another app","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcalling-another-app\u002Findex",[670],{"title":666,"path":667,"stem":668},{"title":672,"path":673,"stem":674,"children":675},"Capabilities","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapabilities\u002Findex",[676],{"title":672,"path":673,"stem":674},{"title":678,"path":679,"stem":680,"children":681},"Capability reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcapability-reference\u002Findex",[682],{"title":678,"path":679,"stem":680},{"title":684,"path":685,"stem":686,"children":687},"CRUD","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fcrud\u002Findex",[688],{"title":684,"path":685,"stem":686},{"title":234,"path":690,"stem":691,"children":692},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ferrors\u002Findex",[693],{"title":234,"path":690,"stem":691},{"title":695,"path":696,"stem":697,"children":698},"Overriding a capability","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability","docs\u002Fstudios\u002Fapps\u002Fapi\u002Foverriding-a-capability\u002Findex",[699],{"title":695,"path":696,"stem":697},{"title":701,"path":702,"stem":703,"children":704},"Pagination and filtering","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpagination-and-filtering\u002Findex",[705],{"title":701,"path":702,"stem":703},{"title":707,"path":708,"stem":709,"children":710},"Published OpenAPI","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi","docs\u002Fstudios\u002Fapps\u002Fapi\u002Fpublished-openapi\u002Findex",[711],{"title":707,"path":708,"stem":709},{"title":713,"path":714,"stem":715,"children":716},"The router","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter","docs\u002Fstudios\u002Fapps\u002Fapi\u002Frouter\u002Findex",[717],{"title":713,"path":714,"stem":715},{"title":719,"path":720,"stem":721,"children":722},"Tags","\u002Fdocs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags","docs\u002Fstudios\u002Fapps\u002Fapi\u002Ftags\u002Findex",[723],{"title":719,"path":720,"stem":721},{"title":725,"path":726,"stem":727,"children":728,"icon":560},"Data model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Findex",[729,730,736,742,748,754,760,766,772,778,783],{"title":725,"path":726,"stem":727,"icon":560},{"title":731,"path":732,"stem":733,"children":734},"Adapters","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fadapters\u002Findex",[735],{"title":731,"path":732,"stem":733},{"title":737,"path":738,"stem":739,"children":740},"Column types","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcolumn-types\u002Findex",[741],{"title":737,"path":738,"stem":739},{"title":743,"path":744,"stem":745,"children":746},"Cross-app lookups","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fcross-app-lookups\u002Findex",[747],{"title":743,"path":744,"stem":745},{"title":749,"path":750,"stem":751,"children":752},"Migrations","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fmigrations\u002Findex",[753],{"title":749,"path":750,"stem":751},{"title":755,"path":756,"stem":757,"children":758},"Projections","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fprojections\u002Findex",[759],{"title":755,"path":756,"stem":757},{"title":761,"path":762,"stem":763,"children":764},"Relationships","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Frelationships\u002Findex",[765],{"title":761,"path":762,"stem":763},{"title":767,"path":768,"stem":769,"children":770},"Schema reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fschema-reference\u002Findex",[771],{"title":767,"path":768,"stem":769},{"title":773,"path":774,"stem":775,"children":776},"Scoping","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Fscoping\u002Findex",[777],{"title":773,"path":774,"stem":775},{"title":481,"path":779,"stem":780,"children":781},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftenant-isolation\u002Findex",[782],{"title":481,"path":779,"stem":780},{"title":784,"path":785,"stem":786,"children":787},"The typed client","\u002Fdocs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client","docs\u002Fstudios\u002Fapps\u002Fdata-model\u002Ftyped-client\u002Findex",[788],{"title":784,"path":785,"stem":786},{"title":790,"path":791,"stem":792,"children":793},"Getting started","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Findex",[794,795,801],{"title":790,"path":791,"stem":792},{"title":796,"path":797,"stem":798,"children":799},"App model","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fapp-model\u002Findex",[800],{"title":796,"path":797,"stem":798},{"title":802,"path":803,"stem":804,"children":805},"App isolation","\u002Fdocs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation","docs\u002Fstudios\u002Fapps\u002Fgetting-started\u002Fisolation\u002Findex",[806],{"title":802,"path":803,"stem":804},{"title":808,"path":809,"stem":810,"children":811,"icon":813},"Platform services","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Findex",[812,814,820,826,832,838,844,850,856,862,868],{"title":808,"path":809,"stem":810,"icon":813},"i-lucide-boxes",{"title":815,"path":816,"stem":817,"children":818},"Entity access","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fentity-access\u002Findex",[819],{"title":815,"path":816,"stem":817},{"title":821,"path":822,"stem":823,"children":824},"Events you emit","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-emit\u002Findex",[825],{"title":821,"path":822,"stem":823},{"title":827,"path":828,"stem":829,"children":830},"Events you receive","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fevents-you-receive\u002Findex",[831],{"title":827,"path":828,"stem":829},{"title":833,"path":834,"stem":835,"children":836},"Not yet proven","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fnot-yet-proven\u002Findex",[837],{"title":833,"path":834,"stem":835},{"title":839,"path":840,"stem":841,"children":842},"Outbound HTTP","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Foutbound-http\u002Findex",[843],{"title":839,"path":840,"stem":841},{"title":845,"path":846,"stem":847,"children":848},"Permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fpermissions\u002Findex",[849],{"title":845,"path":846,"stem":847},{"title":851,"path":852,"stem":853,"children":854},"Person permissions","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fperson-permissions\u002Findex",[855],{"title":851,"path":852,"stem":853},{"title":857,"path":858,"stem":859,"children":860},"Scheduled work","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Fscheduled-work\u002Findex",[861],{"title":857,"path":858,"stem":859},{"title":863,"path":864,"stem":865,"children":866},"Tenant identity","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftenant-identity\u002Findex",[867],{"title":863,"path":864,"stem":865},{"title":869,"path":870,"stem":871,"children":872},"Tracing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing","docs\u002Fstudios\u002Fapps\u002Fplatform-services\u002Ftracing\u002Findex",[873],{"title":869,"path":870,"stem":871},{"title":875,"path":876,"stem":877,"children":878,"icon":880},"Ship and operate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Findex",[879,881,887,893,899,905,911,917,923,929,935,941,947,953],{"title":875,"path":876,"stem":877,"icon":880},"i-lucide-rocket",{"title":882,"path":883,"stem":884,"children":885},"Billing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fbilling\u002Findex",[886],{"title":882,"path":883,"stem":884},{"title":888,"path":889,"stem":890,"children":891},"Consent","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fconsent\u002Findex",[892],{"title":888,"path":889,"stem":890},{"title":894,"path":895,"stem":896,"children":897},"Dependencies","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdependencies\u002Findex",[898],{"title":894,"path":895,"stem":896},{"title":900,"path":901,"stem":902,"children":903},"Deploying","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fdeploying\u002Findex",[904],{"title":900,"path":901,"stem":902},{"title":906,"path":907,"stem":908,"children":909},"Manifest reference","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fmanifest-reference\u002Findex",[910],{"title":906,"path":907,"stem":908},{"title":912,"path":913,"stem":914,"children":915},"Operating","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Foperating\u002Findex",[916],{"title":912,"path":913,"stem":914},{"title":918,"path":919,"stem":920,"children":921},"Pairing a frontend","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpairing-a-frontend\u002Findex",[922],{"title":918,"path":919,"stem":920},{"title":924,"path":925,"stem":926,"children":927},"Private or Marketplace","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fprivate-vs-marketplace\u002Findex",[928],{"title":924,"path":925,"stem":926},{"title":930,"path":931,"stem":932,"children":933},"Publish and install","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fpublish-and-install\u002Findex",[934],{"title":930,"path":931,"stem":932},{"title":936,"path":937,"stem":938,"children":939},"Testing","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Ftesting\u002Findex",[940],{"title":936,"path":937,"stem":938},{"title":942,"path":943,"stem":944,"children":945},"Validate","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fvalidate\u002Findex",[946],{"title":942,"path":943,"stem":944},{"title":948,"path":949,"stem":950,"children":951},"Verifying live","\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fverifying-live\u002Findex",[952],{"title":948,"path":949,"stem":950},{"title":209,"path":954,"stem":955,"children":956},"\u002Fdocs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning","docs\u002Fstudios\u002Fapps\u002Fship-and-operate\u002Fversioning\u002Findex",[957],{"title":209,"path":954,"stem":955},{"title":959,"path":960,"stem":961,"children":962},"Commerce Studio","\u002Fdocs\u002Fstudios\u002Fcommerce","docs\u002Fstudios\u002Fcommerce\u002Findex",[963,964,1036,1090,1133,1138,1192],{"title":959,"path":960,"stem":961},{"title":965,"path":966,"stem":967,"children":968,"icon":970},"Build an app","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Findex",[969,971,977,983,989,995,1001,1007,1013,1019,1025,1030],{"title":965,"path":966,"stem":967,"icon":970},"i-lucide-puzzle",{"title":972,"path":973,"stem":974,"children":975},"Actions and writes","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Factions-and-writes\u002Findex",[976],{"title":972,"path":973,"stem":974},{"title":978,"path":979,"stem":980,"children":981},"cockpit.json reference","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fcockpit-json-reference\u002Findex",[982],{"title":978,"path":979,"stem":980},{"title":984,"path":985,"stem":986,"children":987},"Detail views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fdetail-views\u002Findex",[988],{"title":984,"path":985,"stem":986},{"title":990,"path":991,"stem":992,"children":993},"Forms","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fforms\u002Findex",[994],{"title":990,"path":991,"stem":992},{"title":996,"path":997,"stem":998,"children":999},"From manifest to installed","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Ffrom-manifest-to-installed\u002Findex",[1000],{"title":996,"path":997,"stem":998},{"title":1002,"path":1003,"stem":1004,"children":1005},"How it renders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fhow-it-renders\u002Findex",[1006],{"title":1002,"path":1003,"stem":1004},{"title":1008,"path":1009,"stem":1010,"children":1011},"List views","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Flist-views\u002Findex",[1012],{"title":1008,"path":1009,"stem":1010},{"title":1014,"path":1015,"stem":1016,"children":1017},"Navigation","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fnavigation\u002Findex",[1018],{"title":1014,"path":1015,"stem":1016},{"title":1020,"path":1021,"stem":1022,"children":1023},"Permissions and scope","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpermissions-and-scope\u002Findex",[1024],{"title":1020,"path":1021,"stem":1022},{"title":630,"path":1026,"stem":1027,"children":1028},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fpreview-locally\u002Findex",[1029],{"title":630,"path":1026,"stem":1027},{"title":1031,"path":1032,"stem":1033,"children":1034},"Widgets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets","docs\u002Fstudios\u002Fcommerce\u002Fbuild-an-app\u002Fwidgets\u002Findex",[1035],{"title":1031,"path":1032,"stem":1033},{"title":1037,"path":1038,"stem":1039,"children":1040,"icon":1042},"Catalog","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Findex",[1041,1043,1049,1055,1061,1067,1072,1078,1084],{"title":1037,"path":1038,"stem":1039,"icon":1042},"i-lucide-package",{"title":1044,"path":1045,"stem":1046,"children":1047},"Assets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassets\u002Findex",[1048],{"title":1044,"path":1045,"stem":1046},{"title":1050,"path":1051,"stem":1052,"children":1053},"Associations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fassociations\u002Findex",[1054],{"title":1050,"path":1051,"stem":1052},{"title":1056,"path":1057,"stem":1058,"children":1059},"Categories","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcategories\u002Findex",[1060],{"title":1056,"path":1057,"stem":1058},{"title":1062,"path":1063,"stem":1064,"children":1065},"Completeness","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fcompleteness\u002Findex",[1066],{"title":1062,"path":1063,"stem":1064},{"title":725,"path":1068,"stem":1069,"children":1070},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fdata-model\u002Findex",[1071],{"title":725,"path":1068,"stem":1069},{"title":1073,"path":1074,"stem":1075,"children":1076},"Import and export","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fimport-and-export\u002Findex",[1077],{"title":1073,"path":1074,"stem":1075},{"title":1079,"path":1080,"stem":1081,"children":1082},"Products","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Fproducts\u002Findex",[1083],{"title":1079,"path":1080,"stem":1081},{"title":1085,"path":1086,"stem":1087,"children":1088},"References","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences","docs\u002Fstudios\u002Fcommerce\u002Fcatalog\u002Freferences\u002Findex",[1089],{"title":1085,"path":1086,"stem":1087},{"title":1091,"path":1092,"stem":1093,"children":1094,"icon":1096},"Customers","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Findex",[1095,1097,1103,1109,1115,1121,1127],{"title":1091,"path":1092,"stem":1093,"icon":1096},"i-lucide-building-2",{"title":1098,"path":1099,"stem":1100,"children":1101},"Contacts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fcontacts\u002Findex",[1102],{"title":1098,"path":1099,"stem":1100},{"title":1104,"path":1105,"stem":1106,"children":1107},"Organizations","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Forganizations\u002Findex",[1108],{"title":1104,"path":1105,"stem":1106},{"title":1110,"path":1111,"stem":1112,"children":1113},"Roles and permissions","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Froles-and-permissions\u002Findex",[1114],{"title":1110,"path":1111,"stem":1112},{"title":1116,"path":1117,"stem":1118,"children":1119},"Segments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fsegments\u002Findex",[1120],{"title":1116,"path":1117,"stem":1118},{"title":1122,"path":1123,"stem":1124,"children":1125},"Storefront accounts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fstorefront-accounts\u002Findex",[1126],{"title":1122,"path":1123,"stem":1124},{"title":1128,"path":1129,"stem":1130,"children":1131},"Value lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists","docs\u002Fstudios\u002Fcommerce\u002Fcustomers\u002Fvalue-lists\u002Findex",[1132],{"title":1128,"path":1129,"stem":1130},{"title":790,"path":1134,"stem":1135,"children":1136,"icon":880},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fgetting-started","docs\u002Fstudios\u002Fcommerce\u002Fgetting-started\u002Findex",[1137],{"title":790,"path":1134,"stem":1135,"icon":880},{"title":1139,"path":1140,"stem":1141,"children":1142,"icon":1144},"Markets and pricing","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Findex",[1143,1145,1151,1157,1163,1169,1175,1181,1186],{"title":1139,"path":1140,"stem":1141,"icon":1144},"i-lucide-globe",{"title":1146,"path":1147,"stem":1148,"children":1149},"Carriers and tracking","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fcarriers-and-tracking\u002Findex",[1150],{"title":1146,"path":1147,"stem":1148},{"title":1152,"path":1153,"stem":1154,"children":1155},"Channels","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fchannels\u002Findex",[1156],{"title":1152,"path":1153,"stem":1154},{"title":1158,"path":1159,"stem":1160,"children":1161},"Markets","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fmarkets\u002Findex",[1162],{"title":1158,"path":1159,"stem":1160},{"title":1164,"path":1165,"stem":1166,"children":1167},"Payment lifecycle","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-lifecycle\u002Findex",[1168],{"title":1164,"path":1165,"stem":1166},{"title":1170,"path":1171,"stem":1172,"children":1173},"Payment methods","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fpayment-methods\u002Findex",[1174],{"title":1170,"path":1171,"stem":1172},{"title":1176,"path":1177,"stem":1178,"children":1179},"Price lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fprice-lists\u002Findex",[1180],{"title":1176,"path":1177,"stem":1178},{"title":642,"path":1182,"stem":1183,"children":1184},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fsettings\u002Findex",[1185],{"title":642,"path":1182,"stem":1183},{"title":1187,"path":1188,"stem":1189,"children":1190},"Shipping rates","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates","docs\u002Fstudios\u002Fcommerce\u002Fmarkets-and-pricing\u002Fshipping-rates\u002Findex",[1191],{"title":1187,"path":1188,"stem":1189},{"title":1193,"path":1194,"stem":1195,"children":1196,"icon":1198},"Orders","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Findex",[1197,1199,1205,1211,1217,1223,1228,1234],{"title":1193,"path":1194,"stem":1195,"icon":1198},"i-lucide-receipt-text",{"title":1200,"path":1201,"stem":1202,"children":1203},"Carts","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fcarts\u002Findex",[1204],{"title":1200,"path":1201,"stem":1202},{"title":1206,"path":1207,"stem":1208,"children":1209},"Events and comments","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fevents-and-comments\u002Findex",[1210],{"title":1206,"path":1207,"stem":1208},{"title":1212,"path":1213,"stem":1214,"children":1215},"Number ranges","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fnumber-ranges\u002Findex",[1216],{"title":1212,"path":1213,"stem":1214},{"title":1218,"path":1219,"stem":1220,"children":1221},"Order lists","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forder-lists\u002Findex",[1222],{"title":1218,"path":1219,"stem":1220},{"title":1193,"path":1224,"stem":1225,"children":1226},"\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Forders\u002Findex",[1227],{"title":1193,"path":1224,"stem":1225},{"title":1229,"path":1230,"stem":1231,"children":1232},"Returns","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Freturns\u002Findex",[1233],{"title":1229,"path":1230,"stem":1231},{"title":1235,"path":1236,"stem":1237,"children":1238},"Stock","\u002Fdocs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock","docs\u002Fstudios\u002Fcommerce\u002Forders\u002Fstock\u002Findex",[1239],{"title":1235,"path":1236,"stem":1237},{"title":1241,"path":1242,"stem":1243,"children":1244},"Integration Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio","docs\u002Fstudios\u002Fintegration-studio\u002Findex",[1245,1246,1283,1320,1350,1355,1385],{"title":1241,"path":1242,"stem":1243},{"title":1247,"path":1248,"stem":1249,"children":1250,"icon":1252},"Build the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Findex",[1251,1253,1259,1265,1271,1277],{"title":1247,"path":1248,"stem":1249,"icon":1252},"i-lucide-workflow",{"title":1254,"path":1255,"stem":1256,"children":1257},"Expressions","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fexpressions\u002Findex",[1258],{"title":1254,"path":1255,"stem":1256},{"title":1260,"path":1261,"stem":1262,"children":1263},"Node catalog","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-catalog\u002Findex",[1264],{"title":1260,"path":1261,"stem":1262},{"title":1266,"path":1267,"stem":1268,"children":1269},"Node configuration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fnode-configuration\u002Findex",[1270],{"title":1266,"path":1267,"stem":1268},{"title":1272,"path":1273,"stem":1274,"children":1275},"Templates","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Ftemplates\u002Findex",[1276],{"title":1272,"path":1273,"stem":1274},{"title":1278,"path":1279,"stem":1280,"children":1281},"The workflow document","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model","docs\u002Fstudios\u002Fintegration-studio\u002Fbuild\u002Fworkflow-model\u002Findex",[1282],{"title":1278,"path":1279,"stem":1280},{"title":1284,"path":1285,"stem":1286,"children":1287,"icon":1289},"Connect the systems","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Findex",[1288,1290,1296,1302,1308,1314],{"title":1284,"path":1285,"stem":1286,"icon":1289},"i-lucide-key-round",{"title":1291,"path":1292,"stem":1293,"children":1294},"Credentials","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fcredentials\u002Findex",[1295],{"title":1291,"path":1292,"stem":1293},{"title":1297,"path":1298,"stem":1299,"children":1300},"File transfer","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Ffiles\u002Findex",[1301],{"title":1297,"path":1298,"stem":1299},{"title":1303,"path":1304,"stem":1305,"children":1306},"OAuth","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Foauth\u002Findex",[1307],{"title":1303,"path":1304,"stem":1305},{"title":1309,"path":1310,"stem":1311,"children":1312},"Reaching Revenue Cloud","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Freaching-revenue-cloud\u002Findex",[1313],{"title":1309,"path":1310,"stem":1311},{"title":1315,"path":1316,"stem":1317,"children":1318},"Secrets","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets","docs\u002Fstudios\u002Fintegration-studio\u002Fconnect\u002Fsecrets\u002Findex",[1319],{"title":1315,"path":1316,"stem":1317},{"title":1321,"path":1322,"stem":1323,"children":1324,"icon":1042},"Extend the Studio","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Findex",[1325,1326,1332,1338,1344],{"title":1321,"path":1322,"stem":1323,"icon":1042},{"title":1327,"path":1328,"stem":1329,"children":1330},"Custom nodes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fcustom-nodes\u002Findex",[1331],{"title":1327,"path":1328,"stem":1329},{"title":1333,"path":1334,"stem":1335,"children":1336},"Dynamic behaviour","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fdynamic-behaviour\u002Findex",[1337],{"title":1333,"path":1334,"stem":1335},{"title":1339,"path":1340,"stem":1341,"children":1342},"Package manifest","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fpackage-manifest\u002Findex",[1343],{"title":1339,"path":1340,"stem":1341},{"title":1345,"path":1346,"stem":1347,"children":1348},"Registration","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration","docs\u002Fstudios\u002Fintegration-studio\u002Fextend\u002Fregistration\u002Findex",[1349],{"title":1345,"path":1346,"stem":1347},{"title":790,"path":1351,"stem":1352,"children":1353,"icon":880},"\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started","docs\u002Fstudios\u002Fintegration-studio\u002Fgetting-started\u002Findex",[1354],{"title":790,"path":1351,"stem":1352,"icon":880},{"title":1356,"path":1357,"stem":1358,"children":1359,"icon":135},"Run, watch, recover","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Findex",[1360,1361,1367,1373,1379],{"title":1356,"path":1357,"stem":1358,"icon":135},{"title":1362,"path":1363,"stem":1364,"children":1365},"Missed runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fdead-letters\u002Findex",[1366],{"title":1362,"path":1363,"stem":1364},{"title":1368,"path":1369,"stem":1370,"children":1371},"Failure handling","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Ffailure-handling\u002Findex",[1372],{"title":1368,"path":1369,"stem":1370},{"title":1374,"path":1375,"stem":1376,"children":1377},"Revisions and audit","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Frevisions-and-audit\u002Findex",[1378],{"title":1374,"path":1375,"stem":1376},{"title":1380,"path":1381,"stem":1382,"children":1383},"Runs","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns","docs\u002Fstudios\u002Fintegration-studio\u002Foperate\u002Fruns\u002Findex",[1384],{"title":1380,"path":1381,"stem":1382},{"title":1386,"path":1387,"stem":1388,"children":1389,"icon":1391},"Start the workflow","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Findex",[1390,1392,1398,1404,1410,1416],{"title":1386,"path":1387,"stem":1388,"icon":1391},"i-lucide-zap",{"title":1393,"path":1394,"stem":1395,"children":1396},"Event triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fevent-triggers\u002Findex",[1397],{"title":1393,"path":1394,"stem":1395},{"title":1399,"path":1400,"stem":1401,"children":1402},"Execution modes","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fexecution-modes\u002Findex",[1403],{"title":1399,"path":1400,"stem":1401},{"title":1405,"path":1406,"stem":1407,"children":1408},"Schedule triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fschedule-triggers\u002Findex",[1409],{"title":1405,"path":1406,"stem":1407},{"title":1411,"path":1412,"stem":1413,"children":1414},"Triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Ftriggers\u002Findex",[1415],{"title":1411,"path":1412,"stem":1413},{"title":1417,"path":1418,"stem":1419,"children":1420},"Webhook triggers","\u002Fdocs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers","docs\u002Fstudios\u002Fintegration-studio\u002Fstart\u002Fwebhook-triggers\u002Findex",[1421],{"title":1417,"path":1418,"stem":1419},{"title":1423,"path":1424,"stem":1425,"children":1426},"Experience Studio","\u002Fdocs\u002Fstudios\u002Fsites","docs\u002Fstudios\u002Fsites\u002Findex",[1427,1428,1477,1524,1650,1656,1698],{"title":1423,"path":1424,"stem":1425},{"title":1429,"path":1430,"stem":1431,"children":1432,"icon":1434},"Compose pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Findex",[1433,1435,1441,1447,1453,1459,1465,1471],{"title":1429,"path":1430,"stem":1431,"icon":1434},"i-lucide-layout-template",{"title":1436,"path":1437,"stem":1438,"children":1439},"Block catalog","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-catalog\u002Findex",[1440],{"title":1436,"path":1437,"stem":1438},{"title":1442,"path":1443,"stem":1444,"children":1445},"Block options","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fblock-options\u002Findex",[1446],{"title":1442,"path":1443,"stem":1444},{"title":1448,"path":1449,"stem":1450,"children":1451},"How a block works","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fhow-a-block-works\u002Findex",[1452],{"title":1448,"path":1449,"stem":1450},{"title":1454,"path":1455,"stem":1456,"children":1457},"Inline editing","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Finline-editing\u002Findex",[1458],{"title":1454,"path":1455,"stem":1456},{"title":1460,"path":1461,"stem":1462,"children":1463},"Reading published pages","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Freading-pages\u002Findex",[1464],{"title":1460,"path":1461,"stem":1462},{"title":1466,"path":1467,"stem":1468,"children":1469},"Registering blocks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fregistering\u002Findex",[1470],{"title":1466,"path":1467,"stem":1468},{"title":1472,"path":1473,"stem":1474,"children":1475},"Shells and fields","\u002Fdocs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields","docs\u002Fstudios\u002Fsites\u002Fblocks\u002Fshells-and-fields\u002Findex",[1476],{"title":1472,"path":1473,"stem":1474},{"title":1478,"path":1479,"stem":1480,"children":1481,"icon":1483},"Connect data","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata","docs\u002Fstudios\u002Fsites\u002Fdata\u002Findex",[1482,1484,1489,1495,1501,1506,1512,1518],{"title":1478,"path":1479,"stem":1480,"icon":1483},"i-lucide-plug",{"title":264,"path":1485,"stem":1486,"children":1487},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fauthentication\u002Findex",[1488],{"title":264,"path":1485,"stem":1486},{"title":1490,"path":1491,"stem":1492,"children":1493},"The BFF pattern","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fbff-pattern\u002Findex",[1494],{"title":1490,"path":1491,"stem":1492},{"title":1496,"path":1497,"stem":1498,"children":1499},"Catalog, cart, checkout","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fcatalog-cart-checkout\u002Findex",[1500],{"title":1496,"path":1497,"stem":1498},{"title":990,"path":1502,"stem":1503,"children":1504},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fforms\u002Findex",[1505],{"title":990,"path":1502,"stem":1503},{"title":1507,"path":1508,"stem":1509,"children":1510},"Media and assets","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmedia\u002Findex",[1511],{"title":1507,"path":1508,"stem":1509},{"title":1513,"path":1514,"stem":1515,"children":1516},"Multi-tenant themes","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fmulti-tenant-themes\u002Findex",[1517],{"title":1513,"path":1514,"stem":1515},{"title":1519,"path":1520,"stem":1521,"children":1522},"Search","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch","docs\u002Fstudios\u002Fsites\u002Fdata\u002Fsearch\u002Findex",[1523],{"title":1519,"path":1520,"stem":1521},{"title":1525,"path":1526,"stem":1527,"children":1528,"icon":880},"Build and deploy","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Findex",[1529,1530,1536,1542,1548,1554,1560,1566,1644],{"title":1525,"path":1526,"stem":1527,"icon":880},{"title":1531,"path":1532,"stem":1533,"children":1534},"Build configuration","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fbuild-configuration\u002Findex",[1535],{"title":1531,"path":1532,"stem":1533},{"title":1537,"path":1538,"stem":1539,"children":1540},"Compute specifications","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fcompute-specifications\u002Findex",[1541],{"title":1537,"path":1538,"stem":1539},{"title":1543,"path":1544,"stem":1545,"children":1546},"Environment variables","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fenvironment-variables\u002Findex",[1547],{"title":1543,"path":1544,"stem":1545},{"title":1549,"path":1550,"stem":1551,"children":1552},"From Git","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-git\u002Findex",[1553],{"title":1549,"path":1550,"stem":1551},{"title":1555,"path":1556,"stem":1557,"children":1558},"From the CLI","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Ffrom-the-cli\u002Findex",[1559],{"title":1555,"path":1556,"stem":1557},{"title":1561,"path":1562,"stem":1563,"children":1564},"Manually","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fmanually\u002Findex",[1565],{"title":1561,"path":1562,"stem":1563},{"title":1567,"path":1568,"stem":1569,"children":1570},"Quick-starts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Findex",[1571,1572,1578,1584,1590,1596,1602,1608,1614,1620,1626,1632,1638],{"title":1567,"path":1568,"stem":1569},{"title":1573,"path":1574,"stem":1575,"children":1576},"Deploy an Angular app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fangular\u002Findex",[1577],{"title":1573,"path":1574,"stem":1575},{"title":1579,"path":1580,"stem":1581,"children":1582},"Deploy a Astro app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fastro\u002Findex",[1583],{"title":1579,"path":1580,"stem":1581},{"title":1585,"path":1586,"stem":1587,"children":1588},"Deploy a Flutter Web app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fflutter\u002Findex",[1589],{"title":1585,"path":1586,"stem":1587},{"title":1591,"path":1592,"stem":1593,"children":1594},"Deploy a Next.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnextjs\u002Findex",[1595],{"title":1591,"path":1592,"stem":1593},{"title":1597,"path":1598,"stem":1599,"children":1600},"Deploy a Nuxt app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fnuxt\u002Findex",[1601],{"title":1597,"path":1598,"stem":1599},{"title":1603,"path":1604,"stem":1605,"children":1606},"Deploy a React Native app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact-native\u002Findex",[1607],{"title":1603,"path":1604,"stem":1605},{"title":1609,"path":1610,"stem":1611,"children":1612},"Deploy a React app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Freact\u002Findex",[1613],{"title":1609,"path":1610,"stem":1611},{"title":1615,"path":1616,"stem":1617,"children":1618},"Deploy a Remix app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fremix\u002Findex",[1619],{"title":1615,"path":1616,"stem":1617},{"title":1621,"path":1622,"stem":1623,"children":1624},"Deploy a SvelteKit app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fsveltekit\u002Findex",[1625],{"title":1621,"path":1622,"stem":1623},{"title":1627,"path":1628,"stem":1629,"children":1630},"Deploy a TanStack Start app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Ftanstack-start\u002Findex",[1631],{"title":1627,"path":1628,"stem":1629},{"title":1633,"path":1634,"stem":1635,"children":1636},"Deploy a Vanilla JS app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvanilla\u002Findex",[1637],{"title":1633,"path":1634,"stem":1635},{"title":1639,"path":1640,"stem":1641,"children":1642},"Deploy a Vue.js app to revenexx Storefronts","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fquick-starts\u002Fvue\u002Findex",[1643],{"title":1639,"path":1640,"stem":1641},{"title":1645,"path":1646,"stem":1647,"children":1648},"Starting points","\u002Fdocs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points","docs\u002Fstudios\u002Fsites\u002Fdeploy\u002Fstarting-points\u002Findex",[1649],{"title":1645,"path":1646,"stem":1647},{"title":790,"path":1651,"stem":1652,"children":1653,"icon":1655},"\u002Fdocs\u002Fstudios\u002Fsites\u002Fgetting-started","docs\u002Fstudios\u002Fsites\u002Fgetting-started\u002Findex",[1654],{"title":790,"path":1651,"stem":1652,"icon":1655},"i-lucide-terminal",{"title":1657,"path":1658,"stem":1659,"children":1660,"icon":1144},"Production","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Findex",[1661,1662,1668,1674,1680,1686,1692],{"title":1657,"path":1658,"stem":1659,"icon":1144},{"title":1663,"path":1664,"stem":1665,"children":1666},"Deployments","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdeployments\u002Findex",[1667],{"title":1663,"path":1664,"stem":1665},{"title":1669,"path":1670,"stem":1671,"children":1672},"Domains","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fdomains\u002Findex",[1673],{"title":1669,"path":1670,"stem":1671},{"title":1675,"path":1676,"stem":1677,"children":1678},"Instant rollbacks","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Finstant-rollbacks\u002Findex",[1679],{"title":1675,"path":1676,"stem":1677},{"title":1681,"path":1682,"stem":1683,"children":1684},"Logs","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Flogs\u002Findex",[1685],{"title":1681,"path":1682,"stem":1683},{"title":1687,"path":1688,"stem":1689,"children":1690},"Previews","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpreviews\u002Findex",[1691],{"title":1687,"path":1688,"stem":1689},{"title":1693,"path":1694,"stem":1695,"children":1696},"Publishing a theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme","docs\u002Fstudios\u002Fsites\u002Fproduction\u002Fpublishing-a-theme\u002Findex",[1697],{"title":1693,"path":1694,"stem":1695},{"title":1699,"path":1700,"stem":1701,"children":1702,"icon":1704},"Build the theme","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Findex",[1703,1705,1711,1717,1723,1729,1735,1741,1747,1765],{"title":1699,"path":1700,"stem":1701,"icon":1704},"i-lucide-palette",{"title":1706,"path":1707,"stem":1708,"children":1709},"Theme anatomy","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fanatomy\u002Findex",[1710],{"title":1706,"path":1707,"stem":1708},{"title":1712,"path":1713,"stem":1714,"children":1715},"Design tokens","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fdesign-tokens\u002Findex",[1716],{"title":1712,"path":1713,"stem":1714},{"title":1718,"path":1719,"stem":1720,"children":1721},"Frameworks","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fframeworks\u002Findex",[1722],{"title":1718,"path":1719,"stem":1720},{"title":1724,"path":1725,"stem":1726,"children":1727},"The layer chain","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flayer-chain\u002Findex",[1728],{"title":1724,"path":1725,"stem":1726},{"title":1730,"path":1731,"stem":1732,"children":1733},"Local development","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Flocal-development\u002Findex",[1734],{"title":1730,"path":1731,"stem":1732},{"title":1736,"path":1737,"stem":1738,"children":1739},"Modules and plugins","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fmodules-and-plugins\u002Findex",[1740],{"title":1736,"path":1737,"stem":1738},{"title":1742,"path":1743,"stem":1744,"children":1745},"Overriding","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Foverriding\u002Findex",[1746],{"title":1742,"path":1743,"stem":1744},{"title":1748,"path":1749,"stem":1750,"children":1751},"Rendering","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Findex",[1752,1753,1759],{"title":1748,"path":1749,"stem":1750},{"title":1754,"path":1755,"stem":1756,"children":1757},"SSR","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fssr\u002Findex",[1758],{"title":1754,"path":1755,"stem":1756},{"title":1760,"path":1761,"stem":1762,"children":1763},"Static","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Frendering\u002Fstatic\u002Findex",[1764],{"title":1760,"path":1761,"stem":1762},{"title":1766,"path":1767,"stem":1768,"children":1769},"Service modes","\u002Fdocs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes","docs\u002Fstudios\u002Fsites\u002Ftheme\u002Fservice-modes\u002Findex",[1770],{"title":1766,"path":1767,"stem":1768},{"title":1772,"path":1773,"stem":1774,"children":1775},"Tools","\u002Fdocs\u002Ftools","docs\u002Ftools\u002Findex",[1776,1777,1784,1993],{"title":1772,"path":1773,"stem":1774},{"title":1778,"path":1779,"stem":1780,"children":1781,"icon":1783},"AI agents","\u002Fdocs\u002Ftools\u002Fai-agents","docs\u002Ftools\u002Fai-agents\u002Findex",[1782],{"title":1778,"path":1779,"stem":1780,"icon":1783},"i-lucide-shield-alert",{"title":1785,"path":1786,"stem":1787,"children":1788},"Command line","\u002Fdocs\u002Ftools\u002Fcommand-line","docs\u002Ftools\u002Fcommand-line\u002Findex",[1789,1790,1796,1801,1807,1813,1819,1825,1831,1951,1957,1963,1969,1975,1981,1987],{"title":1785,"path":1786,"stem":1787},{"title":1791,"path":1792,"stem":1793,"children":1794},"Aliases","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Faliases","docs\u002Ftools\u002Fcommand-line\u002Faliases\u002Findex",[1795],{"title":1791,"path":1792,"stem":1793},{"title":264,"path":1797,"stem":1798,"children":1799},"\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fauthentication","docs\u002Ftools\u002Fcommand-line\u002Fauthentication\u002Findex",[1800],{"title":264,"path":1797,"stem":1798},{"title":1802,"path":1803,"stem":1804,"children":1805},"Commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fcommands","docs\u002Ftools\u002Fcommand-line\u002Fcommands\u002Findex",[1806],{"title":1802,"path":1803,"stem":1804},{"title":1808,"path":1809,"stem":1810,"children":1811},"Installation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finstallation","docs\u002Ftools\u002Fcommand-line\u002Finstallation\u002Findex",[1812],{"title":1808,"path":1809,"stem":1810},{"title":1814,"path":1815,"stem":1816,"children":1817},"Interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Finteractive","docs\u002Ftools\u002Fcommand-line\u002Finteractive\u002Findex",[1818],{"title":1814,"path":1815,"stem":1816},{"title":1820,"path":1821,"stem":1822,"children":1823},"Non-interactive use","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fnon-interactive","docs\u002Ftools\u002Fcommand-line\u002Fnon-interactive\u002Findex",[1824],{"title":1820,"path":1821,"stem":1822},{"title":1826,"path":1827,"stem":1828,"children":1829},"Project configuration","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fproject-configuration","docs\u002Ftools\u002Fcommand-line\u002Fproject-configuration\u002Findex",[1830],{"title":1826,"path":1827,"stem":1828},{"title":1832,"path":1833,"stem":1834,"children":1835},"Command reference","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Findex",[1836,1837,1843,1849,1855,1861,1867,1873,1879,1885,1891,1897,1903,1909,1915,1921,1927,1933,1939,1945],{"title":1832,"path":1833,"stem":1834},{"title":1838,"path":1839,"stem":1840,"children":1841},"About commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fabout\u002Findex",[1842],{"title":1838,"path":1839,"stem":1840},{"title":1844,"path":1845,"stem":1846,"children":1847},"Apps commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fapps\u002Findex",[1848],{"title":1844,"path":1845,"stem":1846},{"title":1850,"path":1851,"stem":1852,"children":1853},"Carts commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcarts\u002Findex",[1854],{"title":1850,"path":1851,"stem":1852},{"title":1856,"path":1857,"stem":1858,"children":1859},"Channels commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fchannels\u002Findex",[1860],{"title":1856,"path":1857,"stem":1858},{"title":1862,"path":1863,"stem":1864,"children":1865},"Create commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcreate\u002Findex",[1866],{"title":1862,"path":1863,"stem":1864},{"title":1868,"path":1869,"stem":1870,"children":1871},"Customers commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fcustomers\u002Findex",[1872],{"title":1868,"path":1869,"stem":1870},{"title":1874,"path":1875,"stem":1876,"children":1877},"Deploy commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fdeploy\u002Findex",[1878],{"title":1874,"path":1875,"stem":1876},{"title":1880,"path":1881,"stem":1882,"children":1883},"Forms commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fforms\u002Findex",[1884],{"title":1880,"path":1881,"stem":1882},{"title":1886,"path":1887,"stem":1888,"children":1889},"Markets commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fmarkets\u002Findex",[1890],{"title":1886,"path":1887,"stem":1888},{"title":1892,"path":1893,"stem":1894,"children":1895},"Order lists commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forderlists\u002Findex",[1896],{"title":1892,"path":1893,"stem":1894},{"title":1898,"path":1899,"stem":1900,"children":1901},"Orders commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Forders\u002Findex",[1902],{"title":1898,"path":1899,"stem":1900},{"title":1904,"path":1905,"stem":1906,"children":1907},"Pages commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fpages\u002Findex",[1908],{"title":1904,"path":1905,"stem":1906},{"title":1910,"path":1911,"stem":1912,"children":1913},"Prices commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fprices\u002Findex",[1914],{"title":1910,"path":1911,"stem":1912},{"title":1916,"path":1917,"stem":1918,"children":1919},"Products commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fproducts\u002Findex",[1920],{"title":1916,"path":1917,"stem":1918},{"title":1922,"path":1923,"stem":1924,"children":1925},"Search commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsearch\u002Findex",[1926],{"title":1922,"path":1923,"stem":1924},{"title":1928,"path":1929,"stem":1930,"children":1931},"Settings commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsettings\u002Findex",[1932],{"title":1928,"path":1929,"stem":1930},{"title":1934,"path":1935,"stem":1936,"children":1937},"Sites commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fsites\u002Findex",[1938],{"title":1934,"path":1935,"stem":1936},{"title":1940,"path":1941,"stem":1942,"children":1943},"Skills commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fskills\u002Findex",[1944],{"title":1940,"path":1941,"stem":1942},{"title":1946,"path":1947,"stem":1948,"children":1949},"Storage commands","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage","docs\u002Ftools\u002Fcommand-line\u002Freference\u002Fstorage\u002Findex",[1950],{"title":1946,"path":1947,"stem":1948},{"title":1952,"path":1953,"stem":1954,"children":1955},"Interactive shell (REPL)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Frepl","docs\u002Ftools\u002Fcommand-line\u002Frepl\u002Findex",[1956],{"title":1952,"path":1953,"stem":1954},{"title":1958,"path":1959,"stem":1960,"children":1961},"Scaffolding","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscaffolding","docs\u002Ftools\u002Fcommand-line\u002Fscaffolding\u002Findex",[1962],{"title":1958,"path":1959,"stem":1960},{"title":1964,"path":1965,"stem":1966,"children":1967},"Scripting & output","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fscripting","docs\u002Ftools\u002Fcommand-line\u002Fscripting\u002Findex",[1968],{"title":1964,"path":1965,"stem":1966},{"title":1970,"path":1971,"stem":1972,"children":1973},"Skills","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fskills","docs\u002Ftools\u002Fcommand-line\u002Fskills\u002Findex",[1974],{"title":1970,"path":1971,"stem":1972},{"title":1976,"path":1977,"stem":1978,"children":1979},"Full-screen app (TUI)","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftui","docs\u002Ftools\u002Fcommand-line\u002Ftui\u002Findex",[1980],{"title":1976,"path":1977,"stem":1978},{"title":1982,"path":1983,"stem":1984,"children":1985},"Type generation","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Ftype-generation","docs\u002Ftools\u002Fcommand-line\u002Ftype-generation\u002Findex",[1986],{"title":1982,"path":1983,"stem":1984},{"title":1988,"path":1989,"stem":1990,"children":1991},"Background watchers","\u002Fdocs\u002Ftools\u002Fcommand-line\u002Fwatch","docs\u002Ftools\u002Fcommand-line\u002Fwatch\u002Findex",[1992],{"title":1988,"path":1989,"stem":1990},{"title":1994,"path":1995,"stem":1996,"children":1997},"Model Context Protocol","\u002Fdocs\u002Ftools\u002Fmcp","docs\u002Ftools\u002Fmcp\u002Findex",[1998,1999,2005,2011,2017,2023,2029,2035,2041],{"title":1994,"path":1995,"stem":1996},{"title":2000,"path":2001,"stem":2002,"children":2003},"revenexx docs MCP in Google Antigravity","\u002Fdocs\u002Ftools\u002Fmcp\u002Fantigravity","docs\u002Ftools\u002Fmcp\u002Fantigravity\u002Findex",[2004],{"title":2000,"path":2001,"stem":2002},{"title":2006,"path":2007,"stem":2008,"children":2009},"revenexx docs MCP in Claude Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-code","docs\u002Ftools\u002Fmcp\u002Fclaude-code\u002Findex",[2010],{"title":2006,"path":2007,"stem":2008},{"title":2012,"path":2013,"stem":2014,"children":2015},"revenexx docs MCP in Claude Desktop","\u002Fdocs\u002Ftools\u002Fmcp\u002Fclaude-desktop","docs\u002Ftools\u002Fmcp\u002Fclaude-desktop\u002Findex",[2016],{"title":2012,"path":2013,"stem":2014},{"title":2018,"path":2019,"stem":2020,"children":2021},"revenexx docs MCP in Cursor","\u002Fdocs\u002Ftools\u002Fmcp\u002Fcursor","docs\u002Ftools\u002Fmcp\u002Fcursor\u002Findex",[2022],{"title":2018,"path":2019,"stem":2020},{"title":2024,"path":2025,"stem":2026,"children":2027},"revenexx docs MCP in OpenCode","\u002Fdocs\u002Ftools\u002Fmcp\u002Fopencode","docs\u002Ftools\u002Fmcp\u002Fopencode\u002Findex",[2028],{"title":2024,"path":2025,"stem":2026},{"title":2030,"path":2031,"stem":2032,"children":2033},"revenexx docs MCP in VS Code","\u002Fdocs\u002Ftools\u002Fmcp\u002Fvscode","docs\u002Ftools\u002Fmcp\u002Fvscode\u002Findex",[2034],{"title":2030,"path":2031,"stem":2032},{"title":2036,"path":2037,"stem":2038,"children":2039},"revenexx docs MCP in Windsurf","\u002Fdocs\u002Ftools\u002Fmcp\u002Fwindsurf","docs\u002Ftools\u002Fmcp\u002Fwindsurf\u002Findex",[2040],{"title":2036,"path":2037,"stem":2038},{"title":2042,"path":2043,"stem":2044,"children":2045},"revenexx docs MCP in Zenflow","\u002Fdocs\u002Ftools\u002Fmcp\u002Fzenflow","docs\u002Ftools\u002Fmcp\u002Fzenflow\u002Findex",[2046],{"title":2042,"path":2043,"stem":2044},{"id":2048,"title":70,"body":2049,"description":4760,"extension":4761,"landing":4762,"links":4762,"meta":4763,"navigation":3026,"path":71,"seo":4765,"sitemap":4766,"stem":72,"__hash__":4767},"docs\u002Fdocs\u002Fgetting-started\u002Fquick-start\u002Findex.md",{"type":2050,"value":2051,"toc":4735},"minimark",[2052,2065,2086,2091,2096,2134,2140,2144,2165,2169,2179,2233,2237,2252,2264,2274,2302,2309,2321,2357,2364,2368,2392,2399,2402,2411,2439,2460,2464,2471,2933,2936,2989,2995,3002,4020,4061,4065,4071,4105,4147,4154,4158,4161,4169,4173,4188,4191,4204,4211,4215,4219,4226,4266,4273,4288,4292,4303,4341,4344,4471,4486,4499,4503,4506,4568,4594,4598,4706,4710,4731],[2053,2054,2055,2056,2060,2061,2064],"p",{},"This is the canonical first-app walkthrough. It takes you from an empty directory to a capability answering a real request at ",[2057,2058,2059],"code",{},"https:\u002F\u002Fapi.revenexx.com\u002Fv1"," — no hand-written files. You will read two of the generated files along the way, because they are the two you will spend the rest of your time in. If the vocabulary here is new — tenant, app, capability, Studio — ",[2062,2063,31],"a",{"href":32}," defines it on one page and takes five minutes.",[2053,2066,2067,2068,2070,2071,2075,2076,2080,2081,2085],{},"Budget about fifteen minutes with your account already in hand. The clock does not include signing up — during the soft launch that takes hours to days, so sort it out first (see ",[2062,2069,64],{"href":65},"). Before you start you need a revenexx account and a ",[2062,2072,2074],{"href":2073},"\u002Fdocs\u002Fgetting-started\u002Fglossary#tenants-and-data","tenant"," you may install an ",[2062,2077,2079],{"href":2078},"\u002Fdocs\u002Fgetting-started\u002Fglossary#app-model","app"," on, an ",[2062,2082,2084],{"href":2083},"\u002Fdocs\u002Fgetting-started\u002Fprerequisites#_3-api-key","API key"," to call your app in the last two steps, and Node.js 22 or newer to run the scaffolded app's install and tests.",[2087,2088,2090],"h2",{"id":2089},"_1-install-the-cli","1. Install the CLI",[2092,2093,2095],"h3",{"id":2094},"option-a-npm","Option A: npm",[2097,2098,2104],"pre",{"className":2099,"code":2100,"filename":2101,"language":2102,"meta":2103,"style":2103},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install -g @revenexx\u002Fcli\nrevenexx -v\n","Terminal","bash","",[2057,2105,2106,2125],{"__ignoreMap":2103},[2107,2108,2111,2115,2119,2122],"span",{"class":2109,"line":2110},"line",1,[2107,2112,2114],{"class":2113},"sBMFI","npm",[2107,2116,2118],{"class":2117},"sfazB"," install",[2107,2120,2121],{"class":2117}," -g",[2107,2123,2124],{"class":2117}," @revenexx\u002Fcli\n",[2107,2126,2128,2131],{"class":2109,"line":2127},2,[2107,2129,2130],{"class":2113},"revenexx",[2107,2132,2133],{"class":2117}," -v\n",[2053,2135,2136,2137,2139],{},"The package is public, so no registry configuration and no token are needed. See ",[2062,2138,1808],{"href":1809}," for every option, including Windows.",[2092,2141,2143],{"id":2142},"option-b-homebrew-macos-linux","Option B: Homebrew (macOS \u002F Linux)",[2097,2145,2147],{"className":2099,"code":2146,"filename":2101,"language":2102,"meta":2103,"style":2103},"brew install revenexx-sdks\u002Fcli\u002Frevenexx\nrevenexx -v\n",[2057,2148,2149,2159],{"__ignoreMap":2103},[2107,2150,2151,2154,2156],{"class":2109,"line":2110},[2107,2152,2153],{"class":2113},"brew",[2107,2155,2118],{"class":2117},[2107,2157,2158],{"class":2117}," revenexx-sdks\u002Fcli\u002Frevenexx\n",[2107,2160,2161,2163],{"class":2109,"line":2127},[2107,2162,2130],{"class":2113},[2107,2164,2133],{"class":2117},[2092,2166,2168],{"id":2167},"option-c-download-a-binary-any-platform","Option C: Download a binary (any platform)",[2053,2170,2171,2172,2178],{},"Grab the asset for your platform from the ",[2062,2173,2177],{"href":2174,"rel":2175},"https:\u002F\u002Fgithub.com\u002Frevenexx-sdks\u002Fcli\u002Freleases\u002Flatest",[2176],"nofollow","latest release"," — this is the route to use on Windows if you don't have npm:",[2097,2180,2182],{"className":2099,"code":2181,"filename":2101,"language":2102,"meta":2103,"style":2103},"curl -fsSL -o revenexx https:\u002F\u002Fgithub.com\u002Frevenexx-sdks\u002Fcli\u002Freleases\u002Flatest\u002Fdownload\u002Frevenexx-darwin-arm64\nchmod +x revenexx && sudo mv revenexx \u002Fusr\u002Flocal\u002Fbin\u002Frevenexx\nrevenexx -v\n",[2057,2183,2184,2201,2226],{"__ignoreMap":2103},[2107,2185,2186,2189,2192,2195,2198],{"class":2109,"line":2110},[2107,2187,2188],{"class":2113},"curl",[2107,2190,2191],{"class":2117}," -fsSL",[2107,2193,2194],{"class":2117}," -o",[2107,2196,2197],{"class":2117}," revenexx",[2107,2199,2200],{"class":2117}," https:\u002F\u002Fgithub.com\u002Frevenexx-sdks\u002Fcli\u002Freleases\u002Flatest\u002Fdownload\u002Frevenexx-darwin-arm64\n",[2107,2202,2203,2206,2209,2211,2215,2218,2221,2223],{"class":2109,"line":2127},[2107,2204,2205],{"class":2113},"chmod",[2107,2207,2208],{"class":2117}," +x",[2107,2210,2197],{"class":2117},[2107,2212,2214],{"class":2213},"sMK4o"," &&",[2107,2216,2217],{"class":2113}," sudo",[2107,2219,2220],{"class":2117}," mv",[2107,2222,2197],{"class":2117},[2107,2224,2225],{"class":2117}," \u002Fusr\u002Flocal\u002Fbin\u002Frevenexx\n",[2107,2227,2229,2231],{"class":2109,"line":2228},3,[2107,2230,2130],{"class":2113},[2107,2232,2133],{"class":2117},[2087,2234,2236],{"id":2235},"_2-sign-in","2. Sign in",[2053,2238,2239,2240,2243,2244,2247,2248,2251],{},"Run ",[2057,2241,2242],{},"login"," with no arguments. The CLI opens your browser, you sign in with ",[2062,2245,2246],{"href":265},"ID",", and your session is saved to ",[2057,2249,2250],{},"~\u002F.revenexx\u002Fprefs.json"," so later commands don't ask again.",[2097,2253,2255],{"className":2099,"code":2254,"filename":2101,"language":2102,"meta":2103,"style":2103},"revenexx login\n",[2057,2256,2257],{"__ignoreMap":2103},[2107,2258,2259,2261],{"class":2109,"line":2110},[2107,2260,2130],{"class":2113},[2107,2262,2263],{"class":2117}," login\n",[2053,2265,2266,2267,2269,2270,2273],{},"Then pick the tenant you're working in. The line printed after ",[2057,2268,2242],{}," names the tenants your account can access, and ",[2057,2271,2272],{},"revenexx tenants list"," shows them again at any time (the same slug appears in Cockpit's tenant switcher, top left):",[2097,2275,2277],{"className":2099,"code":2276,"filename":2101,"language":2102,"meta":2103,"style":2103},"revenexx tenants use \u003Cyour-tenant-slug>\n",[2057,2278,2279],{"__ignoreMap":2103},[2107,2280,2281,2283,2286,2289,2292,2295,2299],{"class":2109,"line":2110},[2107,2282,2130],{"class":2113},[2107,2284,2285],{"class":2117}," tenants",[2107,2287,2288],{"class":2117}," use",[2107,2290,2291],{"class":2213}," \u003C",[2107,2293,2294],{"class":2117},"your-tenant-slu",[2107,2296,2298],{"class":2297},"sTEyZ","g",[2107,2300,2301],{"class":2213},">\n",[2053,2303,2304,2305,2308],{},"There is no project file and no ",[2057,2306,2307],{},"init"," step — context comes from your login session, environment variables, and the active tenant.",[2053,2310,2311,2312,2316,2317,2320],{},"In CI there is no browser, so pass a gateway API key and the tenant directly. Create the key in Cockpit under your avatar menu → ",[2313,2314,2315],"strong",{},"Account"," → ",[2313,2318,2319],{},"API-Keys",":",[2097,2322,2325],{"className":2099,"code":2323,"filename":2324,"language":2102,"meta":2103,"style":2103},"revenexx login --token \"$REVENEXX_API_KEY\" --tenant \"$REVENEXX_TENANT\"\n","CI",[2057,2326,2327],{"__ignoreMap":2103},[2107,2328,2329,2331,2334,2337,2340,2343,2346,2349,2351,2354],{"class":2109,"line":2110},[2107,2330,2130],{"class":2113},[2107,2332,2333],{"class":2117}," login",[2107,2335,2336],{"class":2117}," --token",[2107,2338,2339],{"class":2213}," \"",[2107,2341,2342],{"class":2297},"$REVENEXX_API_KEY",[2107,2344,2345],{"class":2213},"\"",[2107,2347,2348],{"class":2117}," --tenant",[2107,2350,2339],{"class":2213},[2107,2352,2353],{"class":2297},"$REVENEXX_TENANT",[2107,2355,2356],{"class":2213},"\"\n",[2053,2358,2359,2360,2363],{},"A supplied key always wins over a stored browser session, so a pipeline never opens a browser. See ",[2062,2361,2362],{"href":1797},"CLI authentication"," for the full resolution order.",[2087,2365,2367],{"id":2366},"_3-scaffold-the-app","3. Scaffold the app",[2097,2369,2371],{"className":2099,"code":2370,"filename":2101,"language":2102,"meta":2103,"style":2103},"revenexx create app locations --entity locations\n",[2057,2372,2373],{"__ignoreMap":2103},[2107,2374,2375,2377,2380,2383,2386,2389],{"class":2109,"line":2110},[2107,2376,2130],{"class":2113},[2107,2378,2379],{"class":2117}," create",[2107,2381,2382],{"class":2117}," app",[2107,2384,2385],{"class":2117}," locations",[2107,2387,2388],{"class":2117}," --entity",[2107,2390,2391],{"class":2117}," locations\n",[2053,2393,2394,2395,2398],{},"One entity, plural snake_case. ",[2057,2396,2397],{},"--entity"," is repeatable or comma-separated.",[2053,2400,2401],{},"That writes the complete app contract and runs the codegen in-process:",[2097,2403,2409],{"className":2404,"code":2406,"filename":2407,"language":2408,"meta":2103},[2405],"language-text","locations\u002F\n├── manifest.json                 identity, type, permissions, events\n├── manifest.capabilities.json    the generated capability register — never hand-edit\n├── schema.json                   your entities → platform tables\n├── cockpit.json                  the admin UI: navigation + a list view\n├── billing.json                  Marketplace listing and pricing\n├── package.json                  one dependency: @revenexx\u002Fapp-sdk\n├── scripts\u002Fcapabilities.js       regenerates the capability register from schema.json\n├── src\u002Fmain.js                   the function entrypoint\n├── src\u002Fdb.generated.js           the typed data client (generated — never hand-edit)\n├── src\u002Fdb.generated.d.ts         its type declarations (generated too)\n├── test\u002Flocations.test.js        node --test against an in-memory store\n├── README.md\n└── .gitignore\n","locations\u002F","text",[2057,2410,2406],{"__ignoreMap":2103},[2053,2412,2413,2414,2417,2418,2421,2422,2425,2426,2425,2429,2425,2432,2425,2435,2438],{},"Scaffolding validates before it writes: the app name must match ",[2057,2415,2416],{},"^[a-z][a-z0-9-]*$",", the entity name ",[2057,2419,2420],{},"^[a-z][a-z0-9_]*$",", and names that collide with SQL or JavaScript keywords (",[2057,2423,2424],{},"order",", ",[2057,2427,2428],{},"user",[2057,2430,2431],{},"select",[2057,2433,2434],{},"function",[2057,2436,2437],{},"public",", …) are refused outright. A non-empty target directory aborts the scaffold rather than merging into it.",[2097,2440,2442],{"className":2099,"code":2441,"filename":2101,"language":2102,"meta":2103,"style":2103},"cd locations && npm install\n",[2057,2443,2444],{"__ignoreMap":2103},[2107,2445,2446,2450,2452,2454,2457],{"class":2109,"line":2110},[2107,2447,2449],{"class":2448},"s2Zo4","cd",[2107,2451,2385],{"class":2117},[2107,2453,2214],{"class":2213},[2107,2455,2456],{"class":2113}," npm",[2107,2458,2459],{"class":2117}," install\n",[2087,2461,2463],{"id":2462},"_4-read-the-two-files-that-matter","4. Read the two files that matter",[2092,2465,2467,2470],{"id":2466},"schemajson-the-tables-you-own",[2057,2468,2469],{},"schema.json"," — the tables you own",[2097,2472,2476],{"className":2473,"code":2474,"filename":2469,"language":2475,"meta":2103,"style":2103},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"$schema\": \"https:\u002F\u002Fschemas.revenexx.com\u002Fschema.schema.json\",\n  \"entities\": {\n    \"locations\": {\n      \"scopeable\": [\"market\"],\n      \"columns\": {\n        \"id\":         { \"type\": \"uuid\", \"pk\": true, \"default\": \"gen_random_uuid()\" },\n        \"name\":       { \"type\": \"text\", \"notNull\": true, \"check\": \"length(name) > 0\" },\n        \"metadata\":   { \"type\": \"jsonb\" },\n        \"created_at\": { \"type\": \"timestamptz\", \"notNull\": true, \"default\": \"now()\" },\n        \"updated_at\": { \"type\": \"timestamptz\", \"notNull\": true, \"default\": \"now()\" }\n      },\n      \"indexes\": [\n        { \"columns\": [\"tenant_id\", \"name\"] }\n      ]\n    }\n  }\n}\n","json",[2057,2477,2478,2483,2506,2520,2535,2562,2576,2644,2704,2736,2795,2852,2858,2873,2909,2915,2921,2927],{"__ignoreMap":2103},[2107,2479,2480],{"class":2109,"line":2110},[2107,2481,2482],{"class":2213},"{\n",[2107,2484,2485,2488,2492,2494,2496,2498,2501,2503],{"class":2109,"line":2127},[2107,2486,2487],{"class":2213},"  \"",[2107,2489,2491],{"class":2490},"spNyl","$schema",[2107,2493,2345],{"class":2213},[2107,2495,2320],{"class":2213},[2107,2497,2339],{"class":2213},[2107,2499,2500],{"class":2117},"https:\u002F\u002Fschemas.revenexx.com\u002Fschema.schema.json",[2107,2502,2345],{"class":2213},[2107,2504,2505],{"class":2213},",\n",[2107,2507,2508,2510,2513,2515,2517],{"class":2109,"line":2228},[2107,2509,2487],{"class":2213},[2107,2511,2512],{"class":2490},"entities",[2107,2514,2345],{"class":2213},[2107,2516,2320],{"class":2213},[2107,2518,2519],{"class":2213}," {\n",[2107,2521,2523,2526,2529,2531,2533],{"class":2109,"line":2522},4,[2107,2524,2525],{"class":2213},"    \"",[2107,2527,2528],{"class":2113},"locations",[2107,2530,2345],{"class":2213},[2107,2532,2320],{"class":2213},[2107,2534,2519],{"class":2213},[2107,2536,2538,2541,2545,2547,2549,2552,2554,2557,2559],{"class":2109,"line":2537},5,[2107,2539,2540],{"class":2213},"      \"",[2107,2542,2544],{"class":2543},"sbssI","scopeable",[2107,2546,2345],{"class":2213},[2107,2548,2320],{"class":2213},[2107,2550,2551],{"class":2213}," [",[2107,2553,2345],{"class":2213},[2107,2555,2556],{"class":2117},"market",[2107,2558,2345],{"class":2213},[2107,2560,2561],{"class":2213},"],\n",[2107,2563,2565,2567,2570,2572,2574],{"class":2109,"line":2564},6,[2107,2566,2540],{"class":2213},[2107,2568,2569],{"class":2543},"columns",[2107,2571,2345],{"class":2213},[2107,2573,2320],{"class":2213},[2107,2575,2519],{"class":2213},[2107,2577,2579,2582,2586,2588,2590,2593,2595,2599,2601,2603,2605,2608,2610,2613,2615,2618,2620,2622,2625,2627,2630,2632,2634,2636,2639,2641],{"class":2109,"line":2578},7,[2107,2580,2581],{"class":2213},"        \"",[2107,2583,2585],{"class":2584},"swJcz","id",[2107,2587,2345],{"class":2213},[2107,2589,2320],{"class":2213},[2107,2591,2592],{"class":2213},"         {",[2107,2594,2339],{"class":2213},[2107,2596,2598],{"class":2597},"su27w","type",[2107,2600,2345],{"class":2213},[2107,2602,2320],{"class":2213},[2107,2604,2339],{"class":2213},[2107,2606,2607],{"class":2117},"uuid",[2107,2609,2345],{"class":2213},[2107,2611,2612],{"class":2213},",",[2107,2614,2339],{"class":2213},[2107,2616,2617],{"class":2597},"pk",[2107,2619,2345],{"class":2213},[2107,2621,2320],{"class":2213},[2107,2623,2624],{"class":2213}," true,",[2107,2626,2339],{"class":2213},[2107,2628,2629],{"class":2597},"default",[2107,2631,2345],{"class":2213},[2107,2633,2320],{"class":2213},[2107,2635,2339],{"class":2213},[2107,2637,2638],{"class":2117},"gen_random_uuid()",[2107,2640,2345],{"class":2213},[2107,2642,2643],{"class":2213}," },\n",[2107,2645,2647,2649,2652,2654,2656,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2680,2682,2684,2686,2688,2691,2693,2695,2697,2700,2702],{"class":2109,"line":2646},8,[2107,2648,2581],{"class":2213},[2107,2650,2651],{"class":2584},"name",[2107,2653,2345],{"class":2213},[2107,2655,2320],{"class":2213},[2107,2657,2658],{"class":2213},"       {",[2107,2660,2339],{"class":2213},[2107,2662,2598],{"class":2597},[2107,2664,2345],{"class":2213},[2107,2666,2320],{"class":2213},[2107,2668,2339],{"class":2213},[2107,2670,2408],{"class":2117},[2107,2672,2345],{"class":2213},[2107,2674,2612],{"class":2213},[2107,2676,2339],{"class":2213},[2107,2678,2679],{"class":2597},"notNull",[2107,2681,2345],{"class":2213},[2107,2683,2320],{"class":2213},[2107,2685,2624],{"class":2213},[2107,2687,2339],{"class":2213},[2107,2689,2690],{"class":2597},"check",[2107,2692,2345],{"class":2213},[2107,2694,2320],{"class":2213},[2107,2696,2339],{"class":2213},[2107,2698,2699],{"class":2117},"length(name) > 0",[2107,2701,2345],{"class":2213},[2107,2703,2643],{"class":2213},[2107,2705,2707,2709,2712,2714,2716,2719,2721,2723,2725,2727,2729,2732,2734],{"class":2109,"line":2706},9,[2107,2708,2581],{"class":2213},[2107,2710,2711],{"class":2584},"metadata",[2107,2713,2345],{"class":2213},[2107,2715,2320],{"class":2213},[2107,2717,2718],{"class":2213},"   {",[2107,2720,2339],{"class":2213},[2107,2722,2598],{"class":2597},[2107,2724,2345],{"class":2213},[2107,2726,2320],{"class":2213},[2107,2728,2339],{"class":2213},[2107,2730,2731],{"class":2117},"jsonb",[2107,2733,2345],{"class":2213},[2107,2735,2643],{"class":2213},[2107,2737,2739,2741,2744,2746,2748,2751,2753,2755,2757,2759,2761,2764,2766,2768,2770,2772,2774,2776,2778,2780,2782,2784,2786,2788,2791,2793],{"class":2109,"line":2738},10,[2107,2740,2581],{"class":2213},[2107,2742,2743],{"class":2584},"created_at",[2107,2745,2345],{"class":2213},[2107,2747,2320],{"class":2213},[2107,2749,2750],{"class":2213}," {",[2107,2752,2339],{"class":2213},[2107,2754,2598],{"class":2597},[2107,2756,2345],{"class":2213},[2107,2758,2320],{"class":2213},[2107,2760,2339],{"class":2213},[2107,2762,2763],{"class":2117},"timestamptz",[2107,2765,2345],{"class":2213},[2107,2767,2612],{"class":2213},[2107,2769,2339],{"class":2213},[2107,2771,2679],{"class":2597},[2107,2773,2345],{"class":2213},[2107,2775,2320],{"class":2213},[2107,2777,2624],{"class":2213},[2107,2779,2339],{"class":2213},[2107,2781,2629],{"class":2597},[2107,2783,2345],{"class":2213},[2107,2785,2320],{"class":2213},[2107,2787,2339],{"class":2213},[2107,2789,2790],{"class":2117},"now()",[2107,2792,2345],{"class":2213},[2107,2794,2643],{"class":2213},[2107,2796,2798,2800,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849],{"class":2109,"line":2797},11,[2107,2799,2581],{"class":2213},[2107,2801,2802],{"class":2584},"updated_at",[2107,2804,2345],{"class":2213},[2107,2806,2320],{"class":2213},[2107,2808,2750],{"class":2213},[2107,2810,2339],{"class":2213},[2107,2812,2598],{"class":2597},[2107,2814,2345],{"class":2213},[2107,2816,2320],{"class":2213},[2107,2818,2339],{"class":2213},[2107,2820,2763],{"class":2117},[2107,2822,2345],{"class":2213},[2107,2824,2612],{"class":2213},[2107,2826,2339],{"class":2213},[2107,2828,2679],{"class":2597},[2107,2830,2345],{"class":2213},[2107,2832,2320],{"class":2213},[2107,2834,2624],{"class":2213},[2107,2836,2339],{"class":2213},[2107,2838,2629],{"class":2597},[2107,2840,2345],{"class":2213},[2107,2842,2320],{"class":2213},[2107,2844,2339],{"class":2213},[2107,2846,2790],{"class":2117},[2107,2848,2345],{"class":2213},[2107,2850,2851],{"class":2213}," }\n",[2107,2853,2855],{"class":2109,"line":2854},12,[2107,2856,2857],{"class":2213},"      },\n",[2107,2859,2861,2863,2866,2868,2870],{"class":2109,"line":2860},13,[2107,2862,2540],{"class":2213},[2107,2864,2865],{"class":2543},"indexes",[2107,2867,2345],{"class":2213},[2107,2869,2320],{"class":2213},[2107,2871,2872],{"class":2213}," [\n",[2107,2874,2876,2879,2881,2883,2885,2887,2889,2891,2894,2896,2898,2900,2902,2904,2907],{"class":2109,"line":2875},14,[2107,2877,2878],{"class":2213},"        {",[2107,2880,2339],{"class":2213},[2107,2882,2569],{"class":2584},[2107,2884,2345],{"class":2213},[2107,2886,2320],{"class":2213},[2107,2888,2551],{"class":2213},[2107,2890,2345],{"class":2213},[2107,2892,2893],{"class":2117},"tenant_id",[2107,2895,2345],{"class":2213},[2107,2897,2612],{"class":2213},[2107,2899,2339],{"class":2213},[2107,2901,2651],{"class":2117},[2107,2903,2345],{"class":2213},[2107,2905,2906],{"class":2213},"]",[2107,2908,2851],{"class":2213},[2107,2910,2912],{"class":2109,"line":2911},15,[2107,2913,2914],{"class":2213},"      ]\n",[2107,2916,2918],{"class":2109,"line":2917},16,[2107,2919,2920],{"class":2213},"    }\n",[2107,2922,2924],{"class":2109,"line":2923},17,[2107,2925,2926],{"class":2213},"  }\n",[2107,2928,2930],{"class":2109,"line":2929},18,[2107,2931,2932],{"class":2213},"}\n",[2053,2934,2935],{},"Four things to notice, because they are the four that surprise people:",[2937,2938,2939,2960,2975,2981],"ul",{},[2940,2941,2942,2944,2945,2948,2949,2952,2953,2952,2956,2959],"li",{},[2057,2943,2598],{}," is a ",[2313,2946,2947],{},"raw PostgreSQL type",", written verbatim into the DDL. There is no ",[2057,2950,2951],{},"string",", no ",[2057,2954,2955],{},"decimal",[2057,2957,2958],{},"float",".",[2940,2961,2962,2964,2965,2967,2968,2971,2972,2959],{},[2057,2963,2629],{}," and ",[2057,2966,2690],{}," are ",[2313,2969,2970],{},"raw SQL expressions"," — so when you add a literal string default, it needs SQL quotes inside the JSON string: ",[2057,2973,2974],{},"\"'warehouse'\"",[2940,2976,2977,2978,2980],{},"There is no ",[2057,2979,2893],{}," column. The platform injects it and scopes every read and write for you — you may name it in an index, as above, but never declare it.",[2940,2982,2983,2986,2987,2959],{},[2057,2984,2985],{},"scopeable: [\"market\"]"," lets a row belong to one market or stay global — see ",[2062,2988,1020],{"href":1021},[2053,2990,2991,2992,2959],{},"Full detail in the ",[2062,2993,2994],{"href":768},"schema reference",[2092,2996,2998,3001],{"id":2997},"srcmainjs-your-function",[2057,2999,3000],{},"src\u002Fmain.js"," — your function",[2097,3003,3007],{"className":3004,"code":3005,"filename":3000,"language":3006,"meta":2103,"style":2103},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","'use strict';\n\nconst { createApp, mountCrud, badRequest } = require('@revenexx\u002Fapp-sdk\u002Frouter');\nconst { createDb, ENTITIES } = require('.\u002Fdb.generated');\n\n\u002F\u002F Idempotent per-tenant seeding — runs on the app.installed lifecycle event.\nasync function ensureDefaults(db) {\n    return { created: [], existing: [] };\n}\n\nfunction buildApp(db) {\n    const app = createApp({\n        name: 'locations',\n        healthExtra: () => ({ entities: Object.keys(ENTITIES) }),\n    });\n\n    mountCrud(app, db.locations, {\n        path: '\u002Flocations\u002Flocations',\n        columns: ENTITIES.locations.columns,\n    });\n\n    return app;\n}\n\nmodule.exports = async (context) => {\n    const { req, res } = context;\n    const headers = req.headers || {};\n    const jwt = headers['x-revenexx-context'] ?? headers['X-Revenexx-Context'] ?? '';\n    const path = (String(req.path || '\u002F').replace(\u002F\\\u002F+$\u002F, '')) || '\u002F';\n\n    const trigger = headers['x-revenexx-trigger'] ?? '';\n    const event = headers['x-revenexx-event'] ?? '';\n    if (trigger === 'event' && jwt) {\n        const db = createDb({ adapter: 'runtime', context });\n        if (\u002F(^|\\.)installed$\u002F.test(event)) {\n            const result = await ensureDefaults(db);\n            return res.json({ event, ...result });\n        }\n        return res.json({ event, ignored: true });\n    }\n\n    if (path !== '\u002F' && !jwt) {\n        return res.json({ error: 'missing tenant identity — this route needs the x-revenexx-context header' }, 503);\n    }\n\n    const db = createDb({ adapter: 'runtime', context });\n    return buildApp(db).handler()(context);\n};\n\nmodule.exports.buildApp = buildApp;\nmodule.exports.ensureDefaults = ensureDefaults;\n","js",[2057,3008,3009,3022,3028,3072,3105,3109,3115,3136,3165,3169,3173,3188,3203,3219,3265,3274,3278,3300,3316,3337,3346,3351,3360,3365,3370,3392,3417,3440,3488,3562,3567,3596,3625,3654,3692,3734,3758,3790,3796,3831,3836,3841,3871,3908,3913,3918,3953,3980,3985,3990,4006],{"__ignoreMap":2103},[2107,3010,3011,3014,3017,3019],{"class":2109,"line":2110},[2107,3012,3013],{"class":2213},"'",[2107,3015,3016],{"class":2117},"use strict",[2107,3018,3013],{"class":2213},[2107,3020,3021],{"class":2213},";\n",[2107,3023,3024],{"class":2109,"line":2127},[2107,3025,3027],{"emptyLinePlaceholder":3026},true,"\n",[2107,3029,3030,3033,3035,3038,3040,3043,3045,3048,3051,3054,3057,3060,3062,3065,3067,3070],{"class":2109,"line":2228},[2107,3031,3032],{"class":2490},"const",[2107,3034,2750],{"class":2213},[2107,3036,3037],{"class":2297}," createApp",[2107,3039,2612],{"class":2213},[2107,3041,3042],{"class":2297}," mountCrud",[2107,3044,2612],{"class":2213},[2107,3046,3047],{"class":2297}," badRequest ",[2107,3049,3050],{"class":2213},"}",[2107,3052,3053],{"class":2213}," =",[2107,3055,3056],{"class":2448}," require",[2107,3058,3059],{"class":2297},"(",[2107,3061,3013],{"class":2213},[2107,3063,3064],{"class":2117},"@revenexx\u002Fapp-sdk\u002Frouter",[2107,3066,3013],{"class":2213},[2107,3068,3069],{"class":2297},")",[2107,3071,3021],{"class":2213},[2107,3073,3074,3076,3078,3081,3083,3086,3088,3090,3092,3094,3096,3099,3101,3103],{"class":2109,"line":2522},[2107,3075,3032],{"class":2490},[2107,3077,2750],{"class":2213},[2107,3079,3080],{"class":2297}," createDb",[2107,3082,2612],{"class":2213},[2107,3084,3085],{"class":2297}," ENTITIES ",[2107,3087,3050],{"class":2213},[2107,3089,3053],{"class":2213},[2107,3091,3056],{"class":2448},[2107,3093,3059],{"class":2297},[2107,3095,3013],{"class":2213},[2107,3097,3098],{"class":2117},".\u002Fdb.generated",[2107,3100,3013],{"class":2213},[2107,3102,3069],{"class":2297},[2107,3104,3021],{"class":2213},[2107,3106,3107],{"class":2109,"line":2537},[2107,3108,3027],{"emptyLinePlaceholder":3026},[2107,3110,3111],{"class":2109,"line":2564},[2107,3112,3114],{"class":3113},"sHwdD","\u002F\u002F Idempotent per-tenant seeding — runs on the app.installed lifecycle event.\n",[2107,3116,3117,3120,3123,3126,3128,3132,3134],{"class":2109,"line":2578},[2107,3118,3119],{"class":2490},"async",[2107,3121,3122],{"class":2490}," function",[2107,3124,3125],{"class":2448}," ensureDefaults",[2107,3127,3059],{"class":2213},[2107,3129,3131],{"class":3130},"sHdIc","db",[2107,3133,3069],{"class":2213},[2107,3135,2519],{"class":2213},[2107,3137,3138,3142,3144,3147,3149,3152,3154,3157,3159,3162],{"class":2109,"line":2646},[2107,3139,3141],{"class":3140},"s7zQu","    return",[2107,3143,2750],{"class":2213},[2107,3145,3146],{"class":2584}," created",[2107,3148,2320],{"class":2213},[2107,3150,3151],{"class":2584}," []",[2107,3153,2612],{"class":2213},[2107,3155,3156],{"class":2584}," existing",[2107,3158,2320],{"class":2213},[2107,3160,3161],{"class":2584}," [] ",[2107,3163,3164],{"class":2213},"};\n",[2107,3166,3167],{"class":2109,"line":2706},[2107,3168,2932],{"class":2213},[2107,3170,3171],{"class":2109,"line":2738},[2107,3172,3027],{"emptyLinePlaceholder":3026},[2107,3174,3175,3177,3180,3182,3184,3186],{"class":2109,"line":2797},[2107,3176,2434],{"class":2490},[2107,3178,3179],{"class":2448}," buildApp",[2107,3181,3059],{"class":2213},[2107,3183,3131],{"class":3130},[2107,3185,3069],{"class":2213},[2107,3187,2519],{"class":2213},[2107,3189,3190,3193,3195,3197,3199,3201],{"class":2109,"line":2854},[2107,3191,3192],{"class":2490},"    const",[2107,3194,2382],{"class":2297},[2107,3196,3053],{"class":2213},[2107,3198,3037],{"class":2448},[2107,3200,3059],{"class":2584},[2107,3202,2482],{"class":2213},[2107,3204,3205,3208,3210,3213,3215,3217],{"class":2109,"line":2860},[2107,3206,3207],{"class":2584},"        name",[2107,3209,2320],{"class":2213},[2107,3211,3212],{"class":2213}," '",[2107,3214,2528],{"class":2117},[2107,3216,3013],{"class":2213},[2107,3218,2505],{"class":2213},[2107,3220,3221,3224,3226,3229,3232,3235,3238,3241,3243,3246,3248,3251,3253,3256,3259,3261,3263],{"class":2109,"line":2875},[2107,3222,3223],{"class":2448},"        healthExtra",[2107,3225,2320],{"class":2213},[2107,3227,3228],{"class":2213}," ()",[2107,3230,3231],{"class":2490}," =>",[2107,3233,3234],{"class":2584}," (",[2107,3236,3237],{"class":2213},"{",[2107,3239,3240],{"class":2584}," entities",[2107,3242,2320],{"class":2213},[2107,3244,3245],{"class":2297}," Object",[2107,3247,2959],{"class":2213},[2107,3249,3250],{"class":2448},"keys",[2107,3252,3059],{"class":2584},[2107,3254,3255],{"class":2297},"ENTITIES",[2107,3257,3258],{"class":2584},") ",[2107,3260,3050],{"class":2213},[2107,3262,3069],{"class":2584},[2107,3264,2505],{"class":2213},[2107,3266,3267,3270,3272],{"class":2109,"line":2911},[2107,3268,3269],{"class":2213},"    }",[2107,3271,3069],{"class":2584},[2107,3273,3021],{"class":2213},[2107,3275,3276],{"class":2109,"line":2917},[2107,3277,3027],{"emptyLinePlaceholder":3026},[2107,3279,3280,3283,3285,3287,3289,3292,3294,3296,3298],{"class":2109,"line":2923},[2107,3281,3282],{"class":2448},"    mountCrud",[2107,3284,3059],{"class":2584},[2107,3286,2079],{"class":2297},[2107,3288,2612],{"class":2213},[2107,3290,3291],{"class":2297}," db",[2107,3293,2959],{"class":2213},[2107,3295,2528],{"class":2297},[2107,3297,2612],{"class":2213},[2107,3299,2519],{"class":2213},[2107,3301,3302,3305,3307,3309,3312,3314],{"class":2109,"line":2929},[2107,3303,3304],{"class":2584},"        path",[2107,3306,2320],{"class":2213},[2107,3308,3212],{"class":2213},[2107,3310,3311],{"class":2117},"\u002Flocations\u002Flocations",[2107,3313,3013],{"class":2213},[2107,3315,2505],{"class":2213},[2107,3317,3319,3322,3324,3327,3329,3331,3333,3335],{"class":2109,"line":3318},19,[2107,3320,3321],{"class":2584},"        columns",[2107,3323,2320],{"class":2213},[2107,3325,3326],{"class":2297}," ENTITIES",[2107,3328,2959],{"class":2213},[2107,3330,2528],{"class":2297},[2107,3332,2959],{"class":2213},[2107,3334,2569],{"class":2297},[2107,3336,2505],{"class":2213},[2107,3338,3340,3342,3344],{"class":2109,"line":3339},20,[2107,3341,3269],{"class":2213},[2107,3343,3069],{"class":2584},[2107,3345,3021],{"class":2213},[2107,3347,3349],{"class":2109,"line":3348},21,[2107,3350,3027],{"emptyLinePlaceholder":3026},[2107,3352,3354,3356,3358],{"class":2109,"line":3353},22,[2107,3355,3141],{"class":3140},[2107,3357,2382],{"class":2297},[2107,3359,3021],{"class":2213},[2107,3361,3363],{"class":2109,"line":3362},23,[2107,3364,2932],{"class":2213},[2107,3366,3368],{"class":2109,"line":3367},24,[2107,3369,3027],{"emptyLinePlaceholder":3026},[2107,3371,3373,3376,3378,3381,3383,3386,3388,3390],{"class":2109,"line":3372},25,[2107,3374,3375],{"class":2213},"module.exports",[2107,3377,3053],{"class":2213},[2107,3379,3380],{"class":2490}," async",[2107,3382,3234],{"class":2213},[2107,3384,3385],{"class":3130},"context",[2107,3387,3069],{"class":2213},[2107,3389,3231],{"class":2490},[2107,3391,2519],{"class":2213},[2107,3393,3395,3397,3399,3402,3404,3407,3410,3412,3415],{"class":2109,"line":3394},26,[2107,3396,3192],{"class":2490},[2107,3398,2750],{"class":2213},[2107,3400,3401],{"class":2297}," req",[2107,3403,2612],{"class":2213},[2107,3405,3406],{"class":2297}," res",[2107,3408,3409],{"class":2213}," }",[2107,3411,3053],{"class":2213},[2107,3413,3414],{"class":2297}," context",[2107,3416,3021],{"class":2213},[2107,3418,3420,3422,3425,3427,3429,3431,3434,3437],{"class":2109,"line":3419},27,[2107,3421,3192],{"class":2490},[2107,3423,3424],{"class":2297}," headers",[2107,3426,3053],{"class":2213},[2107,3428,3401],{"class":2297},[2107,3430,2959],{"class":2213},[2107,3432,3433],{"class":2297},"headers",[2107,3435,3436],{"class":2213}," ||",[2107,3438,3439],{"class":2213}," {};\n",[2107,3441,3443,3445,3448,3450,3452,3455,3457,3460,3462,3465,3468,3470,3472,3474,3477,3479,3481,3483,3486],{"class":2109,"line":3442},28,[2107,3444,3192],{"class":2490},[2107,3446,3447],{"class":2297}," jwt",[2107,3449,3053],{"class":2213},[2107,3451,3424],{"class":2297},[2107,3453,3454],{"class":2584},"[",[2107,3456,3013],{"class":2213},[2107,3458,3459],{"class":2117},"x-revenexx-context",[2107,3461,3013],{"class":2213},[2107,3463,3464],{"class":2584},"] ",[2107,3466,3467],{"class":2213},"??",[2107,3469,3424],{"class":2297},[2107,3471,3454],{"class":2584},[2107,3473,3013],{"class":2213},[2107,3475,3476],{"class":2117},"X-Revenexx-Context",[2107,3478,3013],{"class":2213},[2107,3480,3464],{"class":2584},[2107,3482,3467],{"class":2213},[2107,3484,3485],{"class":2213}," ''",[2107,3487,3021],{"class":2213},[2107,3489,3491,3493,3496,3498,3500,3503,3505,3508,3510,3513,3515,3517,3520,3522,3524,3526,3529,3531,3533,3536,3539,3542,3544,3546,3548,3551,3554,3556,3558,3560],{"class":2109,"line":3490},29,[2107,3492,3192],{"class":2490},[2107,3494,3495],{"class":2297}," path",[2107,3497,3053],{"class":2213},[2107,3499,3234],{"class":2584},[2107,3501,3502],{"class":2448},"String",[2107,3504,3059],{"class":2584},[2107,3506,3507],{"class":2297},"req",[2107,3509,2959],{"class":2213},[2107,3511,3512],{"class":2297},"path",[2107,3514,3436],{"class":2213},[2107,3516,3212],{"class":2213},[2107,3518,3519],{"class":2117},"\u002F",[2107,3521,3013],{"class":2213},[2107,3523,3069],{"class":2584},[2107,3525,2959],{"class":2213},[2107,3527,3528],{"class":2448},"replace",[2107,3530,3059],{"class":2584},[2107,3532,3519],{"class":2213},[2107,3534,3535],{"class":2297},"\\\u002F",[2107,3537,3538],{"class":2213},"+",[2107,3540,3541],{"class":3140},"$",[2107,3543,3519],{"class":2213},[2107,3545,2612],{"class":2213},[2107,3547,3485],{"class":2213},[2107,3549,3550],{"class":2584},")) ",[2107,3552,3553],{"class":2213},"||",[2107,3555,3212],{"class":2213},[2107,3557,3519],{"class":2117},[2107,3559,3013],{"class":2213},[2107,3561,3021],{"class":2213},[2107,3563,3565],{"class":2109,"line":3564},30,[2107,3566,3027],{"emptyLinePlaceholder":3026},[2107,3568,3570,3572,3575,3577,3579,3581,3583,3586,3588,3590,3592,3594],{"class":2109,"line":3569},31,[2107,3571,3192],{"class":2490},[2107,3573,3574],{"class":2297}," trigger",[2107,3576,3053],{"class":2213},[2107,3578,3424],{"class":2297},[2107,3580,3454],{"class":2584},[2107,3582,3013],{"class":2213},[2107,3584,3585],{"class":2117},"x-revenexx-trigger",[2107,3587,3013],{"class":2213},[2107,3589,3464],{"class":2584},[2107,3591,3467],{"class":2213},[2107,3593,3485],{"class":2213},[2107,3595,3021],{"class":2213},[2107,3597,3599,3601,3604,3606,3608,3610,3612,3615,3617,3619,3621,3623],{"class":2109,"line":3598},32,[2107,3600,3192],{"class":2490},[2107,3602,3603],{"class":2297}," event",[2107,3605,3053],{"class":2213},[2107,3607,3424],{"class":2297},[2107,3609,3454],{"class":2584},[2107,3611,3013],{"class":2213},[2107,3613,3614],{"class":2117},"x-revenexx-event",[2107,3616,3013],{"class":2213},[2107,3618,3464],{"class":2584},[2107,3620,3467],{"class":2213},[2107,3622,3485],{"class":2213},[2107,3624,3021],{"class":2213},[2107,3626,3628,3631,3633,3636,3639,3641,3644,3646,3648,3650,3652],{"class":2109,"line":3627},33,[2107,3629,3630],{"class":3140},"    if",[2107,3632,3234],{"class":2584},[2107,3634,3635],{"class":2297},"trigger",[2107,3637,3638],{"class":2213}," ===",[2107,3640,3212],{"class":2213},[2107,3642,3643],{"class":2117},"event",[2107,3645,3013],{"class":2213},[2107,3647,2214],{"class":2213},[2107,3649,3447],{"class":2297},[2107,3651,3258],{"class":2584},[2107,3653,2482],{"class":2213},[2107,3655,3657,3660,3662,3664,3666,3668,3670,3673,3675,3677,3680,3682,3684,3686,3688,3690],{"class":2109,"line":3656},34,[2107,3658,3659],{"class":2490},"        const",[2107,3661,3291],{"class":2297},[2107,3663,3053],{"class":2213},[2107,3665,3080],{"class":2448},[2107,3667,3059],{"class":2584},[2107,3669,3237],{"class":2213},[2107,3671,3672],{"class":2584}," adapter",[2107,3674,2320],{"class":2213},[2107,3676,3212],{"class":2213},[2107,3678,3679],{"class":2117},"runtime",[2107,3681,3013],{"class":2213},[2107,3683,2612],{"class":2213},[2107,3685,3414],{"class":2297},[2107,3687,3409],{"class":2213},[2107,3689,3069],{"class":2584},[2107,3691,3021],{"class":2213},[2107,3693,3695,3698,3700,3703,3706,3709,3712,3714,3717,3719,3721,3723,3726,3728,3730,3732],{"class":2109,"line":3694},35,[2107,3696,3697],{"class":3140},"        if",[2107,3699,3234],{"class":2584},[2107,3701,3702],{"class":2213},"\u002F(",[2107,3704,3705],{"class":3140},"^",[2107,3707,3708],{"class":2213},"|",[2107,3710,3711],{"class":2297},"\\.",[2107,3713,3069],{"class":2213},[2107,3715,3716],{"class":2117},"installed",[2107,3718,3541],{"class":3140},[2107,3720,3519],{"class":2213},[2107,3722,2959],{"class":2213},[2107,3724,3725],{"class":2448},"test",[2107,3727,3059],{"class":2584},[2107,3729,3643],{"class":2297},[2107,3731,3550],{"class":2584},[2107,3733,2482],{"class":2213},[2107,3735,3737,3740,3743,3745,3748,3750,3752,3754,3756],{"class":2109,"line":3736},36,[2107,3738,3739],{"class":2490},"            const",[2107,3741,3742],{"class":2297}," result",[2107,3744,3053],{"class":2213},[2107,3746,3747],{"class":3140}," await",[2107,3749,3125],{"class":2448},[2107,3751,3059],{"class":2584},[2107,3753,3131],{"class":2297},[2107,3755,3069],{"class":2584},[2107,3757,3021],{"class":2213},[2107,3759,3761,3764,3766,3768,3770,3772,3774,3776,3778,3781,3784,3786,3788],{"class":2109,"line":3760},37,[2107,3762,3763],{"class":3140},"            return",[2107,3765,3406],{"class":2297},[2107,3767,2959],{"class":2213},[2107,3769,2475],{"class":2448},[2107,3771,3059],{"class":2584},[2107,3773,3237],{"class":2213},[2107,3775,3603],{"class":2297},[2107,3777,2612],{"class":2213},[2107,3779,3780],{"class":2213}," ...",[2107,3782,3783],{"class":2297},"result",[2107,3785,3409],{"class":2213},[2107,3787,3069],{"class":2584},[2107,3789,3021],{"class":2213},[2107,3791,3793],{"class":2109,"line":3792},38,[2107,3794,3795],{"class":2213},"        }\n",[2107,3797,3799,3802,3804,3806,3808,3810,3812,3814,3816,3819,3821,3825,3827,3829],{"class":2109,"line":3798},39,[2107,3800,3801],{"class":3140},"        return",[2107,3803,3406],{"class":2297},[2107,3805,2959],{"class":2213},[2107,3807,2475],{"class":2448},[2107,3809,3059],{"class":2584},[2107,3811,3237],{"class":2213},[2107,3813,3603],{"class":2297},[2107,3815,2612],{"class":2213},[2107,3817,3818],{"class":2584}," ignored",[2107,3820,2320],{"class":2213},[2107,3822,3824],{"class":3823},"sfNiH"," true",[2107,3826,3409],{"class":2213},[2107,3828,3069],{"class":2584},[2107,3830,3021],{"class":2213},[2107,3832,3834],{"class":2109,"line":3833},40,[2107,3835,2920],{"class":2213},[2107,3837,3839],{"class":2109,"line":3838},41,[2107,3840,3027],{"emptyLinePlaceholder":3026},[2107,3842,3844,3846,3848,3850,3853,3855,3857,3859,3861,3864,3867,3869],{"class":2109,"line":3843},42,[2107,3845,3630],{"class":3140},[2107,3847,3234],{"class":2584},[2107,3849,3512],{"class":2297},[2107,3851,3852],{"class":2213}," !==",[2107,3854,3212],{"class":2213},[2107,3856,3519],{"class":2117},[2107,3858,3013],{"class":2213},[2107,3860,2214],{"class":2213},[2107,3862,3863],{"class":2213}," !",[2107,3865,3866],{"class":2297},"jwt",[2107,3868,3258],{"class":2584},[2107,3870,2482],{"class":2213},[2107,3872,3874,3876,3878,3880,3882,3884,3886,3889,3891,3893,3896,3898,3901,3904,3906],{"class":2109,"line":3873},43,[2107,3875,3801],{"class":3140},[2107,3877,3406],{"class":2297},[2107,3879,2959],{"class":2213},[2107,3881,2475],{"class":2448},[2107,3883,3059],{"class":2584},[2107,3885,3237],{"class":2213},[2107,3887,3888],{"class":2584}," error",[2107,3890,2320],{"class":2213},[2107,3892,3212],{"class":2213},[2107,3894,3895],{"class":2117},"missing tenant identity — this route needs the x-revenexx-context header",[2107,3897,3013],{"class":2213},[2107,3899,3900],{"class":2213}," },",[2107,3902,3903],{"class":2543}," 503",[2107,3905,3069],{"class":2584},[2107,3907,3021],{"class":2213},[2107,3909,3911],{"class":2109,"line":3910},44,[2107,3912,2920],{"class":2213},[2107,3914,3916],{"class":2109,"line":3915},45,[2107,3917,3027],{"emptyLinePlaceholder":3026},[2107,3919,3921,3923,3925,3927,3929,3931,3933,3935,3937,3939,3941,3943,3945,3947,3949,3951],{"class":2109,"line":3920},46,[2107,3922,3192],{"class":2490},[2107,3924,3291],{"class":2297},[2107,3926,3053],{"class":2213},[2107,3928,3080],{"class":2448},[2107,3930,3059],{"class":2584},[2107,3932,3237],{"class":2213},[2107,3934,3672],{"class":2584},[2107,3936,2320],{"class":2213},[2107,3938,3212],{"class":2213},[2107,3940,3679],{"class":2117},[2107,3942,3013],{"class":2213},[2107,3944,2612],{"class":2213},[2107,3946,3414],{"class":2297},[2107,3948,3409],{"class":2213},[2107,3950,3069],{"class":2584},[2107,3952,3021],{"class":2213},[2107,3954,3956,3958,3960,3962,3964,3966,3968,3971,3974,3976,3978],{"class":2109,"line":3955},47,[2107,3957,3141],{"class":3140},[2107,3959,3179],{"class":2448},[2107,3961,3059],{"class":2584},[2107,3963,3131],{"class":2297},[2107,3965,3069],{"class":2584},[2107,3967,2959],{"class":2213},[2107,3969,3970],{"class":2448},"handler",[2107,3972,3973],{"class":2584},"()(",[2107,3975,3385],{"class":2297},[2107,3977,3069],{"class":2584},[2107,3979,3021],{"class":2213},[2107,3981,3983],{"class":2109,"line":3982},48,[2107,3984,3164],{"class":2213},[2107,3986,3988],{"class":2109,"line":3987},49,[2107,3989,3027],{"emptyLinePlaceholder":3026},[2107,3991,3993,3996,3999,4002,4004],{"class":2109,"line":3992},50,[2107,3994,3995],{"class":2213},"module.exports.",[2107,3997,3998],{"class":2297},"buildApp ",[2107,4000,4001],{"class":2213},"=",[2107,4003,3179],{"class":2297},[2107,4005,3021],{"class":2213},[2107,4007,4009,4011,4014,4016,4018],{"class":2109,"line":4008},51,[2107,4010,3995],{"class":2213},[2107,4012,4013],{"class":2297},"ensureDefaults ",[2107,4015,4001],{"class":2213},[2107,4017,3125],{"class":2297},[2107,4019,3021],{"class":2213},[2053,4021,4022,4025,4026,4029,4030,4032,4033,4036,4037,4040,4041,4043,4044,4047,4048,4051,4052,4054,4055,2964,4058,2959],{},[2057,4023,4024],{},"createApp"," is the router. ",[2057,4027,4028],{},"mountCrud"," wires one entity to the five standard REST routes — note the path is ",[2057,4031,3311],{},": ",[2313,4034,4035],{},"every route lives under the app's own prefix"," (the app name), then names the entity. ",[2057,4038,4039],{},"createDb"," with the ",[2057,4042,3679],{}," adapter reads the invocation context, so you configure no endpoint, no tenant and no credential. The scaffold also wires lifecycle events (",[2057,4045,4046],{},"ensureDefaults"," runs on ",[2057,4049,4050],{},"app.installed",") and a health route at ",[2057,4053,3519],{},". See the ",[2062,4056,4057],{"href":714},"router",[2062,4059,4060],{"href":785},"the typed client",[2087,4062,4064],{"id":4063},"_5-regenerate-and-test","5. Regenerate and test",[2053,4066,4067,4068,4070],{},"Any time you change ",[2057,4069,2469],{},", run the same three steps:",[2097,4072,4074],{"className":2099,"code":4073,"filename":2101,"language":2102,"meta":2103,"style":2103},"revenexx apps capabilities --write\nrevenexx apps generate\nnpm test\n",[2057,4075,4076,4089,4098],{"__ignoreMap":2103},[2107,4077,4078,4080,4083,4086],{"class":2109,"line":2110},[2107,4079,2130],{"class":2113},[2107,4081,4082],{"class":2117}," apps",[2107,4084,4085],{"class":2117}," capabilities",[2107,4087,4088],{"class":2117}," --write\n",[2107,4090,4091,4093,4095],{"class":2109,"line":2127},[2107,4092,2130],{"class":2113},[2107,4094,4082],{"class":2117},[2107,4096,4097],{"class":2117}," generate\n",[2107,4099,4100,4102],{"class":2109,"line":2228},[2107,4101,2114],{"class":2113},[2107,4103,4104],{"class":2117}," test\n",[2937,4106,4107,4128,4137],{},[2940,4108,4109,4112,4113,4116,4117,4119,4120,4123,4124,4127],{},[2057,4110,4111],{},"apps capabilities --write"," regenerates ",[2057,4114,4115],{},"manifest.capabilities.json"," from ",[2057,4118,2469],{}," and strips the capability register out of ",[2057,4121,4122],{},"manifest.json",". Without ",[2057,4125,4126],{},"--write"," it prints a dry run.",[2940,4129,4130,4133,4134,2959],{},[2057,4131,4132],{},"apps generate"," regenerates the typed data client under ",[2057,4135,4136],{},"src\u002F",[2940,4138,4139,4142,4143,4146],{},[2057,4140,4141],{},"npm test"," runs the scaffolded ",[2057,4144,4145],{},"node --test"," suite against an in-memory store, so it passes with no infrastructure.",[2053,4148,4149,4150,4153],{},"Both generators are idempotent — re-running them on an unchanged schema produces no diff. The scaffolded ",[2057,4151,4152],{},"npm run capabilities"," script emits identical output, so use whichever fits your workflow.",[2087,4155,4157],{"id":4156},"_6-preview-the-admin-ui-optional","6. Preview the admin UI (optional)",[2053,4159,4160],{},"Nothing below depends on this step — skip it on a first run if you would rather see the app live first.",[2053,4162,4163,4166,4167,2959],{},[2057,4164,4165],{},"cockpit.json"," is already populated with a navigation entry and a list view over your entity. Preview it locally with the devkit before you deploy, so a bad column name shows up on your laptop rather than in a merchant's sidebar. The devkit and the local preview loop are documented with the rest of the Cockpit surface — see ",[2062,4168,630],{"href":631},[2087,4170,4172],{"id":4171},"_7-deploy","7. Deploy",[2097,4174,4176],{"className":2099,"code":4175,"filename":2101,"language":2102,"meta":2103,"style":2103},"revenexx deploy app\n",[2057,4177,4178],{"__ignoreMap":2103},[2107,4179,4180,4182,4185],{"class":2109,"line":2110},[2107,4181,2130],{"class":2113},[2107,4183,4184],{"class":2117}," deploy",[2107,4186,4187],{"class":2117}," app\n",[2053,4189,4190],{},"One command runs the whole path: register the app if it is new, upload the directory, wait for the platform build, publish the version, install it on the active tenant.",[2053,4192,4193,4194,4197,4198,4201,4202,2959],{},"The install step is the one people skip and regret: ",[2313,4195,4196],{},"routes are written at install time."," ",[2057,4199,4200],{},"--no-install"," leaves you with a built version that answers nothing new. See ",[2062,4203,900],{"href":901},[2053,4205,4206,4207,4210],{},"To deploy from a connected Git repository instead, push to the production branch — a git-wired App builds on push. Do not run ",[2057,4208,4209],{},"revenexx deploy app"," against one: it uploads a tarball, and the active deployment loses its commit.",[2087,4212,4214],{"id":4213},"_8-call-it-for-real","8. Call it for real",[2092,4216,4218],{"id":4217},"no-api-key-yet-confirm-it-is-live-from-the-cli","No API key yet? Confirm it is live from the CLI",[2053,4220,4221,4222,4225],{},"Your login session is enough to invoke the app directly and read its health route. Find the app's id with ",[2057,4223,4224],{},"revenexx apps list"," (apps get a generated id — the name won't work), then:",[2097,4227,4229],{"className":2099,"code":4228,"filename":2101,"language":2102,"meta":2103,"style":2103},"revenexx apps create-execution --function-id \u003Capp-id> --path \u002F --method GET\n",[2057,4230,4231],{"__ignoreMap":2103},[2107,4232,4233,4235,4237,4240,4243,4245,4248,4251,4254,4257,4260,4263],{"class":2109,"line":2110},[2107,4234,2130],{"class":2113},[2107,4236,4082],{"class":2117},[2107,4238,4239],{"class":2117}," create-execution",[2107,4241,4242],{"class":2117}," --function-id",[2107,4244,2291],{"class":2213},[2107,4246,4247],{"class":2117},"app-i",[2107,4249,4250],{"class":2297},"d",[2107,4252,4253],{"class":2213},">",[2107,4255,4256],{"class":2117}," --path",[2107,4258,4259],{"class":2117}," \u002F",[2107,4261,4262],{"class":2117}," --method",[2107,4264,4265],{"class":2117}," GET\n",[2097,4267,4271],{"className":4268,"code":4269,"filename":4270,"language":2408,"meta":2103},[2405],"status             : completed\nresponseStatusCode : 200\nresponseBody       : {\"app\":{\"id\":\"6a98224e4f5ed184dbde\",\"name\":\"locations\",\"deployment\":\"6a98224e7b1ff30fdef4\",\"runtime\":\"Node.js-25\"},\"status\":\"ok\",\"routes\":[{\"method\":\"GET\",\"path\":\"\u002Flocations\u002Flocations\"},{\"method\":\"POST\",\"path\":\"\u002Flocations\u002Flocations\"},{\"method\":\"DELETE\",\"path\":\"\u002Flocations\u002Flocations\u002F{id}\"},{\"method\":\"GET\",\"path\":\"\u002Flocations\u002Flocations\u002F{id}\"},{\"method\":\"PUT\",\"path\":\"\u002Flocations\u002Flocations\u002F{id}\"}],\"timestamp\":\"2026-09-02T13:20:58.324Z\",\"entities\":[\"locations\"]}\n","Output",[2057,4272,4269],{"__ignoreMap":2103},[2053,4274,4275,4276,4279,4280,4283,4284,4287],{},"That proves the build, publish and install all happened: the five routes in ",[2057,4277,4278],{},"routes"," were written at install time. It stops there, though — a direct execution skips the gateway, so the entity routes answer ",[2057,4281,4282],{},"503 missing tenant identity"," this way. To exercise them you go through ",[2057,4285,4286],{},"api.revenexx.com",", and that needs a key.",[2092,4289,4291],{"id":4290},"through-the-gateway","Through the gateway",[2053,4293,4294,4295,2316,4297,4299,4300,4302],{},"Your capability now answers on the public gateway. The two headers carry your API key and your tenant slug — if you have not created a key yet, do it now in Cockpit under your avatar menu → ",[2313,4296,2315],{},[2313,4298,2319],{}," (see ",[2062,4301,64],{"href":2083},"), then export both:",[2097,4304,4306],{"className":2099,"code":4305,"filename":2101,"language":2102,"meta":2103,"style":2103},"export REVENEXX_API_KEY=\"\u003Cyour-api-key>\"\nexport REVENEXX_TENANT=\"\u003Cyour-tenant-slug>\"\n",[2057,4307,4308,4325],{"__ignoreMap":2103},[2107,4309,4310,4313,4316,4318,4320,4323],{"class":2109,"line":2110},[2107,4311,4312],{"class":2490},"export",[2107,4314,4315],{"class":2297}," REVENEXX_API_KEY",[2107,4317,4001],{"class":2213},[2107,4319,2345],{"class":2213},[2107,4321,4322],{"class":2117},"\u003Cyour-api-key>",[2107,4324,2356],{"class":2213},[2107,4326,4327,4329,4332,4334,4336,4339],{"class":2109,"line":2127},[2107,4328,4312],{"class":2490},[2107,4330,4331],{"class":2297}," REVENEXX_TENANT",[2107,4333,4001],{"class":2213},[2107,4335,2345],{"class":2213},[2107,4337,4338],{"class":2117},"\u003Cyour-tenant-slug>",[2107,4340,2356],{"class":2213},[2053,4342,4343],{},"Seed the default row, then list:",[2097,4345,4348],{"className":2099,"code":4346,"filename":4347,"language":2102,"meta":2103,"style":2103},"curl -s -X POST https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Flocations\u002Fdefaults \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{}'\n\ncurl -s \"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Flocations?limit=50\" \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\"\n","Verify",[2057,4349,4350,4369,4385,4400,4413,4426,4430,4445,4459],{"__ignoreMap":2103},[2107,4351,4352,4354,4357,4360,4363,4366],{"class":2109,"line":2110},[2107,4353,2188],{"class":2113},[2107,4355,4356],{"class":2117}," -s",[2107,4358,4359],{"class":2117}," -X",[2107,4361,4362],{"class":2117}," POST",[2107,4364,4365],{"class":2117}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Flocations\u002Fdefaults",[2107,4367,4368],{"class":2297}," \\\n",[2107,4370,4371,4374,4376,4379,4381,4383],{"class":2109,"line":2127},[2107,4372,4373],{"class":2117},"  -H",[2107,4375,2339],{"class":2213},[2107,4377,4378],{"class":2117},"X-Revenexx-Api-Key: ",[2107,4380,2342],{"class":2297},[2107,4382,2345],{"class":2213},[2107,4384,4368],{"class":2297},[2107,4386,4387,4389,4391,4394,4396,4398],{"class":2109,"line":2228},[2107,4388,4373],{"class":2117},[2107,4390,2339],{"class":2213},[2107,4392,4393],{"class":2117},"X-Revenexx-Tenant: ",[2107,4395,2353],{"class":2297},[2107,4397,2345],{"class":2213},[2107,4399,4368],{"class":2297},[2107,4401,4402,4404,4406,4409,4411],{"class":2109,"line":2522},[2107,4403,4373],{"class":2117},[2107,4405,2339],{"class":2213},[2107,4407,4408],{"class":2117},"Content-Type: application\u002Fjson",[2107,4410,2345],{"class":2213},[2107,4412,4368],{"class":2297},[2107,4414,4415,4418,4420,4423],{"class":2109,"line":2537},[2107,4416,4417],{"class":2117},"  -d",[2107,4419,3212],{"class":2213},[2107,4421,4422],{"class":2117},"{}",[2107,4424,4425],{"class":2213},"'\n",[2107,4427,4428],{"class":2109,"line":2564},[2107,4429,3027],{"emptyLinePlaceholder":3026},[2107,4431,4432,4434,4436,4438,4441,4443],{"class":2109,"line":2578},[2107,4433,2188],{"class":2113},[2107,4435,4356],{"class":2117},[2107,4437,2339],{"class":2213},[2107,4439,4440],{"class":2117},"https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Flocations?limit=50",[2107,4442,2345],{"class":2213},[2107,4444,4368],{"class":2297},[2107,4446,4447,4449,4451,4453,4455,4457],{"class":2109,"line":2646},[2107,4448,4373],{"class":2117},[2107,4450,2339],{"class":2213},[2107,4452,4378],{"class":2117},[2107,4454,2342],{"class":2297},[2107,4456,2345],{"class":2213},[2107,4458,4368],{"class":2297},[2107,4460,4461,4463,4465,4467,4469],{"class":2109,"line":2706},[2107,4462,4373],{"class":2117},[2107,4464,2339],{"class":2213},[2107,4466,4393],{"class":2117},[2107,4468,2353],{"class":2297},[2107,4470,2356],{"class":2213},[2053,4472,4473,4474,4477,4478,4485],{},"The ",[2057,4475,4476],{},"-d '{}'"," is not decoration. ",[2313,4479,4480,4481,4484],{},"Always send a body on a ",[2057,4482,4483],{},"POST"," whose capability declares a request schema"," — the gateway validates the body against the contract before your function is invoked, and no body at all fails that check.",[2053,4487,4488,4489,4492,4493,4495,4496,4498],{},"Call ",[2057,4490,4491],{},"\u002Fdefaults"," explicitly rather than trusting the install event to have seeded anything: ",[2057,4494,4050],{}," does not reliably fire on a Marketplace install. Every shipped app exposes an idempotent ",[2057,4497,4491],{}," route for exactly this reason.",[2087,4500,4502],{"id":4501},"_9-confirm-it-is-in-the-published-contract","9. Confirm it is in the published contract",[2053,4504,4505],{},"The same declaration that produced the route produced the contract. Your tenant's merged OpenAPI document should now contain your operation:",[2097,4507,4510],{"className":2099,"code":4508,"filename":4509,"language":2102,"meta":2103,"style":2103},"curl -s https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fopenapi.json \\\n  -H \"X-Revenexx-Api-Key: $REVENEXX_API_KEY\" \\\n  -H \"X-Revenexx-Tenant: $REVENEXX_TENANT\" \\\n  | grep -o '\"\u002Fv1\u002Flocations[^\"]*\"'\n","Verify the contract",[2057,4511,4512,4523,4537,4551],{"__ignoreMap":2103},[2107,4513,4514,4516,4518,4521],{"class":2109,"line":2110},[2107,4515,2188],{"class":2113},[2107,4517,4356],{"class":2117},[2107,4519,4520],{"class":2117}," https:\u002F\u002Fapi.revenexx.com\u002Fv1\u002Fopenapi.json",[2107,4522,4368],{"class":2297},[2107,4524,4525,4527,4529,4531,4533,4535],{"class":2109,"line":2127},[2107,4526,4373],{"class":2117},[2107,4528,2339],{"class":2213},[2107,4530,4378],{"class":2117},[2107,4532,2342],{"class":2297},[2107,4534,2345],{"class":2213},[2107,4536,4368],{"class":2297},[2107,4538,4539,4541,4543,4545,4547,4549],{"class":2109,"line":2228},[2107,4540,4373],{"class":2117},[2107,4542,2339],{"class":2213},[2107,4544,4393],{"class":2117},[2107,4546,2353],{"class":2297},[2107,4548,2345],{"class":2213},[2107,4550,4368],{"class":2297},[2107,4552,4553,4556,4559,4561,4563,4566],{"class":2109,"line":2522},[2107,4554,4555],{"class":2213},"  |",[2107,4557,4558],{"class":2113}," grep",[2107,4560,2194],{"class":2117},[2107,4562,3212],{"class":2213},[2107,4564,4565],{"class":2117},"\"\u002Fv1\u002Flocations[^\"]*\"",[2107,4567,4425],{"class":2213},[2053,4569,4570,4571,2964,4574,4577,4578,4581,4582,4586,4587,4590,4591,2959],{},"You should see ",[2057,4572,4573],{},"\"\u002Fv1\u002Flocations\u002Flocations\"",[2057,4575,4576],{},"\"\u002Fv1\u002Flocations\u002Flocations\u002F{id}\""," — the document keys carry the ",[2057,4579,4580],{},"\u002Fv1"," prefix. If your path is in there, so is your app — in the generated SDKs, in the ",[2062,4583,4585],{"href":4584},"\u002Fapi","API Explorer",", and in the MCP tool list. That document is the only place any of them read from, which is why a wrong ",[2057,4588,4589],{},"summary"," is fixed in the manifest and redeployed rather than anywhere else. See ",[2062,4592,4593],{"href":708},"The published OpenAPI document",[2087,4595,4597],{"id":4596},"when-something-does-not-answer","When something does not answer",[2937,4599,4600,4614,4629,4647,4661,4674,4692],{},[2940,4601,4602,4608,4609,2964,4612,2959],{},[2313,4603,4604,4607],{},[2057,4605,4606],{},"404"," on your path."," The install step did not run, or the route does not sit under the app's own prefix. Re-run ",[2057,4610,4611],{},"revenexx apps capabilities --write",[2057,4613,4209],{},[2940,4615,4616,4619,4620,3519,4623,4626,4627,2959],{},[2313,4617,4618],{},"A list never returns past page one."," The list capability declares no ",[2057,4621,4622],{},"limit",[2057,4624,4625],{},"offset"," parameters, so the gateway strips them. See ",[2062,4628,701],{"href":702},[2940,4630,4631,4640,4641,4644,4645,2959],{},[2313,4632,4633,4636,4637,4639],{},[2057,4634,4635],{},"400"," on a ",[2057,4638,4483],{}," you thought was fine."," You sent no body to a capability that declares a ",[2057,4642,4643],{},"request"," schema. Send ",[2057,4646,4422],{},[2940,4648,4649,4197,4655,4658,4659,2959],{},[2313,4650,4651,4654],{},[2057,4652,4653],{},"403"," on a write.",[2057,4656,4657],{},"manifest.permissions"," does not grant that operation on that entity. Add it, regenerate, redeploy. See ",[2062,4660,815],{"href":816},[2940,4662,4663,4666,4667,4670,4671,2959],{},[2313,4664,4665],{},"Token expired?"," Re-authenticate: ",[2057,4668,4669],{},"revenexx login",", or in CI ",[2057,4672,4673],{},"revenexx login --token \u003Cnew-token> --tenant \u003Cyour-tenant-slug>",[2940,4675,4676,4679,4680,4682,4683,4686,4687,2316,4689,2959],{},[2313,4677,4678],{},"Deployment failed?"," Find your app's id with ",[2057,4681,4224],{}," (apps get a generated id — the name won't work), then review the build: ",[2057,4684,4685],{},"revenexx apps list-deployments --function-id \u003Capp-id>",". Build logs are in Cockpit under ",[2313,4688,611],{},[2313,4690,4691],{},"My Apps",[2940,4693,4694,4697,4698,4701,4702,4705],{},[2313,4695,4696],{},"Can't find the CLI?"," Verify installation: ",[2057,4699,4700],{},"which revenexx"," (Unix) or ",[2057,4703,4704],{},"where.exe revenexx"," (Windows). If missing, reinstall.",[2087,4707,4709],{"id":4708},"where-to-go-next","Where to go next",[4711,4712,4713,4718,4723,4726],"card-group",{},[4714,4715,4717],"card",{"icon":4716,"title":796,"to":797},"i-lucide-lightbulb","What each generated file is for — dependencies, permissions, and events.",[4714,4719,4722],{"icon":4720,"title":4721,"to":95},"i-lucide-hammer","Build your first App, by hand","The same app built file by file, if you want to understand the scaffold rather than use it.",[4714,4724,4725],{"icon":1252,"title":1241,"to":1242},"Connect external systems with visual workflows.",[4714,4727,4730],{"icon":4728,"title":4729,"to":1424},"i-lucide-store","Storefronts","Build a customer-facing storefront on Nuxt 4.",[4732,4733,4734],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .su27w, html code.shiki .su27w{--shiki-light:#916B53;--shiki-default:#916B53;--shiki-dark:#916B53}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":2103,"searchDepth":2127,"depth":2127,"links":4736},[4737,4742,4743,4744,4750,4751,4752,4753,4757,4758,4759],{"id":2089,"depth":2127,"text":2090,"children":4738},[4739,4740,4741],{"id":2094,"depth":2228,"text":2095},{"id":2142,"depth":2228,"text":2143},{"id":2167,"depth":2228,"text":2168},{"id":2235,"depth":2127,"text":2236},{"id":2366,"depth":2127,"text":2367},{"id":2462,"depth":2127,"text":2463,"children":4745},[4746,4748],{"id":2466,"depth":2228,"text":4747},"schema.json — the tables you own",{"id":2997,"depth":2228,"text":4749},"src\u002Fmain.js — your function",{"id":4063,"depth":2127,"text":4064},{"id":4156,"depth":2127,"text":4157},{"id":4171,"depth":2127,"text":4172},{"id":4213,"depth":2127,"text":4214,"children":4754},[4755,4756],{"id":4217,"depth":2228,"text":4218},{"id":4290,"depth":2228,"text":4291},{"id":4501,"depth":2127,"text":4502},{"id":4596,"depth":2127,"text":4597},{"id":4708,"depth":2127,"text":4709},"From an empty directory to a live capability answering at api.revenexx.com — install the CLI, sign in, scaffold, deploy, verify.","md",null,{"status":4764},"published",{"title":70,"description":4760},{"loc":71},"R-O8wmqua-3gR6-mR1fMNDnQReDl8jyqBqjaVyJGHDs",1789752102499]