Contentstack CLI Configuration Reference

View as Markdown
Last updated August 13, 2026

This document provides a comprehensive reference for all configuration options available across Contentstack CLI plugins.


Quick Start

Environment Variables

The CLI supports several environment variables that can be used to configure behavior without modifying configuration files.

CLI Configuration Environment Variables

VariableTypeDefaultDescription
CS_CLI_CONFIG_PATHstring-Custom path for CLI configuration directory
CS_CLI_LOG_PATHstringprocess.cwd()Custom path for CLI log files
CONFIG_NAMEstringcontentstack_cliName of the configuration file
ENC_CONFIG_NAMEstringcontentstack_cli_obfuscateName of the encrypted configuration file
ENC_KEYstringencryptionKeyEncryption key for configuration files
ENCRYPT_CONFbooleantrueEnable/disable configuration encryption

Usage Examples

Set custom log path:

export CS_CLI_LOG_PATH="/path/to/logs"
csdx cm:stacks:export

Disable configuration encryption:

export ENCRYPT_CONF=false
csdx cm:stacks:import

Use custom config directory:

export CS_CLI_CONFIG_PATH="/path/to/config"
csdx cm:stacks:export

Note Environment variables take precedence over configuration file settings and defaults.


Configuration Precedence

When the same configuration key exists at both the root level and module level, the CLI follows a specific precedence order.

Precedence Order

  1. Module-specific configuration (highest priority)
  2. Root-level configuration
  3. Default values (lowest priority)

How It Works

The CLI uses a recursive merge strategy (merge.recursive()) when loading configuration files. This means:

  • Module config overrides root config: If a key exists in both modules.<module-name>.<key> and root-level <key>, the module-specific value is used.
  • Root config is fallback: If a key doesn't exist in module config, the root-level value is used.
  • Defaults are last resort: If neither module nor root config has the key, default values are used.

Examples

Import Configuration Precedence

Example 1: importConcurrency for Entries Module

{
  "importConcurrency": 5,
  "modules": {
    "entries": {
      "importConcurrency": 10
    }
  }
}

Result: Entries module uses importConcurrency: 10 (module config), while other modules use importConcurrency: 5 (root config).

Code Reference: See entries.ts in the CLI repository.

Example 2: writeConcurrency for Content Types Module

{
  "writeConcurrency": 5,
  "modules": {
    "content-types": {
      "writeConcurrency": 8
    }
  }
}

Result: Content Types module uses writeConcurrency: 8 (module config), while other modules use writeConcurrency: 5 (root config).

Code Reference: See content-types.ts in the CLI repository.

Export Configuration Precedence

Example 3: chunkFileSize for Entries Module

{
  "modules": {
    "entries": {
      "chunkFileSize": 20
    }
  }
}

Result: Entries module uses chunkFileSize: 20 (module config). If not specified, it defaults to 10 (FsUtility default).

Example 4: fetchConcurrency for Assets Module

{
  "fetchConcurrency": 5,
  "modules": {
    "assets": {
      "fetchConcurrency": 10
    }
  }
}

Result: Assets module uses fetchConcurrency: 10 (module config), while other modules use fetchConcurrency: 5 (root config).

Common Keys with Precedence

The following keys can be set at both root and module levels:

Import:

  • importConcurrencymodules.entries.importConcurrency
  • fetchConcurrencymodules.<module>.fetchConcurrency
  • writeConcurrencymodules.<module>.writeConcurrency
  • chunkFileSizemodules.entries.chunkFileSize

Export:

  • fetchConcurrencymodules.<module>.fetchConcurrency
  • writeConcurrencymodules.<module>.writeConcurrency
  • chunkFileSizemodules.entries.chunkFileSize
  • limitmodules.<module>.limit
  • batchLimitmodules.<module>.batchLimit

Best Practices

  1. Use root-level config for global settings: Set common values at the root level to apply across all modules.
  2. Override per module when needed: Use module-specific config to customize behavior for specific modules.
  3. Avoid duplication: Don't repeat root-level values in module config unless you need different values.

Example - Recommended Pattern:

{
  "fetchConcurrency": 5,
  "writeConcurrency": 5,
  "modules": {
    "entries": {
      "importConcurrency": 10,
      "chunkFileSize": 20
    },
    "assets": {
      "fetchConcurrency": 10
    }
  }
}

In this example:

  • Most modules use fetchConcurrency: 5 and writeConcurrency: 5 from root
  • Entries module uses importConcurrency: 10 and chunkFileSize: 20 (module-specific)
  • Assets module uses fetchConcurrency: 10 (overrides root)

Export Configuration

Command: csdx cm:stacks:export

Default Configuration: See the default export configuration file in the CLI repository.

