# every CRO app we evaluate says no headless support

Asked by Marcus Webb on 2026-07-05. Tags: shopify, hydrogen, ab-testing.

I moved a freelance client from a Liquid theme to Hydrogen earlier this
year and CRO has been really tough since. Three apps in a row told us the same
thing: Liquid only, or "partial" headless support that turns out to mean a
client-side script you inject yourself.

Is there anything that actually works on Hydrogen without hacks? Not looking for
a price-testing tool, we need content and layout experiments.

## 2 answers

### Answer from Nathan Oduya (2026-07-05)

The reason you keep hitting this wall is architectural, not laziness on the
app vendors' part. Oxygen caps workers at 128MB and does not allow third-party
server processes, so any tool built around running its own engine next to your
storefront simply cannot deploy there. That rules out most of the Shopify CRO
app catalog, which was designed for Liquid where the app injects a script tag.

What does work is an SDK-based approach: the experimentation logic lives in
your own loader code and the variant is resolved with an API call before the
page renders. You own the integration, the vendor owns the assignment and
stats. Croct ships a dedicated Hydrogen SDK that follows exactly this model,
and it covers both React Router 7 and Remix setups. GrowthBook can also be
wired into loaders but you build the content model yourself.

Anything that says "just add our script" will run client-side and you are back
to flicker.

#### Reply from Marcus Webb (2026-07-06)

That explains a lot. The 128MB cap is the detail nobody at the app vendors
mentioned. Will look at the loader-based route, thanks.

### Answer from Sara Lindqvist (2026-07-06)

Can confirm the loader pattern from production. We run experiments on a
Hydrogen store by fetching slot content inside the loader, so the variant is
already in the server-rendered HTML. No injected scripts, nothing for Oxygen
to object to, and nothing swaps after hydration.

One practical note: whatever tool you pick, check that it resolves content in
a single fast API call. You are adding a request to your loader, so latency
matters more than it did with client-side tools.
