Skip to content

sanity-io/contentful-to-sanity

Repository files navigation

contentful-to-sanity

npm stat npm version

This package liberates Contentful spaces, creating Sanity projects and schemas as it goes.

Install

npm i -g contentful-to-sanity

Or use it on demand with npx:

npx contentful-to-sanity@latest --help

Usage

1. Open Contentful and navigate to your space: https://app.contentful.com/

  • Find your contentful space ID of your project (under Space settingsGeneral)
  • Create an API Key and get the Content Delivery API - access token (under SettingsAPI keysContent delivery / preview tokensadd api key)
  • Create a content management token (under SettingsAPI keysContent management tokensGenerate personal token)

2. Setup a clean Sanity v3 Studio and connect it to, or create, the Sanity project and dataset you want as your destination:

npm create sanity@latest --template clean --create-project "Your Project Name" --dataset production --output-path ./migrate

3. Run the migration, which prepares a dataset.ndjson file for the later import step:

npx contentful-to-sanity@latest -s <space-id> -t <management-token> -a <access-token> ./migrate

4. Start the dataset import process, which will finish in the background:

cd ./migrate && npx sanity dataset import ./dataset.ndjson

5. Open ./migrate/sanity.config.ts

If you chose the clean template it should look like this

import {defineConfig} from 'sanity'
import {deskTool} from 'sanity/desk'
import {visionTool} from '@sanity/vision'
import {schemaTypes} from './schemas'

export default defineConfig({
  name: 'default',
  title: '<project-name>',

  projectId: '<project-id>',
  dataset: '<dataset>',

  plugins: [deskTool(), visionTool()],

  schema: {
    types: schemaTypes,
  },
})

Now replace the schemaTypes import with the generated one:

import {defineConfig} from 'sanity'
import {deskTool} from 'sanity/desk'
import {visionTool} from '@sanity/vision'
-import {schemaTypes} from './schemas'
+import {types as schemaTypes} from './schema'

export default defineConfig({
  name: 'default',
  title: '<project-name>',

6. Try the Studio 🎉

npm dev

You don't have to wait for the npx sanity dataset import ./migrate/dataset.ndjson job to finish before the Studio is ready for use. The Studio will keep up to speed with the progress of the import job in real-time.

Commands

For more information on the available commands and their options, run contentful-to-sanity --help.

License

MIT © Sanity.io