Reference

Compile to update — the estate by seven lifecycle stages

Every application in the estate, described by the same seven stages. No recommendation is made here and nothing is compared on merit — each cell states what happens, who owns it, and what the unit of change is. Where a stage does not exist for a surface, the cell says so; an absent stage is usually the most informative thing on the row.

The seven stages

The estate, stage by stage

Shopify theme · LiquidShopify app · admin + theme extensionWebflow site · + Designer ExtensionCloudflare Worker · behaviour layerXano · data plane and rules
CompileNone for templates. Liquid is interpreted at render; a syntax error surfaces on the page. Theme JavaScript can be built with Vite — TypeScript, code splitting, tree shaking — without adding a frameworktsc on the app and each extension; the CLI type-checks before it will deploySite: none. Extension: tsc, and a deploy guard that refuses on failuretsc --noEmit, then a bundler; a type error stops the deployFunction stacks validate on save; Lambda steps are JS/TS executed on Deno
PermissionsStructural — the language cannot execute arbitrary code, and cannot hold a secret. Storefront data only, plus a script lock on payment templatesDeclared as access scopes in the manifest. The install mints the credential — this is what the bundle is forSite: none, and no secret storage. Extension: scoped to the workspace that installed it, under the app's own identityDeclared as bindings. A store the config does not name is unreachable at runtime, not merely unusedPer-endpoint auth plus the rule artefact every path calls; entitlements signed and verifiable
RenderServer-side by the platform, to a browser and to crawlersAdmin UI in an isolated frame; theme extension renders into the storefrontStatic pages from the CDN; extension renders inside the DesignerEdge — HTML, JSON, feeds, and events for callers with no browser at allDoes not render. Returns records and decisions
BundleThe theme itself; assets uploaded per file. A Vite build produces split chunks that ship as ordinary theme assetsThe CLI packages app and extensions as one versionOne archive per extensionOne worker bundle plus static assets, in a single uploadNo bundle step. The stack is the artefact
DeployTheme push, or an editor change published by a merchantCLI deploy; install by listing or a custom-distribution link — no Plus requiredSite: publish from the Designer. Extension: upload the bundleOne command, pinned to one config and one environmentSaved, then live; releases can be packaged and promoted between environments
VersionTheme version, and the git history of the theme repoApp version per deploy; extensions versioned with it and rolled back togetherSite publish history; extension version in its manifestVersion metadata bound into the runtime — the worker can name the code that answered a requestNamed releases; the ledger records which decision was made under which
UpdateSmallest unit in the estate: one Liquid file, or a merchant editing content with no developer involvedA new app version. Scope changes require re-consent by the merchantContent: publish, no build. Extension: rebuild and re-uploadRedeploy the worker — behaviour changes on every surface at once, with no host site republishedA rule can change without a deploy, which is what makes conditional authorisation practical — and why the evidence layer is the compensating control

How to read the empty cells

Liquid has no compile and no bundle, which is exactly why a content change is cheap there and why the language forbids arbitrary code — the safety had to come from somewhere other than a build step. Xano has no bundle and no render, which is why a rule can change without a release and why the audit trail carries the weight a release process would otherwise carry. Neither absence is a deficiency; both are the trade that makes the surface good at its stage.

The same seven stages for a rebuilt storefront

Stated for comparison, on the same terms, with no adjectives.

Rebuilt storefront · JavaScript frameworkWhat changes against the row above
CompileFull application build; type-check, transpile, route compilationAdded where the theme had none
PermissionsRoute middleware for the perimeter; per-record checks written by hand in each pathImplicit rather than declared — a check must be remembered, and nothing fails when it is not
RenderServer-rendered and hydrated in the browserComparable, at a higher operational cost
BundleApplication bundle plus per-route chunksAdded where the theme had none
DeployBuild and deploy the applicationContent changes now pass through a build
VersionDeployment id per releaseComparable
UpdateSmallest unit is a deployment. A copy change compiles, bundles and deploys the applicationThe unit of change grows by two stages — which is the whole of the lead-time difference

The load-bearing row is Update. Everything else is a matter of taste or budget; the unit of change determines how long a content correction takes and who has to be available for it.

What the inventory shows