October 1, 2026 · Muhammad Umar · More by Muhammad Umar
Shopify's New HTML Streaming: The Theme Eligibility Rule
Shopify now streams storefront head markup before the page finishes rendering, cutting TTFB platform-wide — eligibility depends on one Liquid syntax rule.

What changed
Shopify now renders everything in a storefront layout up to {{ content_for_header }} and flushes it to the browser as soon as that part is ready, instead of waiting for the full template to finish. The rest of the page streams in the same connection once the template completes. The HTML document itself is unchanged — only when the browser receives each part changes. Shopify reports the median store saw Time to First Byte drop about 29% at p75 and 21% at p90 across all storefront page views, platform-wide, with no merchant or developer action required for eligible pages. First Contentful Paint and Largest Contentful Paint — the metrics buyers actually see — improved too, though by a smaller 2% to 6%.
Eligibility is exact, not general
Two conditions gate it. First, the page must render from a JSON template; pages still rendered from .liquid templates aren't streamed yet, because a Liquid template can swap layouts or set variables the layout reads later, leaving no safe point to cut the response. Second, the layout's {{ content_for_header }} tag must appear as a bare output tag directly inside <head> — not wrapped in a filter, not inside {% if %} or {% capture %}, not tucked into a snippet, and not assigned to a variable first. Any of those breaks eligibility for that page. Preview themes, the preview bar, and the theme editor are excluded entirely — Shopify's guidance is to check the live theme to see the effect.
The gain a theme captures depends on resource placement
TTFB improves for every eligible page by roughly the same margin, but how much of that reaches first paint depends on where a theme declares its render-blocking resources relative to {{ content_for_header }}. Anything declared above the tag starts downloading the moment the head is flushed, while anything below it waits for the full response. Shopify's own comparison, measured at p75 for the median store, found Horizon — which defines nearly all its resources before the tag — getting roughly 3x the FCP gain and 2x the LCP gain that Dawn got, where base.css, font declarations, and component styles sit below the tag. For a theme developer, the actionable move is moving critical resource definitions above {{ content_for_header }} where ordering dependencies allow it.
TTFB stops being a clean proxy for server time
Streaming also changes what Time to First Byte measures. finalResponseHeadersStart now marks only the arrival of the first chunk, not the full render, so a fast TTFB no longer guarantees fast server-side Liquid rendering on a streamed page. Shopify points to two alternatives: the Theme Inspector for Chrome, which profiles server-side Liquid rendering and is unaffected by streaming, or the responseEnd − finalResponseHeadersStart interval as a proxy for the work that happens after the first flush.