[{"data":1,"prerenderedAt":3179},["ShallowReactive",2],{"navigation_docs":3,"-docs-products-apps-manifest-reference":984},[4,8,44,50,86,583,625,918],{"title":5,"path":6,"stem":7},"Home","\u002Fdocs","docs\u002Findex",{"title":9,"path":10,"stem":11,"children":12},"API usage","\u002Fdocs\u002Fapi-usage","docs\u002Fapi-usage\u002Findex",[13,14,20,26,32,38],{"title":9,"path":10,"stem":11},{"title":15,"path":16,"stem":17,"children":18},"Errors","\u002Fdocs\u002Fapi-usage\u002Ferrors","docs\u002Fapi-usage\u002Ferrors\u002Findex",[19],{"title":15,"path":16,"stem":17},{"title":21,"path":22,"stem":23,"children":24},"Retries & idempotency","\u002Fdocs\u002Fapi-usage\u002Fidempotency","docs\u002Fapi-usage\u002Fidempotency\u002Findex",[25],{"title":21,"path":22,"stem":23},{"title":27,"path":28,"stem":29,"children":30},"Pagination & filtering","\u002Fdocs\u002Fapi-usage\u002Fpagination","docs\u002Fapi-usage\u002Fpagination\u002Findex",[31],{"title":27,"path":28,"stem":29},{"title":33,"path":34,"stem":35,"children":36},"Rate limits","\u002Fdocs\u002Fapi-usage\u002Frate-limits","docs\u002Fapi-usage\u002Frate-limits\u002Findex",[37],{"title":33,"path":34,"stem":35},{"title":39,"path":40,"stem":41,"children":42},"Versioning & stability","\u002Fdocs\u002Fapi-usage\u002Fversioning","docs\u002Fapi-usage\u002Fversioning\u002Findex",[43],{"title":39,"path":40,"stem":41},{"title":45,"path":46,"stem":47,"children":48},"What's new","\u002Fdocs\u002Fchangelog","docs\u002Fchangelog\u002Findex",[49],{"title":45,"path":46,"stem":47},{"title":51,"path":52,"stem":53,"children":54},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002Fgetting-started\u002Findex",[55,56,62,68,74,80],{"title":51,"path":52,"stem":53},{"title":57,"path":58,"stem":59,"children":60},"Architecture Overview","\u002Fdocs\u002Fgetting-started\u002Farchitecture","docs\u002Fgetting-started\u002Farchitecture\u002Findex",[61],{"title":57,"path":58,"stem":59},{"title":63,"path":64,"stem":65,"children":66},"Glossary","\u002Fdocs\u002Fgetting-started\u002Fglossary","docs\u002Fgetting-started\u002Fglossary\u002Findex",[67],{"title":63,"path":64,"stem":65},{"title":69,"path":70,"stem":71,"children":72},"Platform Overview","\u002Fdocs\u002Fgetting-started\u002Fplatform-overview","docs\u002Fgetting-started\u002Fplatform-overview\u002Findex",[73],{"title":69,"path":70,"stem":71},{"title":75,"path":76,"stem":77,"children":78},"Prerequisites","\u002Fdocs\u002Fgetting-started\u002Fprerequisites","docs\u002Fgetting-started\u002Fprerequisites\u002Findex",[79],{"title":75,"path":76,"stem":77},{"title":81,"path":82,"stem":83,"children":84},"Your First App in 15 Minutes","\u002Fdocs\u002Fgetting-started\u002Fquick-start","docs\u002Fgetting-started\u002Fquick-start\u002Findex",[85],{"title":81,"path":82,"stem":83},{"title":87,"path":88,"stem":89,"children":90},"Products","\u002Fdocs\u002Fproducts","docs\u002Fproducts\u002Findex",[91,92,98,170,200,218,254,320,517,565],{"title":87,"path":88,"stem":89},{"title":93,"path":94,"stem":95,"children":96},"AI Studio","\u002Fdocs\u002Fproducts\u002Fai","docs\u002Fproducts\u002Fai\u002Findex",[97],{"title":93,"path":94,"stem":95},{"title":99,"path":100,"stem":101,"children":102},"App Studio","\u002Fdocs\u002Fproducts\u002Fapps","docs\u002Fproducts\u002Fapps\u002Findex",[103,104,110,116,122,128,134,140,146,152,158,164],{"title":99,"path":100,"stem":101},{"title":105,"path":106,"stem":107,"children":108},"App Model","\u002Fdocs\u002Fproducts\u002Fapps\u002Fapp-model","docs\u002Fproducts\u002Fapps\u002Fapp-model\u002Findex",[109],{"title":105,"path":106,"stem":107},{"title":111,"path":112,"stem":113,"children":114},"Auto-generated data APIs","\u002Fdocs\u002Fproducts\u002Fapps\u002Fauto-generated-data-apis","docs\u002Fproducts\u002Fapps\u002Fauto-generated-data-apis\u002Findex",[115],{"title":111,"path":112,"stem":113},{"title":117,"path":118,"stem":119,"children":120},"Billing & Events","\u002Fdocs\u002Fproducts\u002Fapps\u002Fbilling-events","docs\u002Fproducts\u002Fapps\u002Fbilling-events\u002Findex",[121],{"title":117,"path":118,"stem":119},{"title":123,"path":124,"stem":125,"children":126},"Cockpit Integration","\u002Fdocs\u002Fproducts\u002Fapps\u002Fcockpit-integration","docs\u002Fproducts\u002Fapps\u002Fcockpit-integration\u002Findex",[127],{"title":123,"path":124,"stem":125},{"title":129,"path":130,"stem":131,"children":132},"App Model Concept","\u002Fdocs\u002Fproducts\u002Fapps\u002Fconcept","docs\u002Fproducts\u002Fapps\u002Fconcept\u002Findex",[133],{"title":129,"path":130,"stem":131},{"title":135,"path":136,"stem":137,"children":138},"App Lifecycle","\u002Fdocs\u002Fproducts\u002Fapps\u002Flifecycle","docs\u002Fproducts\u002Fapps\u002Flifecycle\u002Findex",[139],{"title":135,"path":136,"stem":137},{"title":141,"path":142,"stem":143,"children":144},"Manifest Reference","\u002Fdocs\u002Fproducts\u002Fapps\u002Fmanifest-reference","docs\u002Fproducts\u002Fapps\u002Fmanifest-reference\u002Findex",[145],{"title":141,"path":142,"stem":143},{"title":147,"path":148,"stem":149,"children":150},"Market Concept","\u002Fdocs\u002Fproducts\u002Fapps\u002Fmarket-concept","docs\u002Fproducts\u002Fapps\u002Fmarket-concept\u002Findex",[151],{"title":147,"path":148,"stem":149},{"title":153,"path":154,"stem":155,"children":156},"Policies","\u002Fdocs\u002Fproducts\u002Fapps\u002Fpolicies","docs\u002Fproducts\u002Fapps\u002Fpolicies\u002Findex",[157],{"title":153,"path":154,"stem":155},{"title":159,"path":160,"stem":161,"children":162},"Schema migrations","\u002Fdocs\u002Fproducts\u002Fapps\u002Fschema-migrator","docs\u002Fproducts\u002Fapps\u002Fschema-migrator\u002Findex",[163],{"title":159,"path":160,"stem":161},{"title":165,"path":166,"stem":167,"children":168},"Schema Reference","\u002Fdocs\u002Fproducts\u002Fapps\u002Fschema-reference","docs\u002Fproducts\u002Fapps\u002Fschema-reference\u002Findex",[169],{"title":165,"path":166,"stem":167},{"title":171,"path":172,"stem":173,"children":174},"Authentication","\u002Fdocs\u002Fproducts\u002Fauth","docs\u002Fproducts\u002Fauth\u002Findex",[175,176,182,188,194],{"title":171,"path":172,"stem":173},{"title":177,"path":178,"stem":179,"children":180},"API keys","\u002Fdocs\u002Fproducts\u002Fauth\u002Fapi-keys","docs\u002Fproducts\u002Fauth\u002Fapi-keys\u002Findex",[181],{"title":177,"path":178,"stem":179},{"title":183,"path":184,"stem":185,"children":186},"Multi-factor authentication","\u002Fdocs\u002Fproducts\u002Fauth\u002Fmfa","docs\u002Fproducts\u002Fauth\u002Fmfa\u002Findex",[187],{"title":183,"path":184,"stem":185},{"title":189,"path":190,"stem":191,"children":192},"Social sign-in","\u002Fdocs\u002Fproducts\u002Fauth\u002Foauth2","docs\u002Fproducts\u002Fauth\u002Foauth2\u002Findex",[193],{"title":189,"path":190,"stem":191},{"title":195,"path":196,"stem":197,"children":198},"Sessions","\u002Fdocs\u002Fproducts\u002Fauth\u002Fsessions","docs\u002Fproducts\u002Fauth\u002Fsessions\u002Findex",[199],{"title":195,"path":196,"stem":197},{"title":201,"path":202,"stem":203,"children":204},"Events","\u002Fdocs\u002Fproducts\u002Fevents","docs\u002Fproducts\u002Fevents\u002Findex",[205,206,212],{"title":201,"path":202,"stem":203},{"title":207,"path":208,"stem":209,"children":210},"Consuming events","\u002Fdocs\u002Fproducts\u002Fevents\u002Fconsuming-events","docs\u002Fproducts\u002Fevents\u002Fconsuming-events\u002Findex",[211],{"title":207,"path":208,"stem":209},{"title":213,"path":214,"stem":215,"children":216},"Event types","\u002Fdocs\u002Fproducts\u002Fevents\u002Fevent-types","docs\u002Fproducts\u002Fevents\u002Fevent-types\u002Findex",[217],{"title":213,"path":214,"stem":215},{"title":219,"path":220,"stem":221,"children":222},"Integration Studio","\u002Fdocs\u002Fproducts\u002Fintegration-studio","docs\u002Fproducts\u002Fintegration-studio\u002Findex",[223,224,230,236,242,248],{"title":219,"path":220,"stem":221},{"title":225,"path":226,"stem":227,"children":228},"Expression Syntax","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fexpression-syntax","docs\u002Fproducts\u002Fintegration-studio\u002Fexpression-syntax\u002Findex",[229],{"title":225,"path":226,"stem":227},{"title":231,"path":232,"stem":233,"children":234},"Node Types","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fnode-types","docs\u002Fproducts\u002Fintegration-studio\u002Fnode-types\u002Findex",[235],{"title":231,"path":232,"stem":233},{"title":237,"path":238,"stem":239,"children":240},"Dual-engine architecture","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Foverview","docs\u002Fproducts\u002Fintegration-studio\u002Foverview\u002Findex",[241],{"title":237,"path":238,"stem":239},{"title":243,"path":244,"stem":245,"children":246},"Triggers","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Ftriggers","docs\u002Fproducts\u002Fintegration-studio\u002Ftriggers\u002Findex",[247],{"title":243,"path":244,"stem":245},{"title":249,"path":250,"stem":251,"children":252},"Workflow Builder","\u002Fdocs\u002Fproducts\u002Fintegration-studio\u002Fworkflow-builder","docs\u002Fproducts\u002Fintegration-studio\u002Fworkflow-builder\u002Findex",[253],{"title":249,"path":250,"stem":251},{"title":255,"path":256,"stem":257,"children":258},"Network","\u002Fdocs\u002Fproducts\u002Fnetwork","docs\u002Fproducts\u002Fnetwork\u002Findex",[259,260,266,272,278,284,290,296,302,308,314],{"title":255,"path":256,"stem":257},{"title":261,"path":262,"stem":263,"children":264},"Caching","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fcaching","docs\u002Fproducts\u002Fnetwork\u002Fcaching\u002Findex",[265],{"title":261,"path":262,"stem":263},{"title":267,"path":268,"stem":269,"children":270},"Content delivery (CDN)","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fcdn","docs\u002Fproducts\u002Fnetwork\u002Fcdn\u002Findex",[271],{"title":267,"path":268,"stem":269},{"title":273,"path":274,"stem":275,"children":276},"Compression","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fcompression","docs\u002Fproducts\u002Fnetwork\u002Fcompression\u002Findex",[277],{"title":273,"path":274,"stem":275},{"title":279,"path":280,"stem":281,"children":282},"DDoS mitigation","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fddos","docs\u002Fproducts\u002Fnetwork\u002Fddos\u002Findex",[283],{"title":279,"path":280,"stem":281},{"title":285,"path":286,"stem":287,"children":288},"revenexx DNS service","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fdns","docs\u002Fproducts\u002Fnetwork\u002Fdns\u002Findex",[289],{"title":285,"path":286,"stem":287},{"title":291,"path":292,"stem":293,"children":294},"Edges","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fedges","docs\u002Fproducts\u002Fnetwork\u002Fedges\u002Findex",[295],{"title":291,"path":292,"stem":293},{"title":297,"path":298,"stem":299,"children":300},"Endpoints","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fendpoints","docs\u002Fproducts\u002Fnetwork\u002Fendpoints\u002Findex",[301],{"title":297,"path":298,"stem":299},{"title":303,"path":304,"stem":305,"children":306},"Regions","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fregions","docs\u002Fproducts\u002Fnetwork\u002Fregions\u002Findex",[307],{"title":303,"path":304,"stem":305},{"title":309,"path":310,"stem":311,"children":312},"Transport Layer Security (TLS)","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Ftls","docs\u002Fproducts\u002Fnetwork\u002Ftls\u002Findex",[313],{"title":309,"path":310,"stem":311},{"title":315,"path":316,"stem":317,"children":318},"Web application firewall (WAF)","\u002Fdocs\u002Fproducts\u002Fnetwork\u002Fwaf","docs\u002Fproducts\u002Fnetwork\u002Fwaf\u002Findex",[319],{"title":315,"path":316,"stem":317},{"title":321,"path":322,"stem":323,"children":324},"Experience Studio","\u002Fdocs\u002Fproducts\u002Fsites","docs\u002Fproducts\u002Fsites\u002Findex",[325,326,332,337,343,349,355,361,367,373,379,385,391,397,403,409,487,505,511],{"title":321,"path":322,"stem":323},{"title":327,"path":328,"stem":329,"children":330},"Storefront Architecture","\u002Fdocs\u002Fproducts\u002Fsites\u002Farchitecture","docs\u002Fproducts\u002Fsites\u002Farchitecture\u002Findex",[331],{"title":327,"path":328,"stem":329},{"title":171,"path":333,"stem":334,"children":335},"\u002Fdocs\u002Fproducts\u002Fsites\u002Fauthentication","docs\u002Fproducts\u002Fsites\u002Fauthentication\u002Findex",[336],{"title":171,"path":333,"stem":334},{"title":338,"path":339,"stem":340,"children":341},"Blökkli Blocks","\u002Fdocs\u002Fproducts\u002Fsites\u002Fblokki-blocks","docs\u002Fproducts\u002Fsites\u002Fblokki-blocks\u002Findex",[342],{"title":338,"path":339,"stem":340},{"title":344,"path":345,"stem":346,"children":347},"Checkout","\u002Fdocs\u002Fproducts\u002Fsites\u002Fcheckout","docs\u002Fproducts\u002Fsites\u002Fcheckout\u002Findex",[348],{"title":344,"path":345,"stem":346},{"title":350,"path":351,"stem":352,"children":353},"Deploy from CLI","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeploy-from-cli","docs\u002Fproducts\u002Fsites\u002Fdeploy-from-cli\u002Findex",[354],{"title":350,"path":351,"stem":352},{"title":356,"path":357,"stem":358,"children":359},"Deploy from Git","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeploy-from-git","docs\u002Fproducts\u002Fsites\u002Fdeploy-from-git\u002Findex",[360],{"title":356,"path":357,"stem":358},{"title":362,"path":363,"stem":364,"children":365},"Deploy manually","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeploy-manually","docs\u002Fproducts\u002Fsites\u002Fdeploy-manually\u002Findex",[366],{"title":362,"path":363,"stem":364},{"title":368,"path":369,"stem":370,"children":371},"Deployments","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdeployments","docs\u002Fproducts\u002Fsites\u002Fdeployments\u002Findex",[372],{"title":368,"path":369,"stem":370},{"title":374,"path":375,"stem":376,"children":377},"Develop revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdevelop","docs\u002Fproducts\u002Fsites\u002Fdevelop\u002Findex",[378],{"title":374,"path":375,"stem":376},{"title":380,"path":381,"stem":382,"children":383},"Domains","\u002Fdocs\u002Fproducts\u002Fsites\u002Fdomains","docs\u002Fproducts\u002Fsites\u002Fdomains\u002Findex",[384],{"title":380,"path":381,"stem":382},{"title":386,"path":387,"stem":388,"children":389},"Frameworks","\u002Fdocs\u002Fproducts\u002Fsites\u002Fframeworks","docs\u002Fproducts\u002Fsites\u002Fframeworks\u002Findex",[390],{"title":386,"path":387,"stem":388},{"title":392,"path":393,"stem":394,"children":395},"Instant rollbacks","\u002Fdocs\u002Fproducts\u002Fsites\u002Finstant-rollbacks","docs\u002Fproducts\u002Fsites\u002Finstant-rollbacks\u002Findex",[396],{"title":392,"path":393,"stem":394},{"title":398,"path":399,"stem":400,"children":401},"Logs","\u002Fdocs\u002Fproducts\u002Fsites\u002Flogs","docs\u002Fproducts\u002Fsites\u002Flogs\u002Findex",[402],{"title":398,"path":399,"stem":400},{"title":404,"path":405,"stem":406,"children":407},"Previews","\u002Fdocs\u002Fproducts\u002Fsites\u002Fpreviews","docs\u002Fproducts\u002Fsites\u002Fpreviews\u002Findex",[408],{"title":404,"path":405,"stem":406},{"title":410,"path":411,"stem":412,"children":413},"Start with Sites","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Findex",[414,415,421,427,433,439,445,451,457,463,469,475,481],{"title":410,"path":411,"stem":412},{"title":416,"path":417,"stem":418,"children":419},"Deploy an Angular app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fangular","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fangular\u002Findex",[420],{"title":416,"path":417,"stem":418},{"title":422,"path":423,"stem":424,"children":425},"Deploy a Astro app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fastro","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fastro\u002Findex",[426],{"title":422,"path":423,"stem":424},{"title":428,"path":429,"stem":430,"children":431},"Deploy a Flutter Web app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fflutter","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fflutter\u002Findex",[432],{"title":428,"path":429,"stem":430},{"title":434,"path":435,"stem":436,"children":437},"Deploy a Next.js app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnextjs","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnextjs\u002Findex",[438],{"title":434,"path":435,"stem":436},{"title":440,"path":441,"stem":442,"children":443},"Deploy a Nuxt app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnuxt","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fnuxt\u002Findex",[444],{"title":440,"path":441,"stem":442},{"title":446,"path":447,"stem":448,"children":449},"Deploy a React Native app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact-native","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact-native\u002Findex",[450],{"title":446,"path":447,"stem":448},{"title":452,"path":453,"stem":454,"children":455},"Deploy a React app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Freact\u002Findex",[456],{"title":452,"path":453,"stem":454},{"title":458,"path":459,"stem":460,"children":461},"Deploy a Remix app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fremix","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fremix\u002Findex",[462],{"title":458,"path":459,"stem":460},{"title":464,"path":465,"stem":466,"children":467},"Deploy a SvelteKit app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fsveltekit","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fsveltekit\u002Findex",[468],{"title":464,"path":465,"stem":466},{"title":470,"path":471,"stem":472,"children":473},"Deploy a TanStack Start app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Ftanstack-start","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Ftanstack-start\u002Findex",[474],{"title":470,"path":471,"stem":472},{"title":476,"path":477,"stem":478,"children":479},"Deploy a Vanilla JS app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvanilla","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvanilla\u002Findex",[480],{"title":476,"path":477,"stem":478},{"title":482,"path":483,"stem":484,"children":485},"Deploy a Vue.js app to revenexx Storefronts","\u002Fdocs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvue","docs\u002Fproducts\u002Fsites\u002Fquick-start\u002Fvue\u002Findex",[486],{"title":482,"path":483,"stem":484},{"title":488,"path":489,"stem":490,"children":491},"Rendering","\u002Fdocs\u002Fproducts\u002Fsites\u002Frendering","docs\u002Fproducts\u002Fsites\u002Frendering\u002Findex",[492,493,499],{"title":488,"path":489,"stem":490},{"title":494,"path":495,"stem":496,"children":497},"Server Side Rendering","\u002Fdocs\u002Fproducts\u002Fsites\u002Frendering\u002Fssr","docs\u002Fproducts\u002Fsites\u002Frendering\u002Fssr\u002Findex",[498],{"title":494,"path":495,"stem":496},{"title":500,"path":501,"stem":502,"children":503},"Static","\u002Fdocs\u002Fproducts\u002Fsites\u002Frendering\u002Fstatic","docs\u002Fproducts\u002Fsites\u002Frendering\u002Fstatic\u002Findex",[504],{"title":500,"path":501,"stem":502},{"title":506,"path":507,"stem":508,"children":509},"Templates","\u002Fdocs\u002Fproducts\u002Fsites\u002Ftemplates","docs\u002Fproducts\u002Fsites\u002Ftemplates\u002Findex",[510],{"title":506,"path":507,"stem":508},{"title":512,"path":513,"stem":514,"children":515},"Theming","\u002Fdocs\u002Fproducts\u002Fsites\u002Ftheming","docs\u002Fproducts\u002Fsites\u002Ftheming\u002Findex",[516],{"title":512,"path":513,"stem":514},{"title":518,"path":519,"stem":520,"children":521},"Storage","\u002Fdocs\u002Fproducts\u002Fstorage","docs\u002Fproducts\u002Fstorage\u002Findex",[522,523,529,535,541,547,553,559],{"title":518,"path":519,"stem":520},{"title":524,"path":525,"stem":526,"children":527},"Folders","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fbuckets","docs\u002Fproducts\u002Fstorage\u002Fbuckets\u002Findex",[528],{"title":524,"path":525,"stem":526},{"title":530,"path":531,"stem":532,"children":533},"Signed URLs and access","\u002Fdocs\u002Fproducts\u002Fstorage\u002Ffile-tokens","docs\u002Fproducts\u002Fstorage\u002Ffile-tokens\u002Findex",[534],{"title":530,"path":531,"stem":532},{"title":536,"path":537,"stem":538,"children":539},"Serve and transform images","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fimages","docs\u002Fproducts\u002Fstorage\u002Fimages\u002Findex",[540],{"title":536,"path":537,"stem":538},{"title":542,"path":543,"stem":544,"children":545},"3D assets","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fmodel-viewer","docs\u002Fproducts\u002Fstorage\u002Fmodel-viewer\u002Findex",[546],{"title":542,"path":543,"stem":544},{"title":548,"path":549,"stem":550,"children":551},"Access control and visibility","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fpermissions","docs\u002Fproducts\u002Fstorage\u002Fpermissions\u002Findex",[552],{"title":548,"path":549,"stem":550},{"title":554,"path":555,"stem":556,"children":557},"Quick start","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fquick-start","docs\u002Fproducts\u002Fstorage\u002Fquick-start\u002Findex",[558],{"title":554,"path":555,"stem":556},{"title":560,"path":561,"stem":562,"children":563},"Upload and manage files","\u002Fdocs\u002Fproducts\u002Fstorage\u002Fupload-download","docs\u002Fproducts\u002Fstorage\u002Fupload-download\u002Findex",[564],{"title":560,"path":561,"stem":562},{"title":566,"path":567,"stem":568,"children":569},"Webhooks","\u002Fdocs\u002Fproducts\u002Fwebhooks","docs\u002Fproducts\u002Fwebhooks\u002Findex",[570,571,577],{"title":566,"path":567,"stem":568},{"title":572,"path":573,"stem":574,"children":575},"Delivery","\u002Fdocs\u002Fproducts\u002Fwebhooks\u002Fdelivery","docs\u002Fproducts\u002Fwebhooks\u002Fdelivery\u002Findex",[576],{"title":572,"path":573,"stem":574},{"title":578,"path":579,"stem":580,"children":581},"Security","\u002Fdocs\u002Fproducts\u002Fwebhooks\u002Fsecurity","docs\u002Fproducts\u002Fwebhooks\u002Fsecurity\u002Findex",[582],{"title":578,"path":579,"stem":580},{"title":584,"path":585,"stem":586,"children":587},"SDKs","\u002Fdocs\u002Fsdks","docs\u002Fsdks\u002Findex",[588,589,595,601,607,613,619],{"title":584,"path":585,"stem":586},{"title":590,"path":591,"stem":592,"children":593},"App SDK","\u002Fdocs\u002Fsdks\u002Fapp-sdk","docs\u002Fsdks\u002Fapp-sdk\u002Findex",[594],{"title":590,"path":591,"stem":592},{"title":596,"path":597,"stem":598,"children":599},"CLI","\u002Fdocs\u002Fsdks\u002Fcli","docs\u002Fsdks\u002Fcli\u002Findex",[600],{"title":596,"path":597,"stem":598},{"title":602,"path":603,"stem":604,"children":605},"Integration Node SDK","\u002Fdocs\u002Fsdks\u002Fintegration-nodes","docs\u002Fsdks\u002Fintegration-nodes\u002Findex",[606],{"title":602,"path":603,"stem":604},{"title":608,"path":609,"stem":610,"children":611},"Node SDK","\u002Fdocs\u002Fsdks\u002Fnode","docs\u002Fsdks\u002Fnode\u002Findex",[612],{"title":608,"path":609,"stem":610},{"title":614,"path":615,"stem":616,"children":617},"PHP SDK","\u002Fdocs\u002Fsdks\u002Fphp","docs\u002Fsdks\u002Fphp\u002Findex",[618],{"title":614,"path":615,"stem":616},{"title":620,"path":621,"stem":622,"children":623},"Web \u002F JavaScript SDK","\u002Fdocs\u002Fsdks\u002Fweb","docs\u002Fsdks\u002Fweb\u002Findex",[624],{"title":620,"path":621,"stem":622},{"title":626,"path":627,"stem":628,"children":629},"Tooling","\u002Fdocs\u002Ftooling","docs\u002Ftooling\u002Findex",[630,631,637,864],{"title":626,"path":627,"stem":628},{"title":632,"path":633,"stem":634,"children":635},"Command Center","\u002Fdocs\u002Ftooling\u002Fcommand-center","docs\u002Ftooling\u002Fcommand-center\u002Findex",[636],{"title":632,"path":633,"stem":634},{"title":638,"path":639,"stem":640,"children":641},"Command line","\u002Fdocs\u002Ftooling\u002Fcommand-line","docs\u002Ftooling\u002Fcommand-line\u002Findex",[642,643,649,654,660,666,672,678,684,828,834,840,846,852,858],{"title":638,"path":639,"stem":640},{"title":644,"path":645,"stem":646,"children":647},"Aliases","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Faliases","docs\u002Ftooling\u002Fcommand-line\u002Faliases\u002Findex",[648],{"title":644,"path":645,"stem":646},{"title":171,"path":650,"stem":651,"children":652},"\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fauthentication","docs\u002Ftooling\u002Fcommand-line\u002Fauthentication\u002Findex",[653],{"title":171,"path":650,"stem":651},{"title":655,"path":656,"stem":657,"children":658},"Commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fcommands","docs\u002Ftooling\u002Fcommand-line\u002Fcommands\u002Findex",[659],{"title":655,"path":656,"stem":657},{"title":661,"path":662,"stem":663,"children":664},"Installation","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Finstallation","docs\u002Ftooling\u002Fcommand-line\u002Finstallation\u002Findex",[665],{"title":661,"path":662,"stem":663},{"title":667,"path":668,"stem":669,"children":670},"Interactive use","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Finteractive","docs\u002Ftooling\u002Fcommand-line\u002Finteractive\u002Findex",[671],{"title":667,"path":668,"stem":669},{"title":673,"path":674,"stem":675,"children":676},"Non-interactive use","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fnon-interactive","docs\u002Ftooling\u002Fcommand-line\u002Fnon-interactive\u002Findex",[677],{"title":673,"path":674,"stem":675},{"title":679,"path":680,"stem":681,"children":682},"Project configuration","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fproject-configuration","docs\u002Ftooling\u002Fcommand-line\u002Fproject-configuration\u002Findex",[683],{"title":679,"path":680,"stem":681},{"title":685,"path":686,"stem":687,"children":688},"Command reference","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Findex",[689,690,696,702,708,714,720,726,732,738,744,750,756,762,768,774,780,786,792,798,804,810,816,822],{"title":685,"path":686,"stem":687},{"title":691,"path":692,"stem":693,"children":694},"About commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fabout","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fabout\u002Findex",[695],{"title":691,"path":692,"stem":693},{"title":697,"path":698,"stem":699,"children":700},"Apps commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fapps","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fapps\u002Findex",[701],{"title":697,"path":698,"stem":699},{"title":703,"path":704,"stem":705,"children":706},"Carts commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcarts","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcarts\u002Findex",[707],{"title":703,"path":704,"stem":705},{"title":709,"path":710,"stem":711,"children":712},"Channels commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fchannels","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fchannels\u002Findex",[713],{"title":709,"path":710,"stem":711},{"title":715,"path":716,"stem":717,"children":718},"Create commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcreate","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcreate\u002Findex",[719],{"title":715,"path":716,"stem":717},{"title":721,"path":722,"stem":723,"children":724},"Customers commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcustomers","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fcustomers\u002Findex",[725],{"title":721,"path":722,"stem":723},{"title":727,"path":728,"stem":729,"children":730},"Deploy commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fdeploy","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fdeploy\u002Findex",[731],{"title":727,"path":728,"stem":729},{"title":733,"path":734,"stem":735,"children":736},"Forms commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fforms","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fforms\u002Findex",[737],{"title":733,"path":734,"stem":735},{"title":739,"path":740,"stem":741,"children":742},"Inventories commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Finventories","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Finventories\u002Findex",[743],{"title":739,"path":740,"stem":741},{"title":745,"path":746,"stem":747,"children":748},"Markets commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fmarkets","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fmarkets\u002Findex",[749],{"title":745,"path":746,"stem":747},{"title":751,"path":752,"stem":753,"children":754},"Order lists commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forderlists","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forderlists\u002Findex",[755],{"title":751,"path":752,"stem":753},{"title":757,"path":758,"stem":759,"children":760},"Orders commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forders","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Forders\u002Findex",[761],{"title":757,"path":758,"stem":759},{"title":763,"path":764,"stem":765,"children":766},"Pages commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpages","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpages\u002Findex",[767],{"title":763,"path":764,"stem":765},{"title":769,"path":770,"stem":771,"children":772},"Payments commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpayments","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fpayments\u002Findex",[773],{"title":769,"path":770,"stem":771},{"title":775,"path":776,"stem":777,"children":778},"Prices commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fprices","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fprices\u002Findex",[779],{"title":775,"path":776,"stem":777},{"title":781,"path":782,"stem":783,"children":784},"Products commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fproducts","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fproducts\u002Findex",[785],{"title":781,"path":782,"stem":783},{"title":787,"path":788,"stem":789,"children":790},"Search commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsearch","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsearch\u002Findex",[791],{"title":787,"path":788,"stem":789},{"title":793,"path":794,"stem":795,"children":796},"Settings commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsettings","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsettings\u002Findex",[797],{"title":793,"path":794,"stem":795},{"title":799,"path":800,"stem":801,"children":802},"Shipping commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fshipping","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fshipping\u002Findex",[803],{"title":799,"path":800,"stem":801},{"title":805,"path":806,"stem":807,"children":808},"Sites commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsites","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fsites\u002Findex",[809],{"title":805,"path":806,"stem":807},{"title":811,"path":812,"stem":813,"children":814},"Skills commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fskills","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fskills\u002Findex",[815],{"title":811,"path":812,"stem":813},{"title":817,"path":818,"stem":819,"children":820},"Storage commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fstorage","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Fstorage\u002Findex",[821],{"title":817,"path":818,"stem":819},{"title":823,"path":824,"stem":825,"children":826},"Tokens commands","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Freference\u002Ftokens","docs\u002Ftooling\u002Fcommand-line\u002Freference\u002Ftokens\u002Findex",[827],{"title":823,"path":824,"stem":825},{"title":829,"path":830,"stem":831,"children":832},"Interactive shell (REPL)","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Frepl","docs\u002Ftooling\u002Fcommand-line\u002Frepl\u002Findex",[833],{"title":829,"path":830,"stem":831},{"title":835,"path":836,"stem":837,"children":838},"Scaffolding","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fscaffolding","docs\u002Ftooling\u002Fcommand-line\u002Fscaffolding\u002Findex",[839],{"title":835,"path":836,"stem":837},{"title":841,"path":842,"stem":843,"children":844},"Scripting & output","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fscripting","docs\u002Ftooling\u002Fcommand-line\u002Fscripting\u002Findex",[845],{"title":841,"path":842,"stem":843},{"title":847,"path":848,"stem":849,"children":850},"Skills","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Fskills","docs\u002Ftooling\u002Fcommand-line\u002Fskills\u002Findex",[851],{"title":847,"path":848,"stem":849},{"title":853,"path":854,"stem":855,"children":856},"Full-screen app (TUI)","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Ftui","docs\u002Ftooling\u002Fcommand-line\u002Ftui\u002Findex",[857],{"title":853,"path":854,"stem":855},{"title":859,"path":860,"stem":861,"children":862},"Type generation","\u002Fdocs\u002Ftooling\u002Fcommand-line\u002Ftype-generation","docs\u002Ftooling\u002Fcommand-line\u002Ftype-generation\u002Findex",[863],{"title":859,"path":860,"stem":861},{"title":865,"path":866,"stem":867,"children":868},"Model Context Protocol","\u002Fdocs\u002Ftooling\u002Fmcp","docs\u002Ftooling\u002Fmcp\u002Findex",[869,870,876,882,888,894,900,906,912],{"title":865,"path":866,"stem":867},{"title":871,"path":872,"stem":873,"children":874},"revenexx docs MCP in Google Antigravity","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fantigravity","docs\u002Ftooling\u002Fmcp\u002Fantigravity\u002Findex",[875],{"title":871,"path":872,"stem":873},{"title":877,"path":878,"stem":879,"children":880},"revenexx docs MCP in Claude Code","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fclaude-code","docs\u002Ftooling\u002Fmcp\u002Fclaude-code\u002Findex",[881],{"title":877,"path":878,"stem":879},{"title":883,"path":884,"stem":885,"children":886},"revenexx docs MCP in Claude Desktop","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fclaude-desktop","docs\u002Ftooling\u002Fmcp\u002Fclaude-desktop\u002Findex",[887],{"title":883,"path":884,"stem":885},{"title":889,"path":890,"stem":891,"children":892},"revenexx docs MCP in Cursor","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fcursor","docs\u002Ftooling\u002Fmcp\u002Fcursor\u002Findex",[893],{"title":889,"path":890,"stem":891},{"title":895,"path":896,"stem":897,"children":898},"revenexx docs MCP in OpenCode","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fopencode","docs\u002Ftooling\u002Fmcp\u002Fopencode\u002Findex",[899],{"title":895,"path":896,"stem":897},{"title":901,"path":902,"stem":903,"children":904},"revenexx docs MCP in VS Code","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fvscode","docs\u002Ftooling\u002Fmcp\u002Fvscode\u002Findex",[905],{"title":901,"path":902,"stem":903},{"title":907,"path":908,"stem":909,"children":910},"revenexx docs MCP in Windsurf","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fwindsurf","docs\u002Ftooling\u002Fmcp\u002Fwindsurf\u002Findex",[911],{"title":907,"path":908,"stem":909},{"title":913,"path":914,"stem":915,"children":916},"revenexx docs MCP in Zenflow","\u002Fdocs\u002Ftooling\u002Fmcp\u002Fzenflow","docs\u002Ftooling\u002Fmcp\u002Fzenflow\u002Findex",[917],{"title":913,"path":914,"stem":915},{"title":919,"path":920,"stem":921,"children":922},"Tutorials","\u002Fdocs\u002Ftutorials","docs\u002Ftutorials\u002Findex",[923,924,948,954],{"title":919,"path":920,"stem":921},{"title":925,"path":926,"stem":927,"children":928},"Build a revenexx App","\u002Fdocs\u002Ftutorials\u002Fapps","docs\u002Ftutorials\u002Fapps\u002Findex",[929,930,936,942],{"title":925,"path":926,"stem":927},{"title":931,"path":932,"stem":933,"children":934},"Add a data model","\u002Fdocs\u002Ftutorials\u002Fapps\u002Fadd-a-data-model","docs\u002Ftutorials\u002Fapps\u002Fadd-a-data-model\u002Findex",[935],{"title":931,"path":932,"stem":933},{"title":937,"path":938,"stem":939,"children":940},"Build your first app","\u002Fdocs\u002Ftutorials\u002Fapps\u002Fbuild-your-first-app","docs\u002Ftutorials\u002Fapps\u002Fbuild-your-first-app\u002Findex",[941],{"title":937,"path":938,"stem":939},{"title":943,"path":944,"stem":945,"children":946},"Deploy with the CLI","\u002Fdocs\u002Ftutorials\u002Fapps\u002Fdeploy-with-the-cli","docs\u002Ftutorials\u002Fapps\u002Fdeploy-with-the-cli\u002Findex",[947],{"title":943,"path":944,"stem":945},{"title":949,"path":950,"stem":951,"children":952},"Examples","\u002Fdocs\u002Ftutorials\u002Fexamples","docs\u002Ftutorials\u002Fexamples\u002Findex",[953],{"title":949,"path":950,"stem":951},{"title":955,"path":956,"stem":957,"children":958},"Build a storefront Theme","\u002Fdocs\u002Ftutorials\u002Fthemes","docs\u002Ftutorials\u002Fthemes\u002Findex",[959,960,966,972,978],{"title":955,"path":956,"stem":957},{"title":961,"path":962,"stem":963,"children":964},"Build your first Theme","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Fbuild-your-first-theme","docs\u002Ftutorials\u002Fthemes\u002Fbuild-your-first-theme\u002Findex",[965],{"title":961,"path":962,"stem":963},{"title":967,"path":968,"stem":969,"children":970},"Customize blocks","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Fcustomize-blocks","docs\u002Ftutorials\u002Fthemes\u002Fcustomize-blocks\u002Findex",[971],{"title":967,"path":968,"stem":969},{"title":973,"path":974,"stem":975,"children":976},"Deploy your storefront","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Fdeploy-your-storefront","docs\u002Ftutorials\u002Fthemes\u002Fdeploy-your-storefront\u002Findex",[977],{"title":973,"path":974,"stem":975},{"title":979,"path":980,"stem":981,"children":982},"Theme tokens and styling","\u002Fdocs\u002Ftutorials\u002Fthemes\u002Ftheme-tokens-and-styling","docs\u002Ftutorials\u002Fthemes\u002Ftheme-tokens-and-styling\u002Findex",[983],{"title":979,"path":980,"stem":981},{"id":985,"title":141,"body":986,"description":3170,"extension":3171,"landing":3172,"links":3172,"meta":3173,"navigation":3175,"path":142,"seo":3176,"sitemap":3177,"stem":143,"__hash__":3178},"docs\u002Fdocs\u002Fproducts\u002Fapps\u002Fmanifest-reference\u002Findex.md",{"type":987,"value":988,"toc":3157},"minimark",[989,1019,1024,1056,1062,1067,1070,1966,1970,1975,2093,2095,2098,2102,2108,2172,2175,2200,2207,2210,2217,2257,2260,2262,2273,2448,2451,2501,2513,2517,2520,2522,2525,2612,2642,2644,2647,2718,2720,2734,2797,2801,2804,2867,2869,2885,2889,2894,2951,2954,2959,3016,3019,3043,3047,3054,3070,3074,3081,3097,3103,3123,3127,3153],[990,991,992,993,997,998,1002,1003,1007,1008,1010,1011,1014,1015,1018],"p",{},"This is the field-by-field reference for ",[994,995,996],"code",{},"manifest.json"," — for ",[999,1000,1001],"strong",{},"app developers"," writing or reviewing a manifest. If you're new to apps and haven't seen a complete manifest in context yet, read ",[1004,1005,129],"a",{"href":1006},"\u002Fdocs\u002Fproducts\u002Fapps\u002Fconcept\u002F"," first; the example there shows how ",[994,1009,996],{},", ",[994,1012,1013],{},"schema.json",", and ",[994,1016,1017],{},"cockpit.json"," fit together.",[990,1020,1021,1023],{},[994,1022,996],{}," is the contract between your app and the platform. It answers four questions:",[1025,1026,1027,1034,1045,1051],"ul",{},[1028,1029,1030,1033],"li",{},[999,1031,1032],{},"Identity"," — who built this, what's it called, what version is this?",[1028,1035,1036,1039,1040,1044],{},[999,1037,1038],{},"Dependencies"," — which other apps does this one depend on, and which ones does it ",[1041,1042,1043],"em",{},"expect"," (peer dependencies) without auto-installing?",[1028,1046,1047,1050],{},[999,1048,1049],{},"Permissions"," — which platform capabilities does this app need access to? The platform's default is deny-all; you opt in here.",[1028,1052,1053,1055],{},[999,1054,201],{}," — which events does this app publish, and which does it subscribe to?",[990,1057,1058,1059,1061],{},"The platform validates ",[994,1060,996],{}," against a schema at deploy time. A manifest that requests permissions it shouldn't, depends on apps that don't exist, or declares events with the wrong shape will fail deploy with a clear error. You can validate locally too with the CLI.",[1063,1064,1066],"h2",{"id":1065},"complete-example","Complete Example",[990,1068,1069],{},"Before the field-by-field breakdown, here's a full manifest for the Orders app, with every section populated. It's worth reading once as a whole — the rest of the page pulls these pieces apart one at a time, and it's easier to follow each in isolation once you've seen how they sit together.",[1071,1072,1077],"pre",{"className":1073,"code":1074,"language":1075,"meta":1076,"style":1076},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"$schema\": \"https:\u002F\u002Frevenexx.com\u002Fschemas\u002Fmanifest.schema.json\",\n  \"name\": \"orders\",\n  \"vendor\": \"revenexx\",\n  \"version\": \"1.0.0\",\n  \"title\": \"Orders\",\n  \"description\": \"Manage B2B orders, checkout, and order lifecycle\",\n  \"dependencies\": {\n    \"customers\": \"^1.0\",\n    \"pricing\": \"^1.0\",\n    \"inventory\": \"^2.0\"\n  },\n  \"peerDependencies\": {\n    \"markets\": \"^1.0\"\n  },\n  \"permissions\": [\n    { \"entity\": \"orders\", \"access\": [\"read\", \"create\", \"update\", \"delete\"] },\n    { \"entity\": \"order_items\", \"access\": [\"read\", \"create\", \"delete\"] },\n    { \"entity\": \"customers\", \"access\": [\"read\"] }\n  ],\n  \"policies\": [\n    {\n      \"name\": \"outbound-access\",\n      \"attrs\": { \"host\": \"{{tenant_domain}}\", \"path\": \"\u002Fapi\u002Ferp\u002F*\" }\n    },\n    {\n      \"name\": \"event-publish\",\n      \"attrs\": { \"events\": [\"order.created\", \"order.status_changed\", \"order.cancelled\"] }\n    },\n    {\n      \"name\": \"event-subscribe\",\n      \"attrs\": { \"events\": [\"inventory.stock_changed\", \"pricing.updated\"] }\n    },\n    {\n      \"name\": \"storage-read-write\",\n      \"attrs\": { \"bucket\": \"order-attachments\" }\n    }\n  ],\n  \"events\": {\n    \"emits\": [\"order.created\", \"order.status_changed\", \"order.cancelled\"],\n    \"listens\": [\"inventory.stock_changed\", \"app.installed\", \"app.upgraded\"]\n  }\n}\n","json","",[994,1078,1079,1088,1116,1137,1158,1179,1200,1221,1236,1259,1279,1299,1305,1319,1337,1342,1357,1433,1491,1533,1539,1553,1559,1580,1632,1638,1643,1663,1716,1721,1726,1746,1789,1794,1799,1819,1850,1856,1861,1874,1913,1954,1960],{"__ignoreMap":1076},[1080,1081,1084],"span",{"class":1082,"line":1083},"line",1,[1080,1085,1087],{"class":1086},"sMK4o","{\n",[1080,1089,1091,1094,1098,1101,1104,1107,1111,1113],{"class":1082,"line":1090},2,[1080,1092,1093],{"class":1086},"  \"",[1080,1095,1097],{"class":1096},"spNyl","$schema",[1080,1099,1100],{"class":1086},"\"",[1080,1102,1103],{"class":1086},":",[1080,1105,1106],{"class":1086}," \"",[1080,1108,1110],{"class":1109},"sfazB","https:\u002F\u002Frevenexx.com\u002Fschemas\u002Fmanifest.schema.json",[1080,1112,1100],{"class":1086},[1080,1114,1115],{"class":1086},",\n",[1080,1117,1119,1121,1124,1126,1128,1130,1133,1135],{"class":1082,"line":1118},3,[1080,1120,1093],{"class":1086},[1080,1122,1123],{"class":1096},"name",[1080,1125,1100],{"class":1086},[1080,1127,1103],{"class":1086},[1080,1129,1106],{"class":1086},[1080,1131,1132],{"class":1109},"orders",[1080,1134,1100],{"class":1086},[1080,1136,1115],{"class":1086},[1080,1138,1140,1142,1145,1147,1149,1151,1154,1156],{"class":1082,"line":1139},4,[1080,1141,1093],{"class":1086},[1080,1143,1144],{"class":1096},"vendor",[1080,1146,1100],{"class":1086},[1080,1148,1103],{"class":1086},[1080,1150,1106],{"class":1086},[1080,1152,1153],{"class":1109},"revenexx",[1080,1155,1100],{"class":1086},[1080,1157,1115],{"class":1086},[1080,1159,1161,1163,1166,1168,1170,1172,1175,1177],{"class":1082,"line":1160},5,[1080,1162,1093],{"class":1086},[1080,1164,1165],{"class":1096},"version",[1080,1167,1100],{"class":1086},[1080,1169,1103],{"class":1086},[1080,1171,1106],{"class":1086},[1080,1173,1174],{"class":1109},"1.0.0",[1080,1176,1100],{"class":1086},[1080,1178,1115],{"class":1086},[1080,1180,1182,1184,1187,1189,1191,1193,1196,1198],{"class":1082,"line":1181},6,[1080,1183,1093],{"class":1086},[1080,1185,1186],{"class":1096},"title",[1080,1188,1100],{"class":1086},[1080,1190,1103],{"class":1086},[1080,1192,1106],{"class":1086},[1080,1194,1195],{"class":1109},"Orders",[1080,1197,1100],{"class":1086},[1080,1199,1115],{"class":1086},[1080,1201,1203,1205,1208,1210,1212,1214,1217,1219],{"class":1082,"line":1202},7,[1080,1204,1093],{"class":1086},[1080,1206,1207],{"class":1096},"description",[1080,1209,1100],{"class":1086},[1080,1211,1103],{"class":1086},[1080,1213,1106],{"class":1086},[1080,1215,1216],{"class":1109},"Manage B2B orders, checkout, and order lifecycle",[1080,1218,1100],{"class":1086},[1080,1220,1115],{"class":1086},[1080,1222,1224,1226,1229,1231,1233],{"class":1082,"line":1223},8,[1080,1225,1093],{"class":1086},[1080,1227,1228],{"class":1096},"dependencies",[1080,1230,1100],{"class":1086},[1080,1232,1103],{"class":1086},[1080,1234,1235],{"class":1086}," {\n",[1080,1237,1239,1242,1246,1248,1250,1252,1255,1257],{"class":1082,"line":1238},9,[1080,1240,1241],{"class":1086},"    \"",[1080,1243,1245],{"class":1244},"sBMFI","customers",[1080,1247,1100],{"class":1086},[1080,1249,1103],{"class":1086},[1080,1251,1106],{"class":1086},[1080,1253,1254],{"class":1109},"^1.0",[1080,1256,1100],{"class":1086},[1080,1258,1115],{"class":1086},[1080,1260,1262,1264,1267,1269,1271,1273,1275,1277],{"class":1082,"line":1261},10,[1080,1263,1241],{"class":1086},[1080,1265,1266],{"class":1244},"pricing",[1080,1268,1100],{"class":1086},[1080,1270,1103],{"class":1086},[1080,1272,1106],{"class":1086},[1080,1274,1254],{"class":1109},[1080,1276,1100],{"class":1086},[1080,1278,1115],{"class":1086},[1080,1280,1282,1284,1287,1289,1291,1293,1296],{"class":1082,"line":1281},11,[1080,1283,1241],{"class":1086},[1080,1285,1286],{"class":1244},"inventory",[1080,1288,1100],{"class":1086},[1080,1290,1103],{"class":1086},[1080,1292,1106],{"class":1086},[1080,1294,1295],{"class":1109},"^2.0",[1080,1297,1298],{"class":1086},"\"\n",[1080,1300,1302],{"class":1082,"line":1301},12,[1080,1303,1304],{"class":1086},"  },\n",[1080,1306,1308,1310,1313,1315,1317],{"class":1082,"line":1307},13,[1080,1309,1093],{"class":1086},[1080,1311,1312],{"class":1096},"peerDependencies",[1080,1314,1100],{"class":1086},[1080,1316,1103],{"class":1086},[1080,1318,1235],{"class":1086},[1080,1320,1322,1324,1327,1329,1331,1333,1335],{"class":1082,"line":1321},14,[1080,1323,1241],{"class":1086},[1080,1325,1326],{"class":1244},"markets",[1080,1328,1100],{"class":1086},[1080,1330,1103],{"class":1086},[1080,1332,1106],{"class":1086},[1080,1334,1254],{"class":1109},[1080,1336,1298],{"class":1086},[1080,1338,1340],{"class":1082,"line":1339},15,[1080,1341,1304],{"class":1086},[1080,1343,1345,1347,1350,1352,1354],{"class":1082,"line":1344},16,[1080,1346,1093],{"class":1086},[1080,1348,1349],{"class":1096},"permissions",[1080,1351,1100],{"class":1086},[1080,1353,1103],{"class":1086},[1080,1355,1356],{"class":1086}," [\n",[1080,1358,1360,1363,1365,1368,1370,1372,1374,1376,1378,1381,1383,1386,1388,1390,1393,1395,1398,1400,1402,1404,1407,1409,1411,1413,1416,1418,1420,1422,1425,1427,1430],{"class":1082,"line":1359},17,[1080,1361,1362],{"class":1086},"    {",[1080,1364,1106],{"class":1086},[1080,1366,1367],{"class":1244},"entity",[1080,1369,1100],{"class":1086},[1080,1371,1103],{"class":1086},[1080,1373,1106],{"class":1086},[1080,1375,1132],{"class":1109},[1080,1377,1100],{"class":1086},[1080,1379,1380],{"class":1086},",",[1080,1382,1106],{"class":1086},[1080,1384,1385],{"class":1244},"access",[1080,1387,1100],{"class":1086},[1080,1389,1103],{"class":1086},[1080,1391,1392],{"class":1086}," [",[1080,1394,1100],{"class":1086},[1080,1396,1397],{"class":1109},"read",[1080,1399,1100],{"class":1086},[1080,1401,1380],{"class":1086},[1080,1403,1106],{"class":1086},[1080,1405,1406],{"class":1109},"create",[1080,1408,1100],{"class":1086},[1080,1410,1380],{"class":1086},[1080,1412,1106],{"class":1086},[1080,1414,1415],{"class":1109},"update",[1080,1417,1100],{"class":1086},[1080,1419,1380],{"class":1086},[1080,1421,1106],{"class":1086},[1080,1423,1424],{"class":1109},"delete",[1080,1426,1100],{"class":1086},[1080,1428,1429],{"class":1086},"]",[1080,1431,1432],{"class":1086}," },\n",[1080,1434,1436,1438,1440,1442,1444,1446,1448,1451,1453,1455,1457,1459,1461,1463,1465,1467,1469,1471,1473,1475,1477,1479,1481,1483,1485,1487,1489],{"class":1082,"line":1435},18,[1080,1437,1362],{"class":1086},[1080,1439,1106],{"class":1086},[1080,1441,1367],{"class":1244},[1080,1443,1100],{"class":1086},[1080,1445,1103],{"class":1086},[1080,1447,1106],{"class":1086},[1080,1449,1450],{"class":1109},"order_items",[1080,1452,1100],{"class":1086},[1080,1454,1380],{"class":1086},[1080,1456,1106],{"class":1086},[1080,1458,1385],{"class":1244},[1080,1460,1100],{"class":1086},[1080,1462,1103],{"class":1086},[1080,1464,1392],{"class":1086},[1080,1466,1100],{"class":1086},[1080,1468,1397],{"class":1109},[1080,1470,1100],{"class":1086},[1080,1472,1380],{"class":1086},[1080,1474,1106],{"class":1086},[1080,1476,1406],{"class":1109},[1080,1478,1100],{"class":1086},[1080,1480,1380],{"class":1086},[1080,1482,1106],{"class":1086},[1080,1484,1424],{"class":1109},[1080,1486,1100],{"class":1086},[1080,1488,1429],{"class":1086},[1080,1490,1432],{"class":1086},[1080,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530],{"class":1082,"line":1493},19,[1080,1495,1362],{"class":1086},[1080,1497,1106],{"class":1086},[1080,1499,1367],{"class":1244},[1080,1501,1100],{"class":1086},[1080,1503,1103],{"class":1086},[1080,1505,1106],{"class":1086},[1080,1507,1245],{"class":1109},[1080,1509,1100],{"class":1086},[1080,1511,1380],{"class":1086},[1080,1513,1106],{"class":1086},[1080,1515,1385],{"class":1244},[1080,1517,1100],{"class":1086},[1080,1519,1103],{"class":1086},[1080,1521,1392],{"class":1086},[1080,1523,1100],{"class":1086},[1080,1525,1397],{"class":1109},[1080,1527,1100],{"class":1086},[1080,1529,1429],{"class":1086},[1080,1531,1532],{"class":1086}," }\n",[1080,1534,1536],{"class":1082,"line":1535},20,[1080,1537,1538],{"class":1086},"  ],\n",[1080,1540,1542,1544,1547,1549,1551],{"class":1082,"line":1541},21,[1080,1543,1093],{"class":1086},[1080,1545,1546],{"class":1096},"policies",[1080,1548,1100],{"class":1086},[1080,1550,1103],{"class":1086},[1080,1552,1356],{"class":1086},[1080,1554,1556],{"class":1082,"line":1555},22,[1080,1557,1558],{"class":1086},"    {\n",[1080,1560,1562,1565,1567,1569,1571,1573,1576,1578],{"class":1082,"line":1561},23,[1080,1563,1564],{"class":1086},"      \"",[1080,1566,1123],{"class":1244},[1080,1568,1100],{"class":1086},[1080,1570,1103],{"class":1086},[1080,1572,1106],{"class":1086},[1080,1574,1575],{"class":1109},"outbound-access",[1080,1577,1100],{"class":1086},[1080,1579,1115],{"class":1086},[1080,1581,1583,1585,1588,1590,1592,1595,1597,1601,1603,1605,1607,1610,1612,1614,1616,1619,1621,1623,1625,1628,1630],{"class":1082,"line":1582},24,[1080,1584,1564],{"class":1086},[1080,1586,1587],{"class":1244},"attrs",[1080,1589,1100],{"class":1086},[1080,1591,1103],{"class":1086},[1080,1593,1594],{"class":1086}," {",[1080,1596,1106],{"class":1086},[1080,1598,1600],{"class":1599},"sbssI","host",[1080,1602,1100],{"class":1086},[1080,1604,1103],{"class":1086},[1080,1606,1106],{"class":1086},[1080,1608,1609],{"class":1109},"{{tenant_domain}}",[1080,1611,1100],{"class":1086},[1080,1613,1380],{"class":1086},[1080,1615,1106],{"class":1086},[1080,1617,1618],{"class":1599},"path",[1080,1620,1100],{"class":1086},[1080,1622,1103],{"class":1086},[1080,1624,1106],{"class":1086},[1080,1626,1627],{"class":1109},"\u002Fapi\u002Ferp\u002F*",[1080,1629,1100],{"class":1086},[1080,1631,1532],{"class":1086},[1080,1633,1635],{"class":1082,"line":1634},25,[1080,1636,1637],{"class":1086},"    },\n",[1080,1639,1641],{"class":1082,"line":1640},26,[1080,1642,1558],{"class":1086},[1080,1644,1646,1648,1650,1652,1654,1656,1659,1661],{"class":1082,"line":1645},27,[1080,1647,1564],{"class":1086},[1080,1649,1123],{"class":1244},[1080,1651,1100],{"class":1086},[1080,1653,1103],{"class":1086},[1080,1655,1106],{"class":1086},[1080,1657,1658],{"class":1109},"event-publish",[1080,1660,1100],{"class":1086},[1080,1662,1115],{"class":1086},[1080,1664,1666,1668,1670,1672,1674,1676,1678,1681,1683,1685,1687,1689,1692,1694,1696,1698,1701,1703,1705,1707,1710,1712,1714],{"class":1082,"line":1665},28,[1080,1667,1564],{"class":1086},[1080,1669,1587],{"class":1244},[1080,1671,1100],{"class":1086},[1080,1673,1103],{"class":1086},[1080,1675,1594],{"class":1086},[1080,1677,1106],{"class":1086},[1080,1679,1680],{"class":1599},"events",[1080,1682,1100],{"class":1086},[1080,1684,1103],{"class":1086},[1080,1686,1392],{"class":1086},[1080,1688,1100],{"class":1086},[1080,1690,1691],{"class":1109},"order.created",[1080,1693,1100],{"class":1086},[1080,1695,1380],{"class":1086},[1080,1697,1106],{"class":1086},[1080,1699,1700],{"class":1109},"order.status_changed",[1080,1702,1100],{"class":1086},[1080,1704,1380],{"class":1086},[1080,1706,1106],{"class":1086},[1080,1708,1709],{"class":1109},"order.cancelled",[1080,1711,1100],{"class":1086},[1080,1713,1429],{"class":1086},[1080,1715,1532],{"class":1086},[1080,1717,1719],{"class":1082,"line":1718},29,[1080,1720,1637],{"class":1086},[1080,1722,1724],{"class":1082,"line":1723},30,[1080,1725,1558],{"class":1086},[1080,1727,1729,1731,1733,1735,1737,1739,1742,1744],{"class":1082,"line":1728},31,[1080,1730,1564],{"class":1086},[1080,1732,1123],{"class":1244},[1080,1734,1100],{"class":1086},[1080,1736,1103],{"class":1086},[1080,1738,1106],{"class":1086},[1080,1740,1741],{"class":1109},"event-subscribe",[1080,1743,1100],{"class":1086},[1080,1745,1115],{"class":1086},[1080,1747,1749,1751,1753,1755,1757,1759,1761,1763,1765,1767,1769,1771,1774,1776,1778,1780,1783,1785,1787],{"class":1082,"line":1748},32,[1080,1750,1564],{"class":1086},[1080,1752,1587],{"class":1244},[1080,1754,1100],{"class":1086},[1080,1756,1103],{"class":1086},[1080,1758,1594],{"class":1086},[1080,1760,1106],{"class":1086},[1080,1762,1680],{"class":1599},[1080,1764,1100],{"class":1086},[1080,1766,1103],{"class":1086},[1080,1768,1392],{"class":1086},[1080,1770,1100],{"class":1086},[1080,1772,1773],{"class":1109},"inventory.stock_changed",[1080,1775,1100],{"class":1086},[1080,1777,1380],{"class":1086},[1080,1779,1106],{"class":1086},[1080,1781,1782],{"class":1109},"pricing.updated",[1080,1784,1100],{"class":1086},[1080,1786,1429],{"class":1086},[1080,1788,1532],{"class":1086},[1080,1790,1792],{"class":1082,"line":1791},33,[1080,1793,1637],{"class":1086},[1080,1795,1797],{"class":1082,"line":1796},34,[1080,1798,1558],{"class":1086},[1080,1800,1802,1804,1806,1808,1810,1812,1815,1817],{"class":1082,"line":1801},35,[1080,1803,1564],{"class":1086},[1080,1805,1123],{"class":1244},[1080,1807,1100],{"class":1086},[1080,1809,1103],{"class":1086},[1080,1811,1106],{"class":1086},[1080,1813,1814],{"class":1109},"storage-read-write",[1080,1816,1100],{"class":1086},[1080,1818,1115],{"class":1086},[1080,1820,1822,1824,1826,1828,1830,1832,1834,1837,1839,1841,1843,1846,1848],{"class":1082,"line":1821},36,[1080,1823,1564],{"class":1086},[1080,1825,1587],{"class":1244},[1080,1827,1100],{"class":1086},[1080,1829,1103],{"class":1086},[1080,1831,1594],{"class":1086},[1080,1833,1106],{"class":1086},[1080,1835,1836],{"class":1599},"bucket",[1080,1838,1100],{"class":1086},[1080,1840,1103],{"class":1086},[1080,1842,1106],{"class":1086},[1080,1844,1845],{"class":1109},"order-attachments",[1080,1847,1100],{"class":1086},[1080,1849,1532],{"class":1086},[1080,1851,1853],{"class":1082,"line":1852},37,[1080,1854,1855],{"class":1086},"    }\n",[1080,1857,1859],{"class":1082,"line":1858},38,[1080,1860,1538],{"class":1086},[1080,1862,1864,1866,1868,1870,1872],{"class":1082,"line":1863},39,[1080,1865,1093],{"class":1086},[1080,1867,1680],{"class":1096},[1080,1869,1100],{"class":1086},[1080,1871,1103],{"class":1086},[1080,1873,1235],{"class":1086},[1080,1875,1877,1879,1882,1884,1886,1888,1890,1892,1894,1896,1898,1900,1902,1904,1906,1908,1910],{"class":1082,"line":1876},40,[1080,1878,1241],{"class":1086},[1080,1880,1881],{"class":1244},"emits",[1080,1883,1100],{"class":1086},[1080,1885,1103],{"class":1086},[1080,1887,1392],{"class":1086},[1080,1889,1100],{"class":1086},[1080,1891,1691],{"class":1109},[1080,1893,1100],{"class":1086},[1080,1895,1380],{"class":1086},[1080,1897,1106],{"class":1086},[1080,1899,1700],{"class":1109},[1080,1901,1100],{"class":1086},[1080,1903,1380],{"class":1086},[1080,1905,1106],{"class":1086},[1080,1907,1709],{"class":1109},[1080,1909,1100],{"class":1086},[1080,1911,1912],{"class":1086},"],\n",[1080,1914,1916,1918,1921,1923,1925,1927,1929,1931,1933,1935,1937,1940,1942,1944,1946,1949,1951],{"class":1082,"line":1915},41,[1080,1917,1241],{"class":1086},[1080,1919,1920],{"class":1244},"listens",[1080,1922,1100],{"class":1086},[1080,1924,1103],{"class":1086},[1080,1926,1392],{"class":1086},[1080,1928,1100],{"class":1086},[1080,1930,1773],{"class":1109},[1080,1932,1100],{"class":1086},[1080,1934,1380],{"class":1086},[1080,1936,1106],{"class":1086},[1080,1938,1939],{"class":1109},"app.installed",[1080,1941,1100],{"class":1086},[1080,1943,1380],{"class":1086},[1080,1945,1106],{"class":1086},[1080,1947,1948],{"class":1109},"app.upgraded",[1080,1950,1100],{"class":1086},[1080,1952,1953],{"class":1086},"]\n",[1080,1955,1957],{"class":1082,"line":1956},42,[1080,1958,1959],{"class":1086},"  }\n",[1080,1961,1963],{"class":1082,"line":1962},43,[1080,1964,1965],{"class":1086},"}\n",[1063,1967,1969],{"id":1968},"field-reference","Field Reference",[1971,1972,1974],"h3",{"id":1973},"basic-metadata","Basic Metadata",[1976,1977,1978,1997],"table",{},[1979,1980,1981],"thead",{},[1982,1983,1984,1988,1991,1994],"tr",{},[1985,1986,1987],"th",{},"Field",[1985,1989,1990],{},"Type",[1985,1992,1993],{},"Required",[1985,1995,1996],{},"Description",[1998,1999,2000,2018,2031,2047,2066,2079],"tbody",{},[1982,2001,2002,2007,2010,2013],{},[2003,2004,2005],"td",{},[994,2006,1097],{},[2003,2008,2009],{},"string",[2003,2011,2012],{},"Yes",[2003,2014,2015,2016],{},"JSON Schema reference. Always: ",[994,2017,1110],{},[1982,2019,2020,2024,2026,2028],{},[2003,2021,2022],{},[994,2023,1123],{},[2003,2025,2009],{},[2003,2027,2012],{},[2003,2029,2030],{},"Unique app identifier (kebab-case, lowercase, no spaces)",[1982,2032,2033,2037,2039,2041],{},[2003,2034,2035],{},[994,2036,1144],{},[2003,2038,2009],{},[2003,2040,2012],{},[2003,2042,2043,2044,2046],{},"App publisher. Use ",[994,2045,1153],{}," for core apps, your company name for partners",[1982,2048,2049,2053,2055,2057],{},[2003,2050,2051],{},[994,2052,1165],{},[2003,2054,2009],{},[2003,2056,2012],{},[2003,2058,2059,2060,1010,2062,2065],{},"Semantic version (e.g., ",[994,2061,1174],{},[994,2063,2064],{},"2.3.1","). Increment for every deploy.",[1982,2067,2068,2072,2074,2076],{},[2003,2069,2070],{},[994,2071,1186],{},[2003,2073,2009],{},[2003,2075,2012],{},[2003,2077,2078],{},"Human-readable display name (e.g., \"Orders\", \"Payment Gateway\")",[1982,2080,2081,2085,2087,2090],{},[2003,2082,2083],{},[994,2084,1207],{},[2003,2086,2009],{},[2003,2088,2089],{},"No",[2003,2091,2092],{},"Long-form description (2–3 sentences)",[1971,2094,1038],{"id":1228},[990,2096,2097],{},"Your app rarely stands alone — it reads customers, prices, inventory. The manifest declares those relationships in two blocks that differ only in who decides to install them.",[2099,2100,1228],"h4",{"id":2101},"dependencies-1",[990,2103,2104,2105,2107],{},"Anything in ",[994,2106,1228],{}," is installed automatically the moment your app is activated; the customer never sees a choice. Each entry pairs an app name with a version constraint:",[1071,2109,2111],{"className":1073,"code":2110,"language":1075,"meta":1076,"style":1076},"\"dependencies\": {\n  \"customers\": \"^1.0\",      \u002F\u002F ✓ Auto-installed\n  \"pricing\": \"^2.0\"         \u002F\u002F ✓ Auto-installed\n}\n",[994,2112,2113,2127,2149,2168],{"__ignoreMap":1076},[1080,2114,2115,2117,2119,2121,2125],{"class":1082,"line":1083},[1080,2116,1100],{"class":1086},[1080,2118,1228],{"class":1109},[1080,2120,1100],{"class":1086},[1080,2122,2124],{"class":2123},"sTEyZ",": ",[1080,2126,1087],{"class":1086},[1080,2128,2129,2131,2133,2135,2137,2139,2141,2143,2145],{"class":1082,"line":1090},[1080,2130,1093],{"class":1086},[1080,2132,1245],{"class":1096},[1080,2134,1100],{"class":1086},[1080,2136,1103],{"class":1086},[1080,2138,1106],{"class":1086},[1080,2140,1254],{"class":1109},[1080,2142,1100],{"class":1086},[1080,2144,1380],{"class":1086},[1080,2146,2148],{"class":2147},"sHwdD","      \u002F\u002F ✓ Auto-installed\n",[1080,2150,2151,2153,2155,2157,2159,2161,2163,2165],{"class":1082,"line":1118},[1080,2152,1093],{"class":1086},[1080,2154,1266],{"class":1096},[1080,2156,1100],{"class":1086},[1080,2158,1103],{"class":1086},[1080,2160,1106],{"class":1086},[1080,2162,1295],{"class":1109},[1080,2164,1100],{"class":1086},[1080,2166,2167],{"class":2147},"         \u002F\u002F ✓ Auto-installed\n",[1080,2169,2170],{"class":1082,"line":1139},[1080,2171,1965],{"class":1086},[990,2173,2174],{},"This is the right block for apps yours genuinely can't function without — the data dependencies and shared services you call directly. The version constraint follows the usual SemVer operators:",[1025,2176,2177,2183,2189,2194],{},[1028,2178,2179,2182],{},[994,2180,2181],{},"^1.0.0"," — Compatible with 1.x.x (default, recommended)",[1028,2184,2185,2188],{},[994,2186,2187],{},"~1.0.0"," — Only patch updates (1.0.x)",[1028,2190,2191,2193],{},[994,2192,1174],{}," — Exact version only",[1028,2195,2196,2199],{},[994,2197,2198],{},">=1.0.0"," — 1.0.0 or newer",[990,2201,2202,2203,2206],{},"In almost all cases you want ",[994,2204,2205],{},"^",", which accepts new features and fixes but stops at the next major version, where breaking changes are allowed to land.",[2099,2208,1312],{"id":2209},"peerdependencies",[990,2211,2212,2213,2216],{},"A peer dependency is also required, but it is ",[1041,2214,2215],{},"not"," installed for the customer — Console prompts them to install it themselves. Use it when the dependency carries a cost or a choice the customer should own, such as a paid app or an optional capability:",[1071,2218,2220],{"className":1073,"code":2219,"language":1075,"meta":1076,"style":1076},"\"peerDependencies\": {\n  \"markets\": \"^1.0\"         \u002F\u002F Customer prompted to install\n}\n",[994,2221,2222,2234,2253],{"__ignoreMap":1076},[1080,2223,2224,2226,2228,2230,2232],{"class":1082,"line":1083},[1080,2225,1100],{"class":1086},[1080,2227,1312],{"class":1109},[1080,2229,1100],{"class":1086},[1080,2231,2124],{"class":2123},[1080,2233,1087],{"class":1086},[1080,2235,2236,2238,2240,2242,2244,2246,2248,2250],{"class":1082,"line":1090},[1080,2237,1093],{"class":1086},[1080,2239,1326],{"class":1096},[1080,2241,1100],{"class":1086},[1080,2243,1103],{"class":1086},[1080,2245,1106],{"class":1086},[1080,2247,1254],{"class":1109},[1080,2249,1100],{"class":1086},[1080,2251,2252],{"class":2147},"         \u002F\u002F Customer prompted to install\n",[1080,2254,2255],{"class":1082,"line":1118},[1080,2256,1965],{"class":1086},[990,2258,2259],{},"The distinction matters at install time: a missing plain dependency is solved silently, while a missing peer dependency turns into a question the customer answers.",[1971,2261,1049],{"id":1349},[990,2263,2264,2265,2268,2269,2272],{},"Where dependencies say which ",[1041,2266,2267],{},"apps"," you rely on, permissions say which ",[1041,2270,2271],{},"data"," you touch and what you may do with it. Each entry names an entity and the access levels you need on it:",[1071,2274,2276],{"className":1073,"code":2275,"language":1075,"meta":1076,"style":1076},"\"permissions\": [\n  { \"entity\": \"orders\", \"access\": [\"read\", \"create\", \"update\", \"delete\"] },\n  { \"entity\": \"order_items\", \"access\": [\"read\", \"create\"] },\n  { \"entity\": \"customers\", \"access\": [\"read\"] }\n]\n",[994,2277,2278,2291,2356,2404,2444],{"__ignoreMap":1076},[1080,2279,2280,2282,2284,2286,2288],{"class":1082,"line":1083},[1080,2281,1100],{"class":1086},[1080,2283,1349],{"class":1109},[1080,2285,1100],{"class":1086},[1080,2287,2124],{"class":2123},[1080,2289,2290],{"class":1086},"[\n",[1080,2292,2293,2296,2298,2300,2302,2304,2306,2308,2310,2312,2314,2316,2318,2320,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354],{"class":1082,"line":1090},[1080,2294,2295],{"class":1086},"  {",[1080,2297,1106],{"class":1086},[1080,2299,1367],{"class":1096},[1080,2301,1100],{"class":1086},[1080,2303,1103],{"class":1086},[1080,2305,1106],{"class":1086},[1080,2307,1132],{"class":1109},[1080,2309,1100],{"class":1086},[1080,2311,1380],{"class":1086},[1080,2313,1106],{"class":1086},[1080,2315,1385],{"class":1096},[1080,2317,1100],{"class":1086},[1080,2319,1103],{"class":1086},[1080,2321,1392],{"class":1086},[1080,2323,1100],{"class":1086},[1080,2325,1397],{"class":1109},[1080,2327,1100],{"class":1086},[1080,2329,1380],{"class":1086},[1080,2331,1106],{"class":1086},[1080,2333,1406],{"class":1109},[1080,2335,1100],{"class":1086},[1080,2337,1380],{"class":1086},[1080,2339,1106],{"class":1086},[1080,2341,1415],{"class":1109},[1080,2343,1100],{"class":1086},[1080,2345,1380],{"class":1086},[1080,2347,1106],{"class":1086},[1080,2349,1424],{"class":1109},[1080,2351,1100],{"class":1086},[1080,2353,1429],{"class":1086},[1080,2355,1432],{"class":1086},[1080,2357,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402],{"class":1082,"line":1118},[1080,2359,2295],{"class":1086},[1080,2361,1106],{"class":1086},[1080,2363,1367],{"class":1096},[1080,2365,1100],{"class":1086},[1080,2367,1103],{"class":1086},[1080,2369,1106],{"class":1086},[1080,2371,1450],{"class":1109},[1080,2373,1100],{"class":1086},[1080,2375,1380],{"class":1086},[1080,2377,1106],{"class":1086},[1080,2379,1385],{"class":1096},[1080,2381,1100],{"class":1086},[1080,2383,1103],{"class":1086},[1080,2385,1392],{"class":1086},[1080,2387,1100],{"class":1086},[1080,2389,1397],{"class":1109},[1080,2391,1100],{"class":1086},[1080,2393,1380],{"class":1086},[1080,2395,1106],{"class":1086},[1080,2397,1406],{"class":1109},[1080,2399,1100],{"class":1086},[1080,2401,1429],{"class":1086},[1080,2403,1432],{"class":1086},[1080,2405,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442],{"class":1082,"line":1139},[1080,2407,2295],{"class":1086},[1080,2409,1106],{"class":1086},[1080,2411,1367],{"class":1096},[1080,2413,1100],{"class":1086},[1080,2415,1103],{"class":1086},[1080,2417,1106],{"class":1086},[1080,2419,1245],{"class":1109},[1080,2421,1100],{"class":1086},[1080,2423,1380],{"class":1086},[1080,2425,1106],{"class":1086},[1080,2427,1385],{"class":1096},[1080,2429,1100],{"class":1086},[1080,2431,1103],{"class":1086},[1080,2433,1392],{"class":1086},[1080,2435,1100],{"class":1086},[1080,2437,1397],{"class":1109},[1080,2439,1100],{"class":1086},[1080,2441,1429],{"class":1086},[1080,2443,1532],{"class":1086},[1080,2445,2446],{"class":1082,"line":1160},[1080,2447,1953],{"class":1086},[990,2449,2450],{},"The four access levels map directly onto the SQL operations the platform will allow:",[1976,2452,2453,2463],{},[1979,2454,2455],{},[1982,2456,2457,2460],{},[1985,2458,2459],{},"Access Level",[1985,2461,2462],{},"What It Allows",[1998,2464,2465,2474,2483,2492],{},[1982,2466,2467,2471],{},[2003,2468,2469],{},[994,2470,1397],{},[2003,2472,2473],{},"SELECT queries on the entity",[1982,2475,2476,2480],{},[2003,2477,2478],{},[994,2479,1406],{},[2003,2481,2482],{},"INSERT rows",[1982,2484,2485,2489],{},[2003,2486,2487],{},[994,2488,1415],{},[2003,2490,2491],{},"UPDATE rows",[1982,2493,2494,2498],{},[2003,2495,2496],{},[994,2497,1424],{},[2003,2499,2500],{},"DELETE rows",[990,2502,2503,2504,2506,2507,2509,2510,2512],{},"Because the default is no access at all, this list is also an honest description of your app's data footprint — so grant only what the app actually uses. Note the asymmetry in the example: the Orders app fully owns ",[994,2505,1132],{},", can add items but never delete an order's history wholesale, and can only ",[1041,2508,1397],{}," ",[994,2511,1245],{},", which belongs to another app.",[1971,2514,2516],{"id":2515},"policies-the-allowlist","Policies (the allowlist)",[990,2518,2519],{},"Permissions cover your own data; policies cover everything else an app might reach for — the network, the event bus, file storage. All of it is denied until a policy opens it, and each policy is as narrow as you can make it.",[2099,2521,1575],{"id":1575},[990,2523,2524],{},"This policy lets your app make HTTP calls to an external host, such as a customer's ERP or PIM. Crucially, it doesn't open the whole internet — you pin both the host and a path prefix, and the app can reach nothing outside that window:",[1071,2526,2528],{"className":1073,"code":2527,"language":1075,"meta":1076,"style":1076},"{\n  \"name\": \"outbound-access\",\n  \"attrs\": {\n    \"host\": \"{{tenant_domain}}\",  \u002F\u002F Template variable\n    \"path\": \"\u002Fapi\u002Ferp\u002F*\"           \u002F\u002F Wildcard supported\n  }\n}\n",[994,2529,2530,2534,2552,2564,2585,2604,2608],{"__ignoreMap":1076},[1080,2531,2532],{"class":1082,"line":1083},[1080,2533,1087],{"class":1086},[1080,2535,2536,2538,2540,2542,2544,2546,2548,2550],{"class":1082,"line":1090},[1080,2537,1093],{"class":1086},[1080,2539,1123],{"class":1096},[1080,2541,1100],{"class":1086},[1080,2543,1103],{"class":1086},[1080,2545,1106],{"class":1086},[1080,2547,1575],{"class":1109},[1080,2549,1100],{"class":1086},[1080,2551,1115],{"class":1086},[1080,2553,2554,2556,2558,2560,2562],{"class":1082,"line":1118},[1080,2555,1093],{"class":1086},[1080,2557,1587],{"class":1096},[1080,2559,1100],{"class":1086},[1080,2561,1103],{"class":1086},[1080,2563,1235],{"class":1086},[1080,2565,2566,2568,2570,2572,2574,2576,2578,2580,2582],{"class":1082,"line":1139},[1080,2567,1241],{"class":1086},[1080,2569,1600],{"class":1244},[1080,2571,1100],{"class":1086},[1080,2573,1103],{"class":1086},[1080,2575,1106],{"class":1086},[1080,2577,1609],{"class":1109},[1080,2579,1100],{"class":1086},[1080,2581,1380],{"class":1086},[1080,2583,2584],{"class":2147},"  \u002F\u002F Template variable\n",[1080,2586,2587,2589,2591,2593,2595,2597,2599,2601],{"class":1082,"line":1160},[1080,2588,1241],{"class":1086},[1080,2590,1618],{"class":1244},[1080,2592,1100],{"class":1086},[1080,2594,1103],{"class":1086},[1080,2596,1106],{"class":1086},[1080,2598,1627],{"class":1109},[1080,2600,1100],{"class":1086},[1080,2602,2603],{"class":2147},"           \u002F\u002F Wildcard supported\n",[1080,2605,2606],{"class":1082,"line":1181},[1080,2607,1959],{"class":1086},[1080,2609,2610],{"class":1082,"line":1202},[1080,2611,1965],{"class":1086},[990,2613,2614,2615,2617,2618,2620,2621,2624,2625,2628,2629,2631,2632,2634,2635,1014,2638,2641],{},"The ",[994,2616,1600],{}," can be a template variable or a literal. ",[994,2619,1609],{}," resolves to the customer's own primary domain (e.g. ",[994,2622,2623],{},"acme.com","), which is what you want when each tenant talks to its own systems; for a shared third party you'd write the literal domain instead, such as ",[994,2626,2627],{},"api.stripe.com",". The ",[994,2630,1618],{}," accepts wildcards — ",[994,2633,1627],{}," matches anything one level under ",[994,2636,2637],{},"\u002Fapi\u002Ferp\u002F",[994,2639,2640],{},"\u002Fapi\u002Fv1\u002F**"," matches nested paths as well.",[2099,2643,1658],{"id":1658},[990,2645,2646],{},"This grants the right to emit specific events onto the platform event bus. You list exactly the events your app is allowed to publish, and the bus rejects anything not declared here:",[1071,2648,2650],{"className":1073,"code":2649,"language":1075,"meta":1076,"style":1076},"{\n  \"name\": \"event-publish\",\n  \"attrs\": { \"events\": [\"order.created\", \"order.status_changed\"] }\n}\n",[994,2651,2652,2656,2674,2714],{"__ignoreMap":1076},[1080,2653,2654],{"class":1082,"line":1083},[1080,2655,1087],{"class":1086},[1080,2657,2658,2660,2662,2664,2666,2668,2670,2672],{"class":1082,"line":1090},[1080,2659,1093],{"class":1086},[1080,2661,1123],{"class":1096},[1080,2663,1100],{"class":1086},[1080,2665,1103],{"class":1086},[1080,2667,1106],{"class":1086},[1080,2669,1658],{"class":1109},[1080,2671,1100],{"class":1086},[1080,2673,1115],{"class":1086},[1080,2675,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704,2706,2708,2710,2712],{"class":1082,"line":1118},[1080,2677,1093],{"class":1086},[1080,2679,1587],{"class":1096},[1080,2681,1100],{"class":1086},[1080,2683,1103],{"class":1086},[1080,2685,1594],{"class":1086},[1080,2687,1106],{"class":1086},[1080,2689,1680],{"class":1244},[1080,2691,1100],{"class":1086},[1080,2693,1103],{"class":1086},[1080,2695,1392],{"class":1086},[1080,2697,1100],{"class":1086},[1080,2699,1691],{"class":1109},[1080,2701,1100],{"class":1086},[1080,2703,1380],{"class":1086},[1080,2705,1106],{"class":1086},[1080,2707,1700],{"class":1109},[1080,2709,1100],{"class":1086},[1080,2711,1429],{"class":1086},[1080,2713,1532],{"class":1086},[1080,2715,2716],{"class":1082,"line":1139},[1080,2717,1965],{"class":1086},[2099,2719,1741],{"id":1741},[990,2721,2722,2723,2726,2727,2730,2731,2733],{},"The mirror image: permission to ",[1041,2724,2725],{},"receive"," events. It's almost always paired with the matching ",[994,2728,2729],{},"events.listens"," declaration further down — this policy authorizes the subscription, while ",[994,2732,1920],{}," is what actually wires the handler up:",[1071,2735,2737],{"className":1073,"code":2736,"language":1075,"meta":1076,"style":1076},"{\n  \"name\": \"event-subscribe\",\n  \"attrs\": { \"events\": [\"inventory.stock_changed\"] }\n}\n",[994,2738,2739,2743,2761,2793],{"__ignoreMap":1076},[1080,2740,2741],{"class":1082,"line":1083},[1080,2742,1087],{"class":1086},[1080,2744,2745,2747,2749,2751,2753,2755,2757,2759],{"class":1082,"line":1090},[1080,2746,1093],{"class":1086},[1080,2748,1123],{"class":1096},[1080,2750,1100],{"class":1086},[1080,2752,1103],{"class":1086},[1080,2754,1106],{"class":1086},[1080,2756,1741],{"class":1109},[1080,2758,1100],{"class":1086},[1080,2760,1115],{"class":1086},[1080,2762,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791],{"class":1082,"line":1118},[1080,2764,1093],{"class":1086},[1080,2766,1587],{"class":1096},[1080,2768,1100],{"class":1086},[1080,2770,1103],{"class":1086},[1080,2772,1594],{"class":1086},[1080,2774,1106],{"class":1086},[1080,2776,1680],{"class":1244},[1080,2778,1100],{"class":1086},[1080,2780,1103],{"class":1086},[1080,2782,1392],{"class":1086},[1080,2784,1100],{"class":1086},[1080,2786,1773],{"class":1109},[1080,2788,1100],{"class":1086},[1080,2790,1429],{"class":1086},[1080,2792,1532],{"class":1086},[1080,2794,2795],{"class":1082,"line":1139},[1080,2796,1965],{"class":1086},[2099,2798,2800],{"id":2799},"storage-read-storage-write-storage-read-write","storage-read \u002F storage-write \u002F storage-read-write",[990,2802,2803],{},"These grant access to a file-storage bucket, in increasing degrees: read-only, write-only, or both. Scope it to the specific bucket your app uses rather than reaching for the wildcard:",[1071,2805,2807],{"className":1073,"code":2806,"language":1075,"meta":1076,"style":1076},"{\n  \"name\": \"storage-read-write\",\n  \"attrs\": { \"bucket\": \"order-attachments\" }  \u002F\u002F Or \"*\" for all buckets\n}\n",[994,2808,2809,2813,2831,2863],{"__ignoreMap":1076},[1080,2810,2811],{"class":1082,"line":1083},[1080,2812,1087],{"class":1086},[1080,2814,2815,2817,2819,2821,2823,2825,2827,2829],{"class":1082,"line":1090},[1080,2816,1093],{"class":1086},[1080,2818,1123],{"class":1096},[1080,2820,1100],{"class":1086},[1080,2822,1103],{"class":1086},[1080,2824,1106],{"class":1086},[1080,2826,1814],{"class":1109},[1080,2828,1100],{"class":1086},[1080,2830,1115],{"class":1086},[1080,2832,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851,2853,2855,2857,2860],{"class":1082,"line":1118},[1080,2834,1093],{"class":1086},[1080,2836,1587],{"class":1096},[1080,2838,1100],{"class":1086},[1080,2840,1103],{"class":1086},[1080,2842,1594],{"class":1086},[1080,2844,1106],{"class":1086},[1080,2846,1836],{"class":1244},[1080,2848,1100],{"class":1086},[1080,2850,1103],{"class":1086},[1080,2852,1106],{"class":1086},[1080,2854,1845],{"class":1109},[1080,2856,1100],{"class":1086},[1080,2858,2859],{"class":1086}," }",[1080,2861,2862],{"class":2147},"  \u002F\u002F Or \"*\" for all buckets\n",[1080,2864,2865],{"class":1082,"line":1139},[1080,2866,1965],{"class":1086},[1971,2868,201],{"id":1680},[990,2870,2614,2871,2873,2874,2877,2878,2880,2881,2884],{},[994,2872,1546],{}," block above decides ",[1041,2875,2876],{},"whether"," your app may publish or subscribe; the ",[994,2879,1680],{}," block decides ",[1041,2882,2883],{},"which"," events, and it's what the platform reads to actually connect publishers to subscribers.",[2099,2886,2888],{"id":2887},"eventsemits","events.emits",[990,2890,2891,2893],{},[994,2892,1881],{}," lists the events your app publishes. These names are effectively your app's public API to the rest of the platform — other apps subscribe to them by name, so treat them as a contract you don't break casually:",[1071,2895,2897],{"className":1073,"code":2896,"language":1075,"meta":1076,"style":1076},"\"events\": {\n  \"emits\": [\"order.created\", \"order.status_changed\", \"order.cancelled\"]\n}\n",[994,2898,2899,2911,2947],{"__ignoreMap":1076},[1080,2900,2901,2903,2905,2907,2909],{"class":1082,"line":1083},[1080,2902,1100],{"class":1086},[1080,2904,1680],{"class":1109},[1080,2906,1100],{"class":1086},[1080,2908,2124],{"class":2123},[1080,2910,1087],{"class":1086},[1080,2912,2913,2915,2917,2919,2921,2923,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943,2945],{"class":1082,"line":1090},[1080,2914,1093],{"class":1086},[1080,2916,1881],{"class":1096},[1080,2918,1100],{"class":1086},[1080,2920,1103],{"class":1086},[1080,2922,1392],{"class":1086},[1080,2924,1100],{"class":1086},[1080,2926,1691],{"class":1109},[1080,2928,1100],{"class":1086},[1080,2930,1380],{"class":1086},[1080,2932,1106],{"class":1086},[1080,2934,1700],{"class":1109},[1080,2936,1100],{"class":1086},[1080,2938,1380],{"class":1086},[1080,2940,1106],{"class":1086},[1080,2942,1709],{"class":1109},[1080,2944,1100],{"class":1086},[1080,2946,1953],{"class":1086},[1080,2948,2949],{"class":1082,"line":1118},[1080,2950,1965],{"class":1086},[2099,2952,2729],{"id":2953},"eventslistens",[990,2955,2956,2958],{},[994,2957,1920],{}," lists the events your app reacts to. These can be events emitted by other apps, or the lifecycle events the platform itself emits:",[1071,2960,2962],{"className":1073,"code":2961,"language":1075,"meta":1076,"style":1076},"\"events\": {\n  \"listens\": [\"inventory.stock_changed\", \"app.installed\", \"app.upgraded\"]\n}\n",[994,2963,2964,2976,3012],{"__ignoreMap":1076},[1080,2965,2966,2968,2970,2972,2974],{"class":1082,"line":1083},[1080,2967,1100],{"class":1086},[1080,2969,1680],{"class":1109},[1080,2971,1100],{"class":1086},[1080,2973,2124],{"class":2123},[1080,2975,1087],{"class":1086},[1080,2977,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006,3008,3010],{"class":1082,"line":1090},[1080,2979,1093],{"class":1086},[1080,2981,1920],{"class":1096},[1080,2983,1100],{"class":1086},[1080,2985,1103],{"class":1086},[1080,2987,1392],{"class":1086},[1080,2989,1100],{"class":1086},[1080,2991,1773],{"class":1109},[1080,2993,1100],{"class":1086},[1080,2995,1380],{"class":1086},[1080,2997,1106],{"class":1086},[1080,2999,1939],{"class":1109},[1080,3001,1100],{"class":1086},[1080,3003,1380],{"class":1086},[1080,3005,1106],{"class":1086},[1080,3007,1948],{"class":1109},[1080,3009,1100],{"class":1086},[1080,3011,1953],{"class":1086},[1080,3013,3014],{"class":1082,"line":1118},[1080,3015,1965],{"class":1086},[990,3017,3018],{},"The platform-emitted lifecycle events are worth knowing, since most apps subscribe to at least one of them:",[1025,3020,3021,3026,3032,3037],{},[1028,3022,3023,3025],{},[994,3024,1939],{}," — This app was activated for a Tenant",[1028,3027,3028,3031],{},[994,3029,3030],{},"app.uninstalled"," — This app was deactivated",[1028,3033,3034,3036],{},[994,3035,1948],{}," — This app was deployed with a new version",[1028,3038,3039,3042],{},[994,3040,3041],{},"tenant.provisioned"," — A new Tenant was created",[1063,3044,3046],{"id":3045},"validation","Validation",[990,3048,3049,3050,3053],{},"You won't discover a malformed manifest in production, because the platform checks it at three points along the way: when you register the app with the revenexx CLI (",[994,3051,3052],{},"revenexx apps register --manifest manifest.json","), again when a deployment is created, and a final time when a customer installs it. Each gate catches problems earlier than the last.",[990,3055,3056,3057,1010,3059,1010,3061,3063,3064,3066,3067,3069],{},"An invalid manifest blocks deployment outright rather than failing quietly later. The usual culprits are a missing required field (",[994,3058,1123],{},[994,3060,1144],{},[994,3062,1165],{},", or ",[994,3065,1186],{},"), a dependency or peer dependency that names an app the platform can't find, a permission on an entity that isn't defined in ",[994,3068,1013],{},", or a policy whose attributes are malformed. In every case the error names the specific problem, so the fix is usually obvious.",[1063,3071,3073],{"id":3072},"best-practices","Best Practices",[990,3075,3076,3077,3080],{},"A good manifest is a ",[1041,3078,3079],{},"small"," one — it claims the least it can and says plainly what it does. A few habits get you there.",[990,3082,3083,3086,3087,3089,3090,3093,3094,3096],{},[999,3084,3085],{},"Name the app for what it is."," Keep names singular and descriptive (",[994,3088,1132],{},", not ",[994,3091,3092],{},"order_system","), and use the ",[994,3095,1207],{}," field to explain anything non-obvious, especially unusual permission requirements a reviewer might otherwise question.",[990,3098,3099,3102],{},[999,3100,3101],{},"Declare exactly what you use, and nothing more."," List only the permissions the app actually exercises and only the dependencies it genuinely calls. Requesting unused access erodes the principle of least privilege and makes the install-time consent screen scarier than it needs to be; declaring phantom dependencies drags in apps the customer didn't need.",[990,3104,3105,3108,3109,3112,3113,3116,3117,3119,3120,3122],{},[999,3106,3107],{},"Stay narrow with policies and flexible with versions."," Avoid wildcards like ",[994,3110,3111],{},"host: \"*\""," or ",[994,3114,3115],{},"bucket: \"*\""," unless you can articulate why no tighter scope works. And prefer caret ranges (",[994,3118,2181],{},") over exact pins (",[994,3121,1174],{},") for dependencies, so a routine patch in an app you depend on doesn't strand you on a version that no longer exists.",[1063,3124,3126],{"id":3125},"next-steps","Next Steps",[1025,3128,3129,3137,3145],{},[1028,3130,3131,3136],{},[999,3132,3133],{},[1004,3134,3135],{"href":1006},"Concept"," — Understand the declarative app model",[1028,3138,3139,3144],{},[999,3140,3141],{},[1004,3142,165],{"href":3143},"\u002Fdocs\u002Fproducts\u002Fapps\u002Fschema-reference\u002F"," — Define your data model",[1028,3146,3147,3152],{},[999,3148,3149],{},[1004,3150,123],{"href":3151},"\u002Fdocs\u002Fproducts\u002Fapps\u002Fcockpit-integration\u002F"," — UI extension points",[3154,3155,3156],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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}",{"title":1076,"searchDepth":1090,"depth":1090,"links":3158},[3159,3160,3167,3168,3169],{"id":1065,"depth":1090,"text":1066},{"id":1968,"depth":1090,"text":1969,"children":3161},[3162,3163,3164,3165,3166],{"id":1973,"depth":1118,"text":1974},{"id":1228,"depth":1118,"text":1038},{"id":1349,"depth":1118,"text":1049},{"id":2515,"depth":1118,"text":2516},{"id":1680,"depth":1118,"text":201},{"id":3045,"depth":1090,"text":3046},{"id":3072,"depth":1090,"text":3073},{"id":3125,"depth":1090,"text":3126},"Complete manifest.json specification and field reference","md",null,{"status":3174},"published",true,{"title":141,"description":3170},{"loc":142},"YoZXywxkLFkr2CvX9bNsF1ulVbDM-mduBP52yAMIKnk",1785229260235]