# Storefront zones — extension blocks in any theme A CLOSED enum of places on the storefront where an extension's **block** (a [kit-tree](/reference/kit-trees)) can appear. Zones are rendered by the platform's sections and page renderer, so every zone exists in every theme; the block is drawn through the ACTIVE theme's element kit, never with its own CSS or JS. Placement is **owner-driven**: installing an extension never injects anything; the owner (or an agent via `design.zone.place`) places a block, and it lives in the store bundle (`layout.zones`). Nothing renders inside the checkout enclave or on `/siparis` (ADR 0021). | zone | where | |---|---| | `header.utility` | header actions row, before the cart button | | `header.below` | under the header row (above the page) | | `home.top` | home page, above the first section | | `home.bottom` | home page, after the last section | | `product.gallery.after` | product page, under the gallery | | `product.below-buybox` | product page, under the add-to-cart box | | `product.after-description` | product page, after the description | | `product.bottom` | product page, after the last section | | `collection.before-grid` | collection page, above the product grid | | `collection.after-grid` | collection page, under the product grid | | `cart.top` | cart page, above the lines | | `cart.bottom` | cart page, after the summary | | `footer.above` | footer, above the columns | | `page.top` | static + extension pages, above the first section | | `page.bottom` | static + extension pages, after the last section | Limits: ≤ 4 fills per zone, fill config ≤ 4096 bytes. A fill of a disabled or uninstalled extension is simply absent (never broken). Commands: `design.zone.place`, `design.zone.remove`, `design.extpage.add`, `design.extpage.remove` (all proposal-able for Ajan tokens).