Environments and migrations

Configuring the CLI

First of all, you need to install the DatoCMS CLI with the following command:

Terminal window
npm install @datocms/cli

You can verify that everything is correctly installed by running the help command of the CLI:

Terminal window
npx datocms --help

Setting up a CLI profile

Although not strictly necessary, we strongly suggest generating a datocms.config.js configuration file in the root of your website/app project to avoid having to repeat a number of options for every command you run.

You can configure the profile with the profile:set command — and re-run the same command at a later time if you need to make some changes:

$ npx datocms profile:set
Requested to configure profile "default"
Config file already has profile "default", existing settings will be overridden
✔ * Level of logging to use for the profile (NONE, BASIC, BODY, BODY_AND_HEADERS) NONE
✔ * Directory where script migrations will be stored ./migrations
✔ * API key of the DatoCMS model used to store migration data schema_migration
✔ * Path of the file to use as migration script template (optional)
✔ * Path of the tsconfig.json to use to run TS migration scripts (optional)
Writing "datocms.config.json"... done

The generated datocms.config.json file will look similar to this:

{
"profiles": {
"default": {
"logLevel": "NONE", // See https://www.datocms.com/docs/content-management-api/using-the-nodejs-clients#logging-request-responses
"migrations": {
"directory": "./migrations", // Where the autogenerated migration files are saved
"modelApiKey": "schema_migration", // In the CMS, the API key of the model that will be created to save migration progress metadata
"template": "", // You can provide your own template if you'd like. See https://github.com/datocms/cli/blob/main/packages/cli/src/commands/migrations/new.ts#L11-L88 for the default template
"tsconfig": "" // Path to a custom tsconfig to use when running migration scripts. Only use if your dev env needs it.
}
}
}
}

Most of the time, you can just simply confirm the default values suggested by the CLI.

Once done, add the config file to your Git repository:

Terminal window
git add datocms.config.json
git commit -m "Add datocms.config.json file"
Need to manage multiple DatoCMS projects from the same repo?

You can set up additional profiles with the datocms profile:set <NEW_PROFILE_NAME> command.

When you have multiple profiles, you can specify the profile to use to run a command with the --profile flag (or by exposing a DATOCMS_PROFILE environment variable).

Specify a DatoCMS API token

Before working with migrations, you also need to set up the API token to use to perform all the operations. The API token's associated role needs at least these permissions on all the environments you want to migrate from or to:

  • Customize content navigation bar

  • Create/edit models and plugins

  • Create/edit workflows

  • Create/edit shared filters

You can pass the API token as a parameter to every command, e.g.:

Terminal window
$ npx datocms migrations:run --api-token=<YOUR-API-TOKEN> [...]

Or expose it as an environment variable:

Terminal window
$ export DATOCMS_API_TOKEN=<YOUR-API-TOKEN>
$ npx datocms migrations:run [...]

The CLI also loads environment variables from a .env file, so you can also place the token there — but make sure not to commit the file to your repo!

Terminal window
$ echo '.env' >> .gitignore
$ echo 'DATOCMS_API_TOKEN=<YOUR-API-TOKEN>' >> .env

Last updated: November 13th, 2025