Compare
Shapio vs Strapi
Shapio and Strapi are both open-source, self-hosted headless CMSs with REST and GraphQL. The difference is how the content model changes, and how a site ships.
Side by side
| Area | Shapio | Strapi |
|---|---|---|
| Changing a content type | Shapio In the admin, in production, live: a new schema version, no restart, every change reviewable and reversible. | Strapi The Content-Type Builder writes files and is disabled in production; you change the model in development and redeploy. |
| Schema in git | Shapio Yes. | Strapi Yes, and only that way: the files are the model, so production can't change until you deploy. |
| Shipping content and schema | Shapio Change sets: schema and content ship together as a numbered snapshot; a site build pins a snapshot, and a deploy hook fires on publish. | Strapi Content and schema deploy separately; content moves by transfer or by hand. |
| Multi-site | Shapio Sites with their own schema; a type can be shared with all sites. | Strapi A single instance per project; multi-tenancy through plugins or separate deployments. |
| Localization | Shapio Per field: a field is localized or shared. Fallback chains (fr-CA, then fr, then the default) in the API, which says which locale served each entry. A shared value changed in one locale lands in every locale's draft, and the admin offers to publish the other locales in one action. Any BCP 47 code. Delivery, GraphQL, SEO defaults and visual editing all know the locale. | Strapi Built in since Strapi 5: per-field localized or shared, published per locale, with a locale switcher and copy-from-locale in the editor, and per-locale editor permissions. No fallback: a locale with no version returns nothing. Locales come from a fixed list. |
| Roles and permissions | Shapio Custom admin roles per content type, field and action, per site; end-user accounts with Google and GitHub sign-in; an audit log. All in the open-source build. | Strapi Fixed roles in the community edition; custom RBAC, SSO and audit logs are paid. |
| Rich text | Shapio Tiptap, versioned JSON at rest, HTML on request. | Strapi The Blocks editor, stored as JSON; or Markdown or CKEditor. |
| Databases | Shapio PostgreSQL, MySQL, SQLite. | Strapi PostgreSQL, MySQL, SQLite (and MariaDB). |
| Visual editing and preview | Shapio Draft preview beside the document and click-to-edit on the page, per site, from a snapshot you can pin. | Strapi Preview in v5, configured per content type. |
| AI | Shapio Assist with your own provider key, never on by default; an MCP server so agents can model and edit content. | Strapi AI features in Strapi Cloud. |
| Pricing | Shapio Apache-2.0, every feature, self-hosted. No paid tier yet; a hosted cloud is planned. | Strapi MIT community edition; RBAC, SSO and audit logs in paid tiers; Strapi Cloud. |
Measured
| Request | Shapio | Strapi |
|---|---|---|
| List of 20 with a populated relation | Shapio 2,296 req/s, 51.5 KB, 5 SQL statements 2.7 ms per request | Strapi 930 req/s, 49.4 KB, 8 SQL statements 5.9 ms per request |
| One entry by slug, with populate | Shapio 6,554 req/s, 2.7 KB, 5 SQL statements 1.7 ms per request | Strapi 1,793 req/s, 2.6 KB, 8 SQL statements 4.2 ms per request |
| Filtered list | Shapio 2,750 req/s, 39.7 KB, 3 SQL statements 2.7 ms per request | Strapi 1,288 req/s, 37.0 KB, 7 SQL statements 3.7 ms per request |
req/s: requests answered per second with ten readers at once, on the same machine. ms: how long one request took on its own, median of three rounds. Lower ms and higher req/s are better.
Same seeded data, same machine, PostgreSQL 18, autocannon with 10 connections, medians of three rounds. Shapio 0.4.1 against Strapi 5.56. Both at default settings with logging on. Harness and raw results are published with the release; numbers move with versions and hardware, so run it yourself.
Why switch
And when not to.
Strapi got there first, and that is most of its case: a bigger plugin list, more years in production, a hosted cloud. Feature for feature, Shapio is at parity on what a site needs: REST and GraphQL, drafts, revisions, scheduling, localization, media, webhooks, roles, an audit log, visual editing, deploy hooks, import from Strapi itself. Then it fixes the parts Strapi makes you live with. The content model changes in production from the admin, with no redeploy. Schema and content ship together as a snapshot a build can pin. Custom roles, field-level permissions and the audit log are in the open-source build, not in a paid tier. One instance runs many sites, each with its own model. And it is faster on the same box, under load and per request. The admin takes an afternoon to learn, and the importer brings a Strapi 5 export's model, media and content across. Stay on Strapi if a plugin you cannot live without exists only there. Otherwise, switch.