Skip to content
apertio

Compare

The Optimizely alternative that injects no JavaScript and keeps your CSP intact

Optimizely's visual editor mutates the live DOM with injected script. Apertio makes a variant bounded data your own components render, so tests run with no flicker and a strict CSP stays intact.

Optimizely’s client-side editor injects JavaScript that mutates the live DOM. That is the source of test flicker, it adds an XSS and supply-chain surface, and it can force you to relax a strict Content Security Policy, including turning on unsafe-eval. Apertio takes a different unit of change. A variant is bounded structured content: a primitive value or an enum key, resolved on the server or at the edge and rendered by your app’s own components. Apertio never touches the DOM and injects no third-party JavaScript. Marketing keeps the same autonomy to launch and iterate on tests. Your engineers keep their strict, nonce-based CSP with no unsafe-inline and no unsafe-eval.

Apertio vs Optimizely
Dimension Apertio Optimizely
Rendering model Resolved data rendered by the app's own components; Apertio never touches the DOM Client-side editor injects JS that mutates the live DOM
Flicker None by construction: the resolved values arrive as props before the first render of the instrumented component Client-side mutation after library load is the classic flicker source
Injected third-party JS None. The SDK is the app's own version-pinned, auditable code Yes. The editor injects third-party JS into the page
CSP impact Strict nonce-based CSP with no unsafe-inline and no unsafe-eval stays intact; nothing to whitelist Can require relaxing CSP, including unsafe-eval for some features
Open source + license Yes, MIT No (commercial suite)
Pricing transparency Public, OSS-free intent; pricing meant to be comparable to or cheaper than Optimizely Hidden; lead-gen form only

Why the flicker goes away

Flicker in DOM-mutation tools comes from rendering a default and then changing it after the library loads. Apertio has no "before" state to flash from. The resolved values arrive as props before the first render of the instrumented component, so there is nothing to patch after paint and no anti-flicker snippet hiding the page. On Next.js this works across SSR, PPR / Cache Components, and edge-assigned rendering.

The security surface

No injected JS

The Apertio SDK is your own version-pinned, auditable code in your bundle, not third-party script on the page.

Strict CSP intact

No unsafe-inline, no unsafe-eval, nothing to whitelist. The serialized resolved-slots payload is JSON-encoded so it cannot break out of its context.

Bounded and auditable

Every possible rendered output is enumerable in advance, because variant data is constrained to an engineer-approved allowlist and the deployed code is the authority on what can render.

The honest tradeoff

Optimizely is a mature enterprise suite with a long track record, a broad feature set across experimentation, content, and commerce, and a marketer-first visual editing experience that can target arbitrary elements on a live page without a developer modeling them first. That last point is the real difference. Apertio only lets you test surfaces an engineer has modeled as typed slots. A novel surface still needs a small engineering change. Apertio converts "engineering per test" into "engineering per new surface" and aims to make adding a surface a five-minute PR, but it does not claim to remove engineering from experimentation. Apertio is also early: Phase 0 is built and verified, the SaaS control plane and publish CLI exist, but it does not match the breadth of an established suite. If you need to test arbitrary live-page elements today with no engineering involvement, Optimizely does that and Apertio does not.

Run tests without breaking your CSP

Apertio is open source and MIT licensed. Read the docs to instrument your first slot, or start free.

Frequently asked questions

Is Apertio a drop-in replacement for Optimizely?
No. Apertio is not a drop-in replacement. Optimizely’s visual editor can target arbitrary elements on a live page; Apertio only tests surfaces an engineer has modeled as typed slots, so adopting it means instrumenting the surfaces you want to test. In exchange you get zero injected JavaScript, no flicker, and a strict CSP that stays intact. Apertio is also earlier in its lifecycle than Optimizely and does not match the breadth of the suite.
Does Apertio require unsafe-eval or any CSP changes?
No. Apertio works under a strict, nonce-based CSP with no unsafe-inline and no unsafe-eval. There is no third-party script to whitelist, because a variant is data rendered by your own components rather than injected JavaScript that mutates the DOM.
Why do Optimizely-style tests flicker, and why does Apertio not?
Client-side editors render the original content first, then mutate the DOM after their library loads, which produces a visible flash. Apertio resolves the variant before render and passes the values to your components as props, so there is no original-then-changed sequence and no anti-flicker snippet hiding the page.
Is Apertio open source, and is pricing public?
Apertio is MIT-licensed and open source. Pricing is intended to be public and to lead with a free open-source path, comparable to or cheaper than Optimizely, rather than Optimizely’s lead-gen-form-only model.