Basic Settings

OptionTypeDefaultRequiredDescription
hoststring"https://api.contentstack.io/v3"NoBase URL for Content Management API
preserveStackVersionbooleanfalseNoPreserve stack version information
source_stackstring-Yes*API key of source stack
datastring-Yes*Path to export directory
exportDirstring-NoAlias for data

*Required unless using CLI flags or management token alias

Path & Directory Settings

OptionTypeDefaultRequiredDescription
cliLogsPathstring-NoCustom path for CLI logs
branchNamestring-NoBranch name to export from
branchAliasstring-NoBranch alias to export from

Content Filtering

OptionTypeDefaultRequiredDescription
moduleNamestring-NoSpecific module to export
contentTypesstring[]-NoArray of content type UIDs
filteredModulesstring[]-NoArray of module names to filter
queryobject|string-NoQuery object or file path for filtering

Performance Settings

OptionTypeDefaultRequiredDescription
fetchConcurrencynumber5NoNumber of parallel fetch operations
writeConcurrencynumber5NoNumber of parallel write operations
delayMsnumber-NoDelay in milliseconds between requests
maxContentLengthnumber100000000NoMax content length in bytes (100 MB)
maxBodyLengthnumber100000000NoMax body length in bytes (100 MB)

Feature Flags

OptionTypeDefaultRequiredDescription
securedAssetsbooleanfalseNoExport secured assets
personalizationEnabledbooleanfalseNoEnable personalization features
skipStackSettingsbooleanfalseNoSkip exporting stack settings (not in default config, but supported)
skipDependenciesbooleanfalseNoSkip dependency resolution (not in default config, but supported)

Authentication

OptionTypeDefaultRequiredDescription
emailstring-NoEmail for basic authentication
passwordstring-NoPassword for basic authentication

Note Use the --alias flag to specify a management token alias instead of providing credentials directly in the configuration file.

Advanced Settings

OptionTypeDefaultRequiredDescription
master_localeobject-NoMaster locale configuration
developerHubBaseUrlstring-NoBase URL for Developer Hub API
marketplaceAppEncryptionKeystring"nF2ejRQcTv"NoEncryption key for Marketplace apps

Configuration Precedence Note

Important: When the same configuration key exists at both root level and module level, module-specific configuration takes precedence. For example, if you set fetchConcurrency: 5 at root and modules.assets.fetchConcurrency: 10, the assets module will use 10. See Configuration Precedence section for detailed explanation and examples.

Module-Specific Configuration

Assets Module
OptionTypeDefaultDescription
modules.assets.batchLimitnumber20Asset objects fetched per API call
modules.assets.chunkFileSizenumber1Size in MB for chunking large metadata JSON files (assets.json)
modules.assets.downloadLimitnumber5Parallel asset file downloads
modules.assets.fetchConcurrencynumber5Parallel fetch operations for asset metadata
modules.assets.includeVersionedAssetsbooleanfalseInclude versioned assets
modules.assets.securedAssetsbooleanfalseExport secured assets (adds auth token to asset URLs)
modules.assets.displayExecutionTimebooleanfalseDisplay execution time for batch operations
modules.assets.enableDownloadStatusbooleanfalseEnable download progress display for asset files
modules.assets.assetsMetaKeysstring[][]Additional metadata keys to include (default includes: ['uid', 'url', 'filename', 'parent_uid'])
modules.assets.hoststring"https://images.contentstack.io"CDN host for asset URLs
CS Assets (cs-assets)
OptionTypeDefaultDescription
modules.cs-assets.chunkFileSizeMbnumber1Maximum size (in MB) of each chunk when the CLI splits large assets.json metadata files during export.
modules.cs-assets.apiConcurrencynumber5Parallel Asset Management (AM) API calls during export.
modules.cs-assets.downloadAssetsConcurrencynumber5Number of asset files downloaded in parallel during export.
modules.cs-assets.securedAssetsbooleanfalseAdd auth token to asset download URLs. Required when secured assets are enabled.

Note If CS Assets is not active, the CLI ignores these options. They apply only when your region has CS Assets enabled and the branch has linked workspaces. See CLI for CS Assets.

Entries Module
OptionTypeDefaultDescription
modules.entries.limitnumber100Entries fetched per API call per content type/locale
modules.entries.batchLimitnumber20Parallel entry version fetches when exportVersions: true (only used for version export)
modules.entries.exportVersionsbooleanfalseExport all versions of each entry
modules.entries.chunkFileSizenumber10Size in MB for chunking large entry JSON files (defaults to FsUtility default of 10 if not specified)
modules.entries.invalidKeysstring[]See defaultKeys to exclude from exported entries
modules.entries.dependenciesstring[]['locales', 'content-types']Required modules that must be exported first

