Comparison · for developers

Primo vs Storyblok.

Storyblok has one of the best visual editors in the headless world — real-time, side-by-side preview of your front-end, a component model that maps cleanly onto your UI, framework-agnostic delivery, and serious i18n. So this isn’t a takedown. The real difference is architectural: Storyblok is hosted, your content lives on their platform and is delivered to your app over an API, and the visual editor previews a separate front-end app that fetches that content. With Primo, the content is files in your repo, there’s no API to fetch, and the editor is the renderer — your client edits the actual rendered page.

The short version
Pick Storyblok if…

…you’re a marketing team or enterprise that wants a polished, real-time visual editor with live preview, a component-based content model shared across channels, strong i18n, and a mature SaaS with CDN delivery. For multi-channel content operations, Storyblok’s visual editing and platform maturity are genuinely excellent.

Pick Primo if…

…you’re building a content site to hand to a client and you want to own it outright — no hosted backend, no API layer, the file your agent edits as code being the same file your client edits on the page. Self-host, MIT, and Svelte today.

Where they actually differ

Storyblok
Primo
Hosting
Hosted SaaS — you don't own the backend
Self-host — PocketBase, your server
Where content lives
On their platform, delivered via CDN
Files in your repo + self-hosted SQLite
How the app gets content
~ Fetched over Storyblok's content API
No API — renderer reads the files directly
Visual editing
Live preview of a separate front-end app
In place — editor is the rendered page
Editor and front-end
~ Editor previews your app; they stay separate
Same files; editor generated from them
Framework
Framework-agnostic via API
~ Svelte today; SvelteKit integrate coming
License
Proprietary SaaS, per-seat pricing
Open source (MIT), self-host free
Where Storyblok genuinely wins

A visual editor that’s actually good.

Be fair first. Storyblok's visual editor is genuinely excellent — real-time, side-by-side preview where an editor clicks an element and sees the change against the live front-end. That's hard to build well, and Storyblok has built it well. Its component-based content model maps cleanly onto front-end components, which is exactly the mental model developers already have.

It's also framework-agnostic: because content is delivered over an API, you can build the front-end in React, Vue, Astro, Svelte, or anything that can make an HTTP call. Add strong i18n, a mature SaaS platform with CDN delivery, and a feature set built for big marketing teams and enterprise, and Storyblok is a strong, well-rounded product. Primo isn't trying to out-enterprise it.

The architectural difference

A hosted platform and an API, vs files you read directly.

Here's the mechanism, stated plainly. Storyblok is hosted — your content lives on their platform, and your front-end fetches it over their content API. The visual editor is impressive, but note what it actually is: it loads your separate front-end app in a preview frame and lets editors change content that the app then re-fetches and renders. The editor previews your site; it isn't your site. There's a platform you depend on and an API layer in between.

Primo collapses that. The whole site — blocks, pages, content, config — is plain files in your repo, and on the server it lives in a lightweight store you own (SQLite via PocketBase). There's no hosted platform holding your content and no API layer to fetch — the renderer reads the files directly. A block is a Svelte component plus a fields.yaml beside it, and the editor generates its UI from that field schema. So the block your agent edits as code and the page your client edits are the same files, with no glue code in between.

What it means day to day

Your client edits the page itself, not a preview of it.

With Storyblok, both the developer and the editor work against the platform: the developer wires the front-end to fetch from the API, and the editor works in Storyblok's visual editor that previews that front-end. It's a smooth experience — and for a marketing team pushing content to web plus mobile plus other channels, that decoupling is exactly what you want.

With Primo, the client opens the actual site and edits it in place: click a heading and type, swap an image, reorder sections — on the rendered page, which is the source, not a preview frame fetching from an API. For a freelancer or agency handing a finished site to one client, that's a smaller, more direct surface to teach and to own — no platform account, no API keys, no per-seat bill.

The honest catch

Storyblok for enterprise and i18n; Primo for content sites, in Svelte.

If you're running a large multi-channel content operation — many editors, heavy localization, content feeding web plus mobile plus other surfaces, enterprise workflow needs — Storyblok's hosted platform, mature i18n, and framework-agnostic API are hard to beat, and we won't pretend otherwise. That's its home turf.

Primo is built for the other shape: custom content sites — marketing sites, portfolios, local-business sites, landing pages — the kind a freelancer or agency builds and hands off to a single client. And today Primo's blocks are Svelte, not framework-agnostic. That's the trade that lets blocks be "just files" the editor and renderer both read directly, with no API. If you need multi-channel delivery, deep i18n, or a hosted platform today, weigh that honestly.

Questions developers ask

Isn't Storyblok's visual editor better than editing files?

Storyblok’s visual editor is genuinely good — real-time preview, side by side with your front-end. The honest difference isn’t quality, it’s what you’re editing: Storyblok previews a separate front-end app that fetches content over an API, while Primo’s editor is the renderer reading the same files. Both let a client edit visually; Primo just removes the platform and the API layer between the edit and the page.

Can I keep my React or Vue front-end like I can with Storyblok?

Not today. Storyblok is framework-agnostic because it delivers content over an API, so any front-end can consume it. Primo’s blocks are Svelte, because Svelte’s compile-time model is what lets a block be “just files” the editor and renderer both read directly with no API. On the roadmap is primo integrate for layering Primo onto an existing SvelteKit app (Astro next, Next.js aspirational). If you need React or Vue now, Storyblok is the honest pick.

Do both work with AI agents like Claude Code?

Primo is built for it: content and blocks are files in your repo, so an agent edits real files via primo pull / primo push, not a hosted API. The key difference is that an agent editing a block’s code and a client editing that block on the page touch the same files. With Storyblok an agent would work against the content API and platform instead of files you own.

What happens to my content if the company disappears?

With Primo you’re covered: content lives in your repo + self-hosted SQLite, and primo pull gives you a static export of both code and content at any time. It’s MIT-licensed and self-hostable, so there’s no lock-in. Storyblok is a proprietary hosted SaaS — your content sits on their platform, so check their export options if portability is a hard requirement.

Build it with an agent. Hand it to a human.

One command to spin up a workspace. Point any agent at the repo, then hand your client the browser.

$ npx primo-cli init my-workspace
✓ workspace ready · server.yaml written

MIT · open source · free forever