Build with Sanity MCP in Replit. Prizes up for grabs! Submit by June 14

Contentful to Sanity

Official(made by Sanity team)

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

By Espen Hovlandsdal & Cody Olsen

Install command

npm i contentful-to-sanity

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

Related contributions