Default invalidKeys: ['stackHeaders', 'content_type_uid', 'urlPath', 'created_at', 'updated_at', 'created_by', 'updated_by', '_metadata', 'published']

Note downloadLimit is not used for entries export (only applies to assets module).

Precedence: Module-specific chunkFileSize, limit, and batchLimit are module-specific only and don't have root-level equivalents.

Content Types Module
OptionTypeDefaultDescription
modules.content-types.limitnumber100Content types fetched per API call
modules.content-types.validKeysstring[]See defaultValid keys to export

Default validKeys: ["title", "uid", "field_rules", "schema", "options", "singleton", "description"]

Note Content Types module uses the root-level writeConcurrency setting. Module-specific writeConcurrency is not supported for this module.

Global Fields Module
OptionTypeDefaultDescription
modules.global-fields.limitnumber100Global fields fetched per API call
modules.global-fields.validKeysstring[]See defaultValid keys to export

Default validKeys: ["title", "uid", "schema", "options", "singleton", "description"]

Taxonomies Module
OptionTypeDefaultDescription
modules.taxonomies.limitnumber100Taxonomies fetched per API call
modules.taxonomies.invalidKeysstring[]See defaultKeys to exclude from exported taxonomies

Default invalidKeys: ['updated_at', 'created_by', 'updated_by', 'stackHeaders', 'urlPath', 'created_at']

Personalize Module
OptionTypeDefaultDescription
modules.personalize.baseURLobjectRegion-specificBase URLs for Personalize API by region
modules.personalize.exportOrderstring[]['attributes', 'audiences', 'events', 'experiences']Export order

Base URLs by Region:

  • AWS-NA: https://personalize-api.contentstack.com
  • AWS-EU: https://eu-personalize-api.contentstack.com
  • AWS-AU: https://au-personalize-api.contentstack.com
  • AZURE-NA: https://azure-na-personalize-api.contentstack.com
  • AZURE-EU: https://azure-eu-personalize-api.contentstack.com
  • GCP-NA: https://gcp-na-personalize-api.contentstack.com
  • GCP-EU: https://gcp-eu-personalize-api.contentstack.com
Locales Module
OptionTypeDefaultDescription
modules.locales.limitnumber100Locales fetched per API call
modules.locales.requiredKeysstring[]See defaultRequired keys to export for locales

Default requiredKeys: ['code', 'uid', 'name', 'fallback_locale']

Environments Module
OptionTypeDefaultDescription
modules.environments.limitnumber100Environments fetched per API call
Extensions Module
OptionTypeDefaultDescription
modules.extensions.limitnumber100Extensions fetched per API call
Stack Module
OptionTypeDefaultDescription
modules.stack.limitnumber100Stack data fetched per API call
Webhooks Module
OptionTypeDefaultDescription
modules.webhooks.limitnumber100Webhooks fetched per API call
Workflows Module
OptionTypeDefaultDescription
modules.workflows.limitnumber100Workflows fetched per API call
modules.workflows.invalidKeysstring[]See defaultKeys to exclude from exported workflows

Default invalidKeys: ['stackHeaders', 'urlPath', 'created_at', 'updated_at', 'created_by', 'updated_by']

Labels Module
OptionTypeDefaultDescription
modules.labels.limitnumber100Labels fetched per API call
modules.labels.invalidKeysstring[]See defaultKeys to exclude from exported labels

Default invalidKeys: ['stackHeaders', 'urlPath', 'created_at', 'updated_at', 'created_by', 'updated_by']

Complete Export Configuration Example

