Knowledge
Shopify knowledge
Move from business pages into content and module combinations, then down to Shopify themes, platform capabilities, and versioned implementations.
Apps and integrations
Covers app responsibilities, extension surfaces, distribution, authentication, environments, billing, and review delivery; theme internals belong to the storefront topic, and tracking experiments to data and automation.
Native Settings, Apps, or Custom Development: Locate the Extension First
Locate a Shopify extension requirement in the storefront, checkout, customer accounts, or admin before deciding between native configuration, installing an app, and custom development, and know what each one has to be verified against.
Three Kinds of Shopify App: Public, Custom, and the Retired Admin-Created App
Compares the two distribution methods Shopify still lets you create — public and custom — against the retired admin-created custom app, covering who creates each one, install scope, authentication, billing, and the configuration consequences of a distribution method you can never change.
Separating Development, Staging, and Production for a Shopify App
An environment matrix for a Shopify App from local development through integration testing to release, covering how organizations, apps, dev stores, config files, backend resources, secrets, and release permissions should be separated.
Shopify App Review: Let the Reviewer Get In, Understand It, and Finish the Test
Submission preparation organized around what a Shopify reviewer actually does — installation, authentication, test accounts, demo data, screenshots and video, compliance webhooks, and a reviewer entry point that recovers better than an automatic cross-domain redirect.
Usage Billing for a Shopify App: Define the Unit Before You Wire the Charge
Starting from a sync-style Shopify App, how to define a billable unit merchants can understand, separate previews and skips from real writes, and use an internal ledger, idempotent reporting, cycle quotas, and up-front quotes to avoid double or surprise charges.
Two Shopify Apps on One Backend: Separate the Identity, Not the Business Logic
How public, custom, or per-environment Shopify Apps can share one business service while keeping credentials, authorization, sessions, webhooks, billing, and deletion events separate, so installations and tokens for the same store never overwrite each other.
All articles
Horizon's Add-to-Cart Race Handling: Clicking Add While a Variant Switch Is Still Pending
A Horizon 4.2.0 source walkthrough of what happens when a shopper switches variants and clicks add to cart before the section request returns: a ProductSelectEvent carrying a promise, a generation counter, a queue of intent snapshots, pure-function variant resolution, quantity renormalized for the new variant and a single batched POST, plus debatable points such as animating on enqueue.
Horizon's Web Components Base Class: Refs, on: Event Delegation, and the Upgrade Race
A Horizon 4.2.0 source walkthrough of the framework-free Component base class: automatic ref collection and ownership, global event delegation through on: attributes, the custom element upgrade race, declarative Shadow DOM hydration, and how updatedCallback is meant to work with morph, plus a doubt about whether it fires.
Horizon's Keyed Lazy Hydration: Updating Only Nodes Marked with data-hydration-key
A Horizon 4.2.0 source walkthrough of morph's hydration mode: matching only by data-hydration-key, the no-insert, no-remove contract, three use cases in product recommendations, the cart drawer and the header, the header branch that leaves featured products out of the first render, and the limits of this two-pass rendering.
Taming Layout Thrashing in Horizon: On-Demand Measurement, Batched Reads and Writes, Frame-Level Scheduling
A set of techniques from the Horizon 4.2.0 source for avoiding forced synchronous layout: measuring header heights before first paint only when needed, getting sizes from IntersectionObserver, batching reads and writes in the variant picker, a ResizeNotifier that skips the first callback, a Scheduler that waits for transitions, yielding to the main thread, and composing the fly-to-cart arc with CSS animations.
Horizon's Server-Side Contrast Colors: Deriving Text and Derived Colors with Liquid Color Filters
A Horizon 4.2.0 source walkthrough of how contrast colors are derived on the server when a block has a custom background: the palette's lightest and darkest colors, contrast-override's three-step text fallback and border fallback, brightness-based opacity tokens, hover color derivation, skipping contrast over background media, and issues such as the hard-coded brightness threshold and a preset description that doesn't match the code.
Horizon's Section Refresh and Morph: SectionRenderer Concurrency and DOM Merging
A Horizon 4.2.0 source walkthrough of SectionRenderer and the in-house morph: per-section cancellation and result reuse, sorted cache keys, first-paint caching and limited request deduplication, plus morph's form-state sync, mid-edit protection, runtime state preservation, skip switches and a few debatable couplings.
Horizon's Cross-Document View Transitions: Render Blocking, Bail-Out Conditions and a WebView Blocklist
A Horizon 4.2.0 source walkthrough of cross-document View Transitions in a multi-page theme: a settings-driven opt-in, render blocking until main content with a 1.8 second cap, releasing it when no transition can happen, skipping on user input, switching animations by type and passing the type across pages, plus the in-app WebView blocklist and in-page transitions.