Migrate from Strapi
Move a Strapi project to Flow CMS — model mapping, content import, and the Strapi-compatible API that lets your front-end move last.
Strapi is the closest relative: both systems model structured content with collections, singles and components, and deliver it over REST/GraphQL. Flow CMS also ships a Strapi-compatible delivery layer, which changes the order of the migration — your front-end can keep running on Strapi-shaped responses while you move the content behind it.
The shape of the migration
- Recreate the model (fast — the concepts map 1:1).
- Import the content.
- Point the front-end at the Strapi-compatible endpoints — minimal changes.
- Migrate to the native API/SDK at your own pace (optional but recommended).
1. Map the model
| Strapi | Flow CMS | Notes |
|---|---|---|
| Collection type | Collection | Same idea, same granularity |
| Single type | Single | Same |
| Component | Component | Same — reusable field groups |
| Relation | Reference | One-way references; expand on read |
| Dynamic zone | Page builder blocks | Model repeatable sections as components |
| Media field | Media | WebP optimization is automatic on upload |
Recreate each type in Settings → Content Types (or script it against the management API). Keep the same API ids where you can — it keeps queries and imports mechanical.
2. Import the content
- Export from Strapi (its export tooling, or a script against its REST API reading page by page).
- Bring entries in through Flow CMS's content import (see the help center's
import guide) or script
POSTs against the management API: create, then publish. - Upload media first, then rewrite media references in entries to the new asset ids — imports go smoothest as assets → entries → references.
Migrate one representative content type end-to-end first — model, a dozen entries, media, front-end render — before bulk-running the rest. Every real migration surprise shows up in the first type.
3. Point your front-end at the compatible layer
The Strapi-compatible endpoints mirror the response shapes Strapi clients
expect (data/meta envelopes, populate-style expansion), so existing data
layers keep working with two changes: the base URL and the token
(read-only CONTENT token from Settings → API Tokens).
4. Go native when ready
The native REST and
GraphQL APIs plus the
@flowcms/client SDK are the long-term home: typed
helpers, explicit expand, and consistent pagination. Migrate route by route —
both surfaces read the same content, so there is no flag day.
Webhooks map too: Strapi lifecycle hooks that pinged your site translate to
Flow CMS webhooks on content.published and
friends, with HMAC-signed payloads.