{
  "versioning": false,
  "host": "https://api.contentstack.io/v3",
  "preserveStackVersion": false,
  "master_locale": {
    "name": "English - United States",
    "code": "en-us"
  },
  "source_stack": "bltXXXXXXXXXX",
  "data": "./export-data",
  "branchName": "main",
  "moduleName": null,
  "contentTypes": [],
  "securedAssets": false,
  "fetchConcurrency": 5,
  "writeConcurrency": 5,
  "delayMs": 1000,
  "maxContentLength": 100000000,
  "maxBodyLength": 100000000,
  "personalizationEnabled": false,
  "skipStackSettings": false,
  "skipDependencies": false,
  "developerHubBaseUrl": "",
  "marketplaceAppEncryptionKey": "nF2ejRQcTv",
  "modules": {
    "assets": {
      "batchLimit": 20,
      "chunkFileSize": 1,
      "downloadLimit": 5,
      "fetchConcurrency": 5,
      "includeVersionedAssets": false,
      "securedAssets": false,
      "displayExecutionTime": false,
      "enableDownloadStatus": false,
      "assetsMetaKeys": [],
      "host": "https://images.contentstack.io"
    },
    "entries": {
      "limit": 100,
      "batchLimit": 20,
      "exportVersions": false,
      "chunkFileSize": 10
    },
    "content-types": {
      "limit": 100,
      "validKeys": ["title", "uid", "field_rules", "schema", "options", "singleton", "description"]
    },
    "global-fields": {
      "validKeys": ["title", "uid", "schema", "options", "singleton", "description"]
    },
    "taxonomies": {
      "limit": 100
    },
    "personalize": {
      "baseURL": {
        "AWS-NA": "https://personalize-api.contentstack.com",
        "AWS-EU": "https://eu-personalize-api.contentstack.com",
        "AWS-AU": "https://au-personalize-api.contentstack.com",
        "AZURE-NA": "https://azure-na-personalize-api.contentstack.com",
        "AZURE-EU": "https://azure-eu-personalize-api.contentstack.com",
        "GCP-NA": "https://gcp-na-personalize-api.contentstack.com",
        "GCP-EU": "https://gcp-eu-personalize-api.contentstack.com"
      },
      "exportOrder": ["attributes", "audiences", "events", "experiences"]
    }
  }
}

Import Configuration

Command: csdx cm:stacks:import

Default Configuration: See the default import configuration file in the CLI repository.

Basic Settings

OptionTypeDefaultRequiredDescription
versioningbooleanfalseNoImport versioned entries
hoststring"https://api.contentstack.io/v3"NoBase URL for Content Management API
extensionHoststring"https://app.contentstack.com"NoBase URL for Contentstack application
contentVersionnumber-NoVersion of the import format
preserveStackVersionbooleanfalseNoPreserve stack version information
target_stackstring-Yes*API key of target stack
datastring-Yes*Path to import directory
contentDirstring-NoAlias for data

*Required unless using CLI flags or management token alias

Path & Directory Settings

OptionTypeDefaultRequiredDescription
cliLogsPathstring-NoCustom path for CLI logs
backupDirstring-NoPath to backup directory
createBackupDirstring-NoPath where backup directory should be created
branchNamestring"main"NoBranch name to import into
branchAliasstring-NoBranch alias to import into

Content Filtering

OptionTypeDefaultRequiredDescription
moduleNamestring-NoSpecific module to import
contentTypesstring[]-NoArray of content type UIDs
modulesstring[]-NoArray of module names to import

Performance Settings

OptionTypeDefaultRequiredDescription
concurrencynumber1NoGeneral concurrency level (used as fallback in some modules)
importConcurrencynumber5NoNumber of parallel import operations
fetchConcurrencynumber5NoNumber of parallel fetch operations
writeConcurrencynumber5NoNumber of parallel write operations
delayMsnumber-NoDelay in milliseconds between requests
maxContentLengthnumber100000000NoMax content length in bytes (100 MB)
maxBodyLengthnumber100000000NoMax body length in bytes (100 MB)

Publish Settings

OptionTypeDefaultRequiredDescription
skipAssetsPublishboolean-NoSkip asset publishing
skipEntriesPublishboolean-NoSkip entry publishing
entriesPublishbooleantrueNoPublish entries after import

Feature Flags

OptionTypeDefaultRequiredDescription
skipAuditboolean-NoSkip audit fix during import
skipExistingboolean-NoSkip "module exists" warnings
replaceExistingboolean-NoReplace existing modules
exclude-global-modulesbooleanfalseNoExclude branch-independent modules (global modules are shared across all branches in a stack; see Contentstack documentation)

Advanced Settings

OptionTypeDefaultRequiredDescription
importWebhookStatusstring"disable"NoWebhook state: "disable" or "current"
personalizeProjectNamestring-NoUnique name for Personalize project
developerHubBaseUrlstring-NoBase URL for Developer Hub API
marketplaceAppEncryptionKeystring"nF2ejRQcTv"NoEncryption key for Marketplace apps
getEncryptionKeyMaxRetrynumber3NoMax retry attempts for encryption key
auditConfigobject-NoConfiguration for audit process
master_localeobject-NoMaster locale configuration

Authentication

OptionTypeDefaultRequiredDescription
emailstring-NoEmail for basic authentication
passwordstring-NoPassword for basic authentication

Note Use the --alias flag to specify a management token alias instead of providing credentials directly in the configuration file.

Configuration Precedence Note

Important: When the same configuration key exists at both root level and module level, module-specific configuration takes precedence. For example, if you set importConcurrency: 5 at root and modules.entries.importConcurrency: 10, the entries module will use 10. See Configuration Precedence section for detailed explanation and examples.

Module-Specific Configuration

