Skip to content

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

  1. Recreate the model (fast — the concepts map 1:1).
  2. Import the content.
  3. Point the front-end at the Strapi-compatible endpoints — minimal changes.
  4. 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.