Migration adapters for bringing content from external CMS platforms into b10cks.
This repository is organized as a pnpm workspace so each source-system adapter can evolve independently while still sharing release tooling, development conventions, and a common operational model. Today the monorepo ships one adapter, Storyblok, with the structure already in place for additional source platforms.
The migration tooling in this monorepo is built for real, repeatable migrations rather than one-off export scripts:
- Source records are tracked in b10cks via
external_id, so reruns reconcile instead of blindly duplicating data. - Content migration is source-aware, translating CMS-specific structures into b10cks blocks, content, assets, and data sources.
- Migrations are designed to be staged and rerunnable, which is critical for dry runs, cutovers, and incremental syncs.
- Operators can work interactively through the CLI or compose migrations programmatically from the library API.
migration/
├── package.json
├── pnpm-workspace.yaml
└── packages/
└── storyblok/
├── README.md
├── config.json.example
└── src/
| Package | Status | Purpose |
|---|---|---|
@b10cks/migrate-storyblok |
Active | Migrates Storyblok asset folders, assets, blocks, content, datasources, and datasource entries into b10cks |
The Storyblok adapter currently supports:
- Asset folder migration with preserved hierarchy and
external_idtracking - Asset migration with folder mapping, tag preservation, translated metadata, and focus-point normalization
- Datasource and datasource-entry migration with slug-aware reconciliation
- Block migration from Storyblok components, including tags, folders, datasource-backed options, references, and nested block schemas
- Content migration with two-pass reconciliation, localized overlays, delta sync, and optional publish behavior
- CLI-based operation plus programmatic access to all migrators
Install dependencies from the repository root:
pnpm installBuild the published package(s):
pnpm buildRun the full test suite:
pnpm testRun linting and formatting:
pnpm lint
pnpm formatFor a real Storyblok project, the safest sequence is:
- Validate credentials and environment setup.
- Migrate structural dependencies first: asset folders, assets, datasources, datasource entries, and blocks.
- Migrate content after referenced assets, blocks, and data sources exist in b10cks.
- Re-run content with
--forceor a refined config file if you need to override delta-sync safeguards during cutover.
The Storyblok adapter is intentionally rerunnable. Existing b10cks records are matched by external_id and, for content, also reconciled by resolved slugs and hierarchy when possible.
The root workspace exposes the commands you will use most often:
pnpm buildbuilds the workspace packagespnpm testruns package testspnpm lintrunsoxlintpnpm formatrunsoxfmt --writepnpm cleanremoves package build artifactspnpm changesetmanages versioning metadata
The monorepo is structured so each source adapter can provide:
- A focused CLI entrypoint
- Source and target service clients
- Translators from source concepts to b10cks entities
- Migrators for each domain object
- Package-scoped documentation and examples
That keeps source-specific complexity inside each package while preserving a consistent operator experience across adapters.
The adapter-specific README is the operational guide for running migrations:
- Storyblok:
packages/storyblok/README.md