Assets Module
OptionTypeDefaultDescription
modules.assets.assetBatchLimitnumber1Assets processed per batch
modules.assets.uploadAssetsConcurrencynumber2Assets uploaded in parallel
modules.assets.importFoldersConcurrencynumber1Folders processed in parallel
modules.assets.importSameStructurebooleantrueMaintain folder structure
modules.assets.includeVersionedAssetsbooleanfalseInclude versioned assets
modules.assets.displayExecutionTimebooleanfalseDisplay execution time
modules.assets.hoststring"https://api.contentstack.io"API host for asset operations
modules.assets.validKeysstring[]See defaultValid keys to import for assets
modules.assets.folderValidKeysstring[]See defaultValid keys to import for folders

Default validKeys: ["title", "parent_uid", "description", "tags"]
Default folderValidKeys: ["name", "parent_uid"]

Note modules.assets.fetchConcurrency can override root-level fetchConcurrency if specified.

Entries Module
OptionTypeDefaultDescription
modules.entries.importConcurrencynumber5Parallel entry import operations (overrides root importConcurrency if set)
modules.entries.chunkFileSizenumber10Size in MB for chunking large entry mapper JSON files (defaults to FsUtility default of 10 if not specified)
modules.entries.invalidKeysstring[]See defaultKeys to exclude from entry mapper files

Default invalidKeys: ['created_at', 'updated_at', 'created_by', 'updated_by', '_metadata', 'published']

Precedence: modules.entries.importConcurrency takes precedence over root-level importConcurrency. If not set, falls back to root importConcurrency (default: 5).

CS Assets (cs-assets)
OptionTypeDefaultDescription
modules.cs-assets.apiConcurrencynumber5Parallel Asset Management (AM) API calls during import.
modules.cs-assets.uploadAssetsConcurrencynumber2Number of asset files uploaded in parallel during import.
modules.cs-assets.importFoldersConcurrencynumber1Number of folder creation operations run in parallel during import.

Note If CS Assets is not active, the CLI ignores these options. They apply only when the content directory contains a spaces/ directory exported using CS Assets mode. See CLI for CS Assets.

Content Types Module
OptionTypeDefaultDescription
modules.content-types.limitnumber100Content types processed per batch
modules.content-types.validKeysstring[]See defaultValid keys to import
modules.content-types.writeConcurrencynumber5Parallel content type operations (overrides root writeConcurrency if set)

Default validKeys: ["title", "uid", "schema", "options", "singleton", "description"]

Precedence: modules.content-types.writeConcurrency takes precedence over root-level writeConcurrency. If not set, falls back to root writeConcurrency (default: 5).

Global Fields Module
OptionTypeDefaultDescription
modules.global-fields.limitnumber100Global fields processed per batch
modules.global-fields.validKeysstring[]See defaultValid keys to import
modules.global-fields.writeConcurrencynumber5Parallel global field operations (overrides root writeConcurrency if set)

Default validKeys: ["title", "uid", "schema", "options", "singleton", "description"]

Precedence: modules.global-fields.writeConcurrency takes precedence over root-level writeConcurrency. If not set, falls back to root writeConcurrency (default: 5).

Locales Module
OptionTypeDefaultDescription
modules.locales.writeConcurrencynumber5Parallel locale operations (overrides root writeConcurrency if set)
modules.locales.requiredKeysstring[]See defaultRequired keys to import for locales

Default requiredKeys: ['code', 'uid', 'name', 'fallback_locale']

Precedence: modules.locales.writeConcurrency takes precedence over root-level writeConcurrency. If not set, falls back to root writeConcurrency (default: 5).

Environments Module
OptionTypeDefaultDescription
modules.environments.fetchConcurrencynumber2Parallel environment operations (overrides root fetchConcurrency if set)

Precedence: modules.environments.fetchConcurrency takes precedence over root-level fetchConcurrency. If not set, falls back to root fetchConcurrency (default: 5), but the module default is 2.

Extensions Module
OptionTypeDefaultDescription
modules.extensions.concurrencynumber1Parallel extension operations (falls back to fetchConcurrency if not set)
modules.extensions.validKeysstring[]See defaultValid keys to import for extensions

Default validKeys: ['data_type', 'srcdoc', 'title', 'type', 'mutiple', 'config']

Taxonomies Module
OptionTypeDefaultDescription
modules.taxonomies.dirNamestring"taxonomies"Directory name for taxonomies
modules.taxonomies.fileNamestring"taxonomies.json"File name for taxonomies data
Personalize Module
OptionTypeDefaultDescription
modules.personalize.baseURLobjectRegion-specificBase URLs for Personalize API by region
modules.personalize.importDatabooleantrueEnable/disable Personalize data import
modules.personalize.importOrderstring[]['attributes', 'audiences', 'events', 'experiences']Import order
modules.personalize.project_idstring""Personalize project ID (auto-populated)
modules.personalize.experiences.thresholdTimernumber60000Timer threshold in milliseconds
modules.personalize.experiences.checkIntervalDurationnumber10000Check interval duration in milliseconds

Base URLs: Same as Export configuration (see Export section above).

Variant Entry Module
OptionTypeDefaultDescription
modules.variantEntry.apiConcurrencynumber5Parallel API calls
modules.variantEntry.query.localestring"en-us"Locale for variant entry queries
General Module Settings
OptionTypeDefaultDescription
modules.apiConcurrencynumber5General API concurrency for modules

Complete Import Configuration Example

{
  "versioning": false,
  "host": "https://api.contentstack.io/v3",
  "extensionHost": "https://app.contentstack.com",
  "contentVersion": 2,
  "preserveStackVersion": false,
  "master_locale": {
    "name": "English - United States",
    "code": "en-us"
  },
  "target_stack": "bltXXXXXXXXXX",
  "data": "./import-data",
  "branchName": "main",
  "moduleName": null,
  "contentTypes": [],
  "skipAssetsPublish": false,
  "skipEntriesPublish": false,
  "entriesPublish": true,
  "concurrency": 1,
  "importConcurrency": 5,
  "fetchConcurrency": 5,
  "writeConcurrency": 5,
  "delayMs": 1000,
  "maxContentLength": 100000000,
  "maxBodyLength": 100000000,
  "skipAudit": false,
  "skipExisting": false,
  "replaceExisting": false,
  "importWebhookStatus": "disable",
  "personalizeProjectName": null,
  "exclude-global-modules": false,
  "backupDir": "./backup",
  "createBackupDir": "./temp",
  "cliLogsPath": "./logs",
  "developerHubBaseUrl": "",
  "marketplaceAppEncryptionKey": "nF2ejRQcTv",
  "getEncryptionKeyMaxRetry": 3,
  "auditConfig": {
    "noLog": false,
    "skipConfirm": true,
    "returnResponse": true,
    "noTerminalOutput": false,
    "config": {
      "basePath": ""
    }
  },
  "modules": {
    "apiConcurrency": 5,
    "assets": {
      "assetBatchLimit": 1,
      "uploadAssetsConcurrency": 2,
      "importFoldersConcurrency": 1,
      "importSameStructure": true,
      "includeVersionedAssets": false,
      "displayExecutionTime": false,
      "host": "https://api.contentstack.io",
      "validKeys": ["title", "parent_uid", "description", "tags"],
      "folderValidKeys": ["name", "parent_uid"]
    },
    "entries": {
      "importConcurrency": 5,
      "chunkFileSize": 10
    },
    "content-types": {
      "limit": 100,
      "validKeys": ["title", "uid", "schema", "options", "singleton", "description"]
    },
    "global-fields": {
      "limit": 100,
      "validKeys": ["title", "uid", "schema", "options", "singleton", "description"]
    },
    "taxonomies": {
      "dirName": "taxonomies",
      "fileName": "taxonomies.json"
    },
    "personalize": {
      "baseURL": {
        "AWS-NA": "https://personalize-api.contentstack.com",
        "AWS-EU": "https://eu-personalize-api.contentstack.com",
        "AWS-AU": "https://au-personalize-api.contentstack.com",
        "AZURE-NA": "https://azure-na-personalize-api.contentstack.com",
        "AZURE-EU": "https://azure-eu-personalize-api.contentstack.com",
        "GCP-NA": "https://gcp-na-personalize-api.contentstack.com",
        "GCP-EU": "https://gcp-eu-personalize-api.contentstack.com"
      },
      "importData": true,
      "importOrder": ["attributes", "audiences", "events", "experiences"],
      "project_id": "",
      "experiences": {
        "thresholdTimer": 60000,
        "checkIntervalDuration": 10000
      }
    },
    "variantEntry": {
      "apiConcurrency": 5,
      "query": {
        "locale": "en-us"
      }
    }
  },
}

Audit Configuration

Command: csdx cm:stacks:audit

Default Configuration: See the default audit configuration file in the CLI repository.

Basic Settings

OptionTypeDefaultRequiredDescription
showTerminalOutputbooleantrueNoDisplay output on terminal
skipRefsstring[]['sys_assets']NoReferences to skip during audit
skipFieldTypesstring[]['taxonomy', 'group']NoField types to skip
fixSelectFieldbooleanfalseNoFix select field issues

Module Configuration

OptionTypeDefaultRequiredDescription
modulesstring[]See defaultNoModules to audit

Default modules: ['content-types', 'global-fields', 'entries', 'extensions', 'workflows', 'custom-roles', 'assets', 'field-rules']

Field Configuration

OptionTypeDefaultRequiredDescription
fix-fieldsstring[]See defaultNoField types that can be fixed
schema-fields-data-typestring[]See defaultNoSchema field data types to check

Default fix-fields: ['reference', 'global_field', 'json:rte', 'json:extension', 'blocks', 'group', 'content_types']
Default schema-fields-data-type: ['blocks', 'group', 'global_field']

Entry System Keys

OptionTypeDefaultRequiredDescription
entries.systemKeysstring[]See defaultNoSystem keys in entries

Default systemKeys: ['uid', 'ACL', 'tags', 'locale', '_version', '_metadata', 'published', 'created_at', 'updated_at', 'created_by', 'updated_by', '_in_progress', '_restore_status', 'publish_details']

External Configuration (via --config flag)

When using the --config flag with audit commands, you can pass external configuration options:

OptionTypeDefaultDescription
noLogbooleanfalseSkip logs printing on terminal
skipConfirmbooleantrueSkip confirmation prompts
returnResponsebooleantrueReturn config used in command on completion
noTerminalOutputbooleanfalseSkip final audit table output on terminal
basePathstring""Overwrite built-in config base path (equivalent to --data-dir flag)

Example external config file:

{
  "noLog": false,
  "skipConfirm": true,
  "returnResponse": true,
  "noTerminalOutput": false,
  "basePath": "./export-data"
}

Query-Export Configuration

Command: csdx cm:stacks:export-query

Basic Settings

OptionTypeDefaultRequiredDescription
hoststring"https://api.contentstack.io/v3"NoBase URL for Content Management API
exportDirstring-Yes*Path to export directory
stackApiKeystring-Yes*API key of source stack
branchNamestring-NoBranch name to export from
branchAliasstring-NoBranch alias to export from

*Required unless using CLI flags or management token alias

Query Settings

OptionTypeDefaultRequiredDescription
queryobject|string-Yes*Query object or file path for filtering
skipReferencesbooleanfalseNoSkip referenced content types
skipDependenciesbooleanfalseNoSkip dependent modules
skipStackSettingsbooleanfalseNoSkip exporting stack settings
maxCTReferenceDepthnumber20NoMax depth for content type references

Performance Settings

OptionTypeDefaultRequiredDescription
fetchConcurrencynumber5NoNumber of parallel fetch operations
writeConcurrencynumber5NoNumber of parallel write operations
batchSizenumber100NoNumber of items per batch

Feature Flags

OptionTypeDefaultRequiredDescription
securedAssetsbooleanfalseNoExport secured assets
personalizationEnabledbooleanfalseNoEnable personalization features

Query Configuration

OptionTypeDefaultDescription
queryConfig.maxRecursionDepthnumber10Maximum depth for recursive query processing
queryConfig.batchSizenumber100Number of items per batch
queryConfig.metadataFileNamestring"_query-meta.json"Name of the metadata file
queryConfig.validation.maxQueryDepthnumber5Maximum depth of nested queries
queryConfig.validation.maxArraySizenumber1000Maximum size of arrays in queries
queryConfig.validation.allowedDateFormatsstring[]['ISO8601', 'YYYY-MM-DD', 'MM/DD/YYYY']Allowed date formats

Module Configuration

OptionTypeDefaultDescription
modules.generalstring[]['stack', 'locales', 'environments']Always exported modules
modules.queryablestring[]['content-types']Modules that can be queried
modules.dependentstring[]['global-fields', 'extensions', 'marketplace-apps', 'taxonomies', 'personalize']Dependent modules
modules.contentstring[]['entries', 'assets']Content modules
modules.exportOrderstring[]See defaultExport order based on dependencies

Default exportOrder: ['stack', 'locales', 'environments', 'content-types', 'global-fields', 'extensions', 'taxonomies', 'entries', 'assets']

Note The modules.dependent array includes marketplace-apps and personalize in addition to the listed modules.

Authentication

Note Use the --alias flag to specify a management token alias instead of providing credentials directly in the configuration file.

Complete Query-Export Configuration Example

{
  "host": "https://api.contentstack.io/v3",
  "exportDir": "./query-export-data",
  "stackApiKey": "bltXXXXXXXXXX",
  "branchName": "main",
  "query": {
    "title": {
      "$regex": "blog"
    }
  },
  "skipReferences": false,
  "skipDependencies": false,
  "skipStackSettings": false,
  "securedAssets": false,
  "fetchConcurrency": 5,
  "writeConcurrency": 5,
  "batchSize": 100,
  "personalizationEnabled": false,
  "maxCTReferenceDepth": 20,
  "queryConfig": {
    "maxRecursionDepth": 10,
    "batchSize": 100,
    "metadataFileName": "_query-meta.json",
    "validation": {
      "maxQueryDepth": 5,
      "maxArraySize": 1000,
      "allowedDateFormats": ["ISO8601", "YYYY-MM-DD", "MM/DD/YYYY"]
    }
  },
  "modules": {
    "general": ["stack", "locales", "environments"],
    "queryable": ["content-types"],
    "dependent": ["global-fields", "extensions", "marketplace-apps", "taxonomies", "personalize"],
    "content": ["entries", "assets"],
    "exportOrder": [
      "stack",
      "locales",
      "environments",
      "content-types",
      "global-fields",
      "extensions",
      "taxonomies",
      "entries",
      "assets"
    ]
  }
}

Import-Setup Configuration

Command: csdx cm:stacks:import-setup

Basic Settings

OptionTypeDefaultRequiredDescription
hoststring"https://api.contentstack.io/v3"NoBase URL for Content Management API
developerHubBaseUrlstring""NoBase URL for Developer Hub API
fetchConcurrencynumber5NoNumber of parallel fetch operations

Module Configuration

Each module can specify dependencies that must be imported first:

ModuleOptionTypeDefaultRequiredDescription
custom-rolesmodules.custom-roles.dependenciesstring[]['environments', 'entries']NoRequired dependencies
localesmodules.locales.dependenciesstring[][]NoRequired dependencies
environmentsmodules.environments.dependenciesstring[]-NoRequired dependencies
extensionsmodules.extensions.dependenciesstring[]-NoRequired dependencies
assetsmodules.assets.fetchConcurrencynumber5NoFetch concurrency for assets
content-typesmodules.content-types.dependenciesstring[]['extensions', 'marketplace-apps', 'taxonomies']NoRequired dependencies
entriesmodules.entries.dependenciesstring[]['assets', 'extensions', 'marketplace-apps', 'taxonomies']NoRequired dependencies
global-fieldsmodules.global-fields.dependenciesstring[]['extensions', 'marketplace-apps']NoRequired dependencies
marketplace-appsmodules.marketplace-apps.dependenciesstring[]-NoRequired dependencies
taxonomiesmodules.taxonomies.invalidKeysstring[]See defaultNoKeys to exclude during import

Default taxonomies invalidKeys: ['updated_at', 'created_by', 'updated_by', 'stackHeaders', 'urlPath', 'created_at', 'ancestors', 'update', 'delete', 'fetch', 'descendants', 'move', 'search']


Migration Configuration

Command: csdx cm:stacks:migration

Configuration Options

Migration uses either inline configuration or external JSON files.

Inline Configuration

Use --config flag with key-value pairs:

csdx cm:migration --config key1:value1 key2:value2 --file-path <migration/script/file/path>

External Configuration File

Use --config-file flag with JSON file:

{
  "apiKey": "your-api-key",
  "branch": "main",
  "customKey": "customValue"
}

Note Use the --alias flag to specify a management token alias instead of providing managementToken in the configuration file.

Note Migration configuration is script-specific and varies based on your migration requirements.


Quick Reference Guide

Common Configuration Patterns

Performance Tuning

{
  "fetchConcurrency": 10,
  "writeConcurrency": 10,
  "delayMs": 500
}

Export Specific Content Types

{
  "contentTypes": ["blog_post", "author"],
  "moduleName": "entries"
}

Import with Backup

{
  "backupDir": "./backup",
  "createBackupDir": "./temp-backup"
}

Best Practices

  1. Path Formatting:

    • Mac/Linux: Use forward slashes /
    • Windows: Use double backslashes \\\\ or forward slashes /
  2. Authentication:

    • Always use --alias flag instead of hardcoding tokens
    • Never commit configuration files with credentials
  3. Module Dependencies:

    • Import/export modules in correct order
    • CLI handles dependencies automatically for full imports/exports
  4. Performance:

    • Adjust concurrency based on API rate limits
    • Use delayMs to avoid rate limiting
    • Monitor maxContentLength and maxBodyLength for large operations
  5. Backup:

    • Always provide backupDir when importing modules individually
    • Maintain mapping files across multiple imports

Troubleshooting

Issue: Horizontal scrolling on tables
Solution: Use collapsible sections (details/summary tags) for module-specific configs

Issue: Configuration not being read
Solution:

  • Verify JSON syntax is valid
  • Check file path is correct
  • Ensure required fields are present

Issue: Rate limiting errors
Solution:

  • Reduce fetchConcurrency and writeConcurrency
  • Increase delayMs between requests