Console Commands

While most of your interaction with Craft happens in a browser, a number of important tools are available via command line interface (CLI) actions that are run in a terminal.

This can be useful for automating tasks with cron, running actions in a deployment process (opens new window), working with Craft via SSH, and running resource-intensive tasks that might otherwise be constrained by the limits of your web server.

The Craft console application (craft) lives in the root of your project and requires PHP to run.

The version of PHP that handles HTTP requests may not be the same as the one that is available directly in your terminal. Some development environments or hosting platforms have specific tools for running console commands—for example, DDEV has a special ddev craft … command that automatically attaches to the appropriate container before running a command. In this case, you would use ddev craft instead of php craft.

Running php craft without any arguments will output a complete list of available options.

$ php craft

This is Yii version 2.0.36.

The following commands are available:

- db                                    Performs database operations.
    db/backup                           Creates a new database backup.
    db/convert-charset                  Converts tables’ character sets and collations. (MySQL only)
    db/restore                          Restores a database backup.

- cache                                 Allows you to flush cache.
    cache/flush                         Flushes given cache components.
    cache/flush-all                     Flushes all caches registered in the system.
    cache/flush-schema                  Clears DB schema cache for a given connection
                                        component.
    cache/index (default)               Lists the caches that can be flushed.

...

To see the help of each command, enter:

  craft help <command-name>

You can also run php craft help <command-name> to learn more about a command and whatever parameters and options it may accept.

See the Console Commands page in the Extending Craft section to learn about adding your own console commands.

The complete list of available commands will include those from any plugins or custom modules you’ve added to your project. The list below represents just those that are present by default in all Craft installations.

# Global Options

All commands support the following options:

--color
Explicitly enable or disable ANSI coloring in output. When omitted, color will only be used in environments that support it.
--help
Displays help about the command, rather than running it. Alternative to php craft help controller/action.
--interactive
Enable or disable interactive prompts for the command. For use in unattended or automated workflows (like CRON or deployments), consider setting --interactive=0.
--isolated
Acquire a mutex lock (opens new window) before running the command to prevent simultaneous execution. Some commands (like migrate and project-config) have their own internal locking mechanism. A properly configured, centralized mutex driver is required in load-balanced environments—the default file-based driver (prior to Craft 4.6.0) can only prevent concurrent execution on a single machine.
--silent-exit-on-exception
Force a nominal exit code (0), even if an exception occurred. Useful when inconsequential failures would otherwise block chained commands in automated environments.

# cache

Allows you to flush caches.

# cache/flush

Flushes given cache components.

Example:

# flushes caches by ID: “first”, “second”, “third”
php craft cache/flush first second third

# cache/flush-all

Flushes all caches registered in the system.

# cache/flush-schema

Clears DB schema cache for a given connection component.

php craft cache/flush-schema
# identical to `php craft cache/flush-schema db`

Parameters

componentId
ID of the connection component. (Defaults to db.)

# cache

Lists the caches that can be flushed.

# clear-caches

Allows you to clear various Craft caches.

# clear-caches/all

Clear all caches.

# clear-caches/asset

Clears Asset caches.

# clear-caches/asset-indexing-data

Clears Asset indexing data.

# clear-caches/compiled-classes

Clears compiled classes.

# clear-caches/compiled-templates

Clears compiled templates.

# clear-caches/cp-resources

Clears control panel resources.

# clear-caches/data

Clears data caches.

# clear-caches

Lists the caches that can be cleared.

# clear-caches/temp-files

Clears temporary files.

# clear-caches/transform-indexes

Clears the Asset transform index.

# clear-deprecations

# clear-deprecations

Clears all deprecation warnings.

# db

Performs database operations.

# db/backup

Creates a new database backup.

Example:

php craft db/backup ./my-backups/

Parameters

path

The path the database backup should be created at. Can be any of the following:

  • A full file path
  • A folder path (backup will be saved in there with a dynamically-generated name)
  • A filename (backup will be saved in the working directory with the given name)
  • Blank (backup will be saved to the storage/backups/ folder with a dynamically-generated name)

Options

--zip
Whether the backup should be saved as a zip file.
--overwrite
Whether to overwrite an existing backup file, if a specific file path is given.

# db/convert-charset

Converts tables’ character sets and collations. (MySQL only)

Example:

php craft db/convert-charset utf8 utf8_unicode_ci

Parameters

charset
The target character set, which honors DbConfig::$charset or defaults to utf8.
collation
The target collation, which honors DbConfig::$collation or defaults to utf8_unicode_ci.

# db/drop-all-tables

Drops all tables in the database.

Example:

php craft db/drop-all-tables

# db/drop-table-prefix

Drops the database table prefix from all tables.

Parameters

prefix
The current table prefix. If omitted, the prefix will be detected automatically.

# db/restore

Restores a database backup.

Example:

php craft db/restore ./my-backup.sql

Parameters

path
The path to the database backup file.

Options

--drop-all-tables
Whether to drop all preexisting tables in the database prior to restoring the backup.

# elements

Manages elements.

# elements/delete

Deletes an element by its ID.

Parameters

id
The element ID to delete.

Options

--hard
Whether the element should be hard-deleted.

# elements/restore

Restores an element by its ID.

Parameters

id
The element ID to restore.

# entrify

Converts categories, tags, and global sets to entries.

# entrify/categories

Converts categories to entries.

Parameters

categoryGroup
The category group handle

Options

--section
The section handle that entries should be saved in
--entry-type
The entry type handle that entries should have
--author
The author username or email that entries should have

# entrify/global-set

Converts a global set to a Single section.

Parameters

globalSet
The global set handle

Options

--section
The section handle that entries should be saved in

# entrify/tags

Converts tags to entries.

Parameters

tagGroup
The tag group handle

Options

--section
The section handle that entries should be saved in
--entry-type
The entry type handle that entries should have
--author
The author username or email that entries should have

# env

Sets or removes environment variables in the .env file.

# env/remove

Removes an environment variable from the .env file.

php craft env/remove CRAFT_DEV_MODE

Parameters

name :

# env/set

Sets an environment variable in the .env file.

php craft env/set CRAFT_DEV_MODE true

Parameters

name :

value :

# env/show

Displays the value of an environment variable, or sets its value if $name contains =.

php craft env CRAFT_DEV_MODE
php craft env CRAFT_DEV_MODE=true

Parameters

name :

# exec

# exec/exec

Executes a PHP statement and outputs the result.

Parameters

command :

# fixture

Allows you to manage test fixtures.

# fixture/load

Loads the specified fixture data.

Example:

# load User fixture data (any existing fixture data will be removed first)
php craft fixture/load "User"

# load all available fixtures found under 'tests\unit\fixtures'
php craft fixture/load "*"

# load all fixtures except User
php craft fixture/load "*, -User"

Parameters

fixturesInput
Array of fixtures to load.

Options

--global-fixtures, -g
Array of global fixtures that should be applied when loading and unloading. Set to InitDbFixture by default, which disables and enables integrity check so your data can be safely loaded.
--namespace, -n
Namespace to search for fixtures. Defaults to tests\unit\fixtures.

# fixture/unload

Unloads the specified fixtures.

Example:

# unload User fixture data
php craft fixture/load "User"

# unload all fixtures found under 'tests\unit\fixtures'
php craft fixture/load "*"

# unload all fixtures except User
php craft fixture/load "*, -User"

Parameters

fixturesInput
Array of fixtures to unload.

Options

--global-fixtures, -g
Array of global fixtures that should be applied when loading and unloading. Set to InitDbFixture by default, which disables and enables integrity check so your data can be safely loaded.
--namespace, -n
Namespace to search for fixtures. Defaults to tests\unit\fixtures.

# gc

# gc/run

Runs garbage collection.

Options

--delete-all-trashed
Whether all soft-deleted items should be deleted, rather than just the ones that were deleted long enough ago to be ready for hard-deletion per the softDeleteDuration config setting.

# graphql

Allows you to manage GraphQL schemas.

# graphql/create-token

Creates a new authorization token for a schema.

Parameters

schemaUid
The schema UUID

Options

--name
The schema name
--expiry
Expiry date

# graphql/dump-schema

Dumps a given GraphQL schema to a file.

Options

--schema
The GraphQL schema UUID.
--token
The token to look up to determine the appropriate GraphQL schema.
--full-schema
Whether full schema should be printed or dumped.

# graphql/list-schemas

Lists all GraphQL schemas.

# graphql/print-schema

Prints a given GraphQL schema.

Options

--schema
The GraphQL schema UUID.
--token
The token to look up to determine the appropriate GraphQL schema.
--full-schema
Whether full schema should be printed or dumped.

# help

Provides help information about console commands.

# help

Displays available commands or the detailed information about a particular command.

Example:

$ php craft help db/backup

DESCRIPTION

Creates a new database backup.

Example:
php craft db/backup ./my-backups/


USAGE

craft db/backup [path] [...options...]

- path: string
  The path the database backup should be created at.
  Can be any of the following:

  - A full file path
  - A folder path (backup will be saved in there with a dynamically-generated name)
  - A filename (backup will be saved in the working directory with the given name)
  - Blank (backup will be saved to the `storage/backups/` folder with a dynamically-generated name)


OPTIONS

--appconfig: string
  custom application configuration file path.
  If not set, default application configuration is used.

--color: boolean, 0 or 1
  whether to enable ANSI color in the output.
  If not set, ANSI color will only be enabled for terminals that support it.

--help, -h: boolean, 0 or 1 (defaults to 0)
  whether to display help information about current command.

--interactive: boolean, 0 or 1 (defaults to 1)
  whether to run the command interactively.

--overwrite: boolean, 0 or 1 (defaults to 0)
  Whether to overwrite an existing backup file, if a specific file path is given.

--silent-exit-on-exception: boolean, 0 or 1
  if true - script finish with `ExitCode::OK` in case of exception.
  false - `ExitCode::UNSPECIFIED_ERROR`.
  Default: `YII_ENV_TEST`

--zip: boolean, 0 or 1 (defaults to 0)
  Whether the backup should be saved as a zip file.

$

Parameters

command
The name of the command to show help about. If not provided, all available commands will be displayed.

Options

--as-json, -j
Should the commands help be returned in JSON format?

# help/list

Lists all available controllers and actions in machine-readable format.

# help/list-action-options

List all available options for action in machine-readable format.

Parameters

action
Route to action.

# help/usage

Displays usage information for action.

Parameters

action
Route to action.

# index-assets

Allows you to re-index assets in volumes.

# index-assets/all

Re-indexes assets across all volumes.

Options

--cache-remote-images
Whether remote-stored images should be locally cached in the process.
--create-missing-assets
Whether to auto-create new asset records when missing.
--delete-missing-assets
Whether to delete all the asset records that have their files missing.
--delete-empty-folders
Whether empty folders should be deleted.

# index-assets/cleanup

Removes all CLI indexing sessions.

# index-assets/one

Re-indexes assets from the given volume handle.

Parameters

handle
The handle of the volume to index. You can optionally provide a volume sub-path, e.g. php craft index-assets/one volume-handle/path/to/folder.
startAt
Index of the asset to start with, which defaults to 0.

Options

--cache-remote-images
Whether remote-stored images should be locally cached in the process.
--create-missing-assets
Whether to auto-create new asset records when missing.
--delete-missing-assets
Whether to delete all the asset records that have their files missing.
--delete-empty-folders
Whether empty folders should be deleted.

# install

Craft CMS CLI installer.

# install/check

Checks whether Craft is already installed.

# install/craft

Runs the install migration.

Options

--email
The default email address for the first user to create during install.
--username
The default username for the first user to create during install.
--password
The default password for the first user to create during install.
--site-name
The default site name for the first site to create during install.
--site-url
The default site URL for the first site to create during install.
--language
The default language for the first site to create during install.

# invalidate-tags

Allows you to invalidate cache tags.

# invalidate-tags/all

Invalidates all cache tags.

# invalidate-tags/graphql

Invalidates all GraphQL query cache tags.

# invalidate-tags

Lists the cache tags that can be invalidated.

# invalidate-tags/template

Invalidates all template cache tags.

# mailer

# mailer/test

Tests sending an email with the current mailer settings.

Options

--to
Email address that should receive the test message.

# migrate

Manages Craft and plugin migrations.

# migrate/all

Runs all pending Craft, plugin, and content migrations.

Options

--no-content
Exclude pending content migrations.
--no-backup
Skip backing up the database.

# migrate/create

Creates a new migration.

This command creates a new migration using the available migration template. After using this command, developers should modify the created migration skeleton by filling up the actual migration logic.

craft migrate/create create_news_section

By default, the migration is created in the project’s migrations/ folder (as a “content migration”).
Use --plugin=<plugin-handle> to create a new plugin migration.
Use --type=app to create a new Craft CMS app migration.

Parameters

name
the name of the new migration. This should only contain letters, digits, and underscores.

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

--template-file

The template file for generating new migrations. This can be either a path alias (e.g. @app/migrations/template.php) or a file path. Defaults to vendor/craftcms/cms/src/updates/migration.php.template.

# migrate/down

Downgrades Craft by reverting old migrations.

Example:

php craft migrate/down      # revert last migration
php craft migrate/down 3    # revert last three migrations
php craft migrate/down all  # revert all migrations

Parameters

limit
The number of migrations to be reverted. Defaults to 1, meaning the last applied migration will be reverted. When value is all, all migrations will be reverted.

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

# migrate/history

Shows the list of migrations that have been applied so far.

Example:

php craft migrate/history      # displays the last ten migrations
php craft migrate/history 5    # displays the last five migrations
php craft migrate/history all  # displays the entire migration history

Parameters

limit
The maximum number of migrations to be displayed. (Defaults to 10.)
If all, the whole migration history will be displayed.

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

# migrate/mark

Modifies the migration history to the specified version.

No actual migration will be performed.

php craft migrate/mark 101129_185401                          # using timestamp
php craft migrate/mark m101129_185401_create_user_table       # using name
php craft migrate/mark app\migrations\M101129185401CreateUser # using namespace name
php craft migrate/mark m000000_000000_base                    # reset entire history

Parameters

version

The version at which the migration history should be marked, which can be either the timestamp or the full name of the migration.

Specify m000000_000000_base to set the migration history to a state where no migration has been applied.

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

# migrate/new

Shows any new migrations that have not been applied.

Example:

php craft migrate/new     # displays the first 10 new migrations
php craft migrate/new 5   # displays the first 5 new migrations
php craft migrate/new all # displays all new migrations

Parameters

limit
The maximum number of new migrations to be displayed. (Defaults to 10.)
If all, then every available new migration will be displayed.

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

# migrate/redo

Reapplies previous migrations by first reverting them and then applying them again.

Example:

php craft migrate/redo     # redo the last applied migration
php craft migrate/redo 3   # redo the last three applied migrations
php craft migrate/redo all # redo all migrations

Parameters

limit
The number of migrations to be redone. Defaults to 1, meaning the last applied migration will be redone. When all, every migration will be redone.

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

# migrate/to

Upgrades or downgrades until the specified version.

You can downgrade versions to a past apply time by providing a UNIX timestamp or a strtotime() (opens new window)-parseable value. All versions applied after that specified time will then be reverted.

Example:

php craft migrate/to 101129_185401                          # migration timestamp
php craft migrate/to m101129_185401_create_user_table       # full name
php craft migrate/to 1392853618                             # UNIX timestamp
php craft migrate/to "2022-02-02 02:02:02"                  # strtotime()-parseable
php craft migrate/to app\migrations\M101129185401CreateUser # full namespace name

Parameters

version
Either the version name or a past time value to be migrated to. This can be a timestamp, the full name of the migration, a UNIX timestamp, or a string value that can be parsed by strotime() (opens new window).

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

# migrate/up

Upgrades Craft by applying new migrations.

Example:

php craft migrate     # apply all new migrations
php craft migrate 3   # apply the first 3 new migrations

Parameters

limit
The number of new migrations to be applied. If 0, every new migration will be applied.

Options

--track

The migration track to work with (e.g. craft, content, plugin:commerce, etc.)

Defaults to content, or automatically set to the plugin’s track when --plugin is passed.

--plugin, -p

The handle of the plugin to use during migration operations, or the plugin itself.

# off

# off

Disables system.live project config value—bypassing any allowAdminChanges config setting restrictions—meant for temporary use during the deployment process.

Options

--retry

Number of seconds the Retry-After HTTP header should be set to for 503 responses.

The “Retry Duration” general setting can be used to configure a system-wide Retry-After header.

The isSystemLive config setting takes precedence over the system.live project config value, so if config/general.php sets isSystemLive to true or false these on/off commands error out.

Example

Running the following takes the system offline and returns 503 responses until it’s switched on again:

$ php craft off --retry=60
The system is now offline.
The retry duration is now set to 60.

# on

# on

Turns the system on.

Example:

$ php craft on
The system is now online.

# pc

Alias of project-config.

# pc/apply

Applies project config file changes.

Options

--force
Whether every entry change should be force-applied.
--quiet
Whether to reduce the command output.

# pc/diff

Outputs a diff of the pending project config YAML changes.

Options

--invert
Whether to treat the loaded project config as the source of truth, instead of the YAML files.

# pc/export

Exports the entire project config to a single file.

Parameters

path

The path the project config should be exported to. Can be any of the following:

  • A full file path
  • A folder path (export will be saved in there with a dynamically-generated name)
  • A filename (export will be saved in the working directory with the given name)
  • Blank (export will be saved in the working directly with a dynamically-generated name)

Options

--external
Whether to pull values from the project config YAML files instead of the loaded config.
--overwrite
Whether to overwrite an existing export file, if a specific file path is given.

# pc/get

Outputs a project config value.

Example:

php craft project-config/get system.edition

The “path” syntax used here may be composed of directory and filenames (within your config/project folder), YAML object keys (including UUIDs for many Craft resources), and integers (referencing numerically-indexed arrays), joined by a dot (.): path.to.nested.array.0.property.

Parameters

path
The config item path

Options

--external
Whether to pull values from the project config YAML files instead of the loaded config.

# pc/rebuild

Rebuilds the project config.

# pc/remove

Removes a project config value.

Example:

php craft project-config/remove some.nested.key

This should only be used when the equivalent change is not possible through the control panel or other Craft APIs. By directly modifying project config values, you are bypassing all validation and can easily destabilize configuration.

As with set, removing values only updates the root dateModified key when using the --update-timestamp flag. If you do not include this flag, you must run project-config/touch before changes will be detected or applied in other environments!

Parameters

path
The config item path

# pc/set

Sets a project config value.

Example:

php craft project-config/set some.nested.key

See get for the accepted key formats.

This should only be used when the equivalent change is not possible through the control panel or other Craft APIs. By directly modifying project config values, you are bypassing all validation and can easily destabilize configuration.

Values are updated in the database and in your local YAML files, but the root dateModified project config property is only touched when using the --update-timestamp flag. If you do not update the timestamp along with the value, the change may not be detected or applied in other environments!

Parameters

path
The config item path
value
The config item value as a valid YAML string

Options

--force
Whether every entry change should be force-applied.
--message
A message describing the changes.
--update-timestamp
Whether the dateModified value should be updated

# pc/touch

Updates the dateModified value in config/project/project.yaml, attempting to resolve a Git conflict for it.

# pc/write

Writes out the currently-loaded project config as YAML files to the config/project/ folder, discarding any pending YAML changes.

# plugin

Manages plugins.

# plugin/disable

Disables a plugin.

$ php craft plugin/disable

The following plugins are enabled:

    Handle         Name            Version
    -------------  --------------  -------
    apple-news     Apple News      3.0.0
    ckeditor       CKEditor        2.0.0
    commerce       Craft Commerce  4.0.0
    gatsby-helper  Gatsby Helper   2.0.0

Choose a plugin handle to disable: ckeditor
*** disabling ckeditor
*** disabled ckeditor successfully (time: 0.003s)

Parameters

handle
The plugin handle (omitted if --all provided).

Options

--all
Whether the action should be run for all Composer-installed plugins.

# plugin/enable

Enables a plugin.

$ php craft plugin/enable

The following plugins are disabled:

    Handle      Name        Version
    ----------  ----------  -------
    apple-news  Apple News  3.0.0
    ckeditor    CKEditor    2.0.0

Choose a plugin handle to enable: ckeditor
*** enabling ckeditor
*** enabled ckeditor successfully (time: 0.004s)

Parameters

handle
The plugin handle (omitted if --all provided).

Options

--all
Whether the action should be run for all Composer-installed plugins.

# plugin/install

Installs a plugin.

$ php craft plugin/install

The following uninstalled plugins are present:

    Handle         Name            Version
    -------------  --------------  -------
    anchors        Anchors         3.0.0
    apple-news     Apple News      3.0.0
    ckeditor       CKEditor        2.0.0
    commerce       Craft Commerce  4.0.0
    gatsby-helper  Gatsby Helper   2.0.0

Choose a plugin handle to install: ckeditor
*** installing ckeditor
*** installed ckeditor successfully (time: 0.496s)

Parameters

handle
The plugin handle (omitted if --all provided).

Options

--all
Whether the action should be run for all Composer-installed plugins.

# plugin/list

Lists all plugins.

$ php craft plugin/list

    Name            Handle         Package Name            Version  Installed  Enabled
    --------------  -------------  ----------------------  -------  ---------  -------
    Anchors         anchors        craftcms/anchors        3.0.0    Yes        Yes
    Apple News      apple-news     craftcms/apple-news     3.0.0    Yes        Yes
    CKEditor        ckeditor       craftcms/ckeditor       2.0.0    Yes        Yes
    Craft Commerce  commerce       craftcms/commerce       4.0.0    Yes        Yes
    Gatsby Helper   gatsby-helper  craftcms/gatsby-helper  2.0.0    Yes        Yes

# plugin/uninstall

Uninstalls a plugin.

$ php craft plugin/uninstall

The following plugins plugins are installed and enabled:

    Handle         Name            Version
    -------------  --------------  -------
    anchors        Anchors         3.0.0
    apple-news     Apple News      3.0.0
    ckeditor       CKEditor        2.0.0
    commerce       Craft Commerce  4.0.0
    gatsby-helper  Gatsby Helper   2.0.0

Choose a plugin handle to uninstall: ckeditor
*** uninstalling ckeditor
*** uninstalled ckeditor successfully (time: 0.496s)

Parameters

handle
The plugin handle (omitted if --all provided).

Options

--force
Whether the plugin uninstallation should be forced.
--all
Whether the action should be run for all Composer-installed plugins.

# project-config

Manages the Project Config.

# project-config/apply

Applies project config file changes.

Options

--force
Whether every entry change should be force-applied.
--quiet
Whether to reduce the command output.

# project-config/diff

Outputs a diff of the pending project config YAML changes.

Options

--invert
Whether to treat the loaded project config as the source of truth, instead of the YAML files.

# project-config/export

Exports the entire project config to a single file.

Parameters

path

The path the project config should be exported to. Can be any of the following:

  • A full file path
  • A folder path (export will be saved in there with a dynamically-generated name)
  • A filename (export will be saved in the working directory with the given name)
  • Blank (export will be saved in the working directly with a dynamically-generated name)

Options

--external
Whether to pull values from the project config YAML files instead of the loaded config.
--overwrite
Whether to overwrite an existing export file, if a specific file path is given.

# project-config/get

Outputs a project config value.

Example:

php craft project-config/get system.edition

The “path” syntax used here may be composed of directory and filenames (within your config/project folder), YAML object keys (including UUIDs for many Craft resources), and integers (referencing numerically-indexed arrays), joined by a dot (.): path.to.nested.array.0.property.

Parameters

path
The config item path

Options

--external
Whether to pull values from the project config YAML files instead of the loaded config.

# project-config/rebuild

Rebuilds the project config.

# project-config/remove

Removes a project config value.

Example:

php craft project-config/remove some.nested.key

This should only be used when the equivalent change is not possible through the control panel or other Craft APIs. By directly modifying project config values, you are bypassing all validation and can easily destabilize configuration.

As with set, removing values only updates the root dateModified key when using the --update-timestamp flag. If you do not include this flag, you must run project-config/touch before changes will be detected or applied in other environments!

Parameters

path
The config item path

# project-config/set

Sets a project config value.

Example:

php craft project-config/set some.nested.key

See get for the accepted key formats.

This should only be used when the equivalent change is not possible through the control panel or other Craft APIs. By directly modifying project config values, you are bypassing all validation and can easily destabilize configuration.

Values are updated in the database and in your local YAML files, but the root dateModified project config property is only touched when using the --update-timestamp flag. If you do not update the timestamp along with the value, the change may not be detected or applied in other environments!

Parameters

path
The config item path
value
The config item value as a valid YAML string

Options

--force
Whether every entry change should be force-applied.
--message
A message describing the changes.
--update-timestamp
Whether the dateModified value should be updated

# project-config/touch

Updates the dateModified value in config/project/project.yaml, attempting to resolve a Git conflict for it.

# project-config/write

Writes out the currently-loaded project config as YAML files to the config/project/ folder, discarding any pending YAML changes.

# queue

Manages the queue.

# queue/exec

Executes a job. The command is internal, and used to isolate a job execution. Manual usage is not provided.

Parameters

id
of a message
ttr
time to reserve
attempt
number
pid
of a worker

Options

--verbose, -v
verbose mode of a job execute. If enabled, execute result of each job will be printed.

# queue/info

Info about queue status.

# queue/listen

Listens for new jobs added to the queue and runs them.

Parameters

timeout
The number of seconds to wait between cycles.

Options

--verbose, -v
verbose mode of a job execute. If enabled, execute result of each job will be printed.
--isolate
isolate mode. It executes a job in a child process.
--php-binary
path to php interpreter that uses to run child processes. If it is undefined, PHP_BINARY will be used.

# queue/release

Releases job(s) from the queue.

Example:

php craft queue/release all

Parameters

job
The job ID to release. Pass all to release all jobs.

# queue/retry

Re-adds failed job(s) to the queue.

Parameters

job
The job ID that should be retried, or all to retry all failed jobs.

# queue/run

Runs all jobs in the queue.

Options

--job-id
The job ID to run
--verbose, -v
verbose mode of a job execute. If enabled, execute result of each job will be printed.
--isolate
isolate mode. It executes a job in a child process.
--php-binary
path to php interpreter that uses to run child processes. If it is undefined, PHP_BINARY will be used.

# resave

Allows you to bulk-save elements.

# resave/addresses

Re-saves user addresses.

Options

--queue

Whether the elements should be resaved via a queue job.

--element-id

The ID(s) of the elements to resave.

--uid

The UUID(s) of the elements to resave.

--site

The site handle to fetch elements from.

--status

The status(es) of elements to resave. Can be set to multiple comma-separated statuses.

--offset

The number of elements to skip.

--limit

The number of elements to resave.

--update-search-index

Whether to update the search indexes for the resaved elements.

--touch

Whether to update the dateUpdated timestamp for the elements.

--owner-id

Comma-separated list of owner element IDs.

--country-code

Comma-separated list of country codes.

--set

An attribute name that should be set for each of the elements. The value will be determined by --to.

--to

The value that should be set on the --set attribute.

The following value types are supported:

  • An attribute name: --to myCustomField
  • An object template: --to "={myCustomField|lower}"
  • A raw value: --to "=foo bar"
  • A PHP arrow function: --to "fn(\$element) => \$element->callSomething()"
  • An empty value: --to :empty:
--if-empty

Whether the --set attribute should only be set if it doesn’t have a value.

--if-invalid

Whether the --set attribute should only be set if the current value doesn’t validate.

# resave/assets

Re-saves assets.

Options

--queue

Whether the elements should be resaved via a queue job.

--element-id

The ID(s) of the elements to resave.

--uid

The UUID(s) of the elements to resave.

--site

The site handle to fetch elements from.

--status

The status(es) of elements to resave. Can be set to multiple comma-separated statuses.

--offset

The number of elements to skip.

--limit

The number of elements to resave.

--update-search-index

Whether to update the search indexes for the resaved elements.

--touch

Whether to update the dateUpdated timestamp for the elements.

--volume

The volume handle(s) to save assets from. Can be set to multiple comma-separated volumes.

--set

An attribute name that should be set for each of the elements. The value will be determined by --to.

--to

The value that should be set on the --set attribute.

The following value types are supported:

  • An attribute name: --to myCustomField
  • An object template: --to "={myCustomField|lower}"
  • A raw value: --to "=foo bar"
  • A PHP arrow function: --to "fn(\$element) => \$element->callSomething()"
  • An empty value: --to :empty:
--if-empty

Whether the --set attribute should only be set if it doesn’t have a value.

--if-invalid

Whether the --set attribute should only be set if the current value doesn’t validate.

# resave/categories

Re-saves categories.

Options

--queue

Whether the elements should be resaved via a queue job.

--element-id

The ID(s) of the elements to resave.

--uid

The UUID(s) of the elements to resave.

--site

The site handle to fetch elements from.

--status

The status(es) of elements to resave. Can be set to multiple comma-separated statuses.

--offset

The number of elements to skip.

--limit

The number of elements to resave.

--update-search-index

Whether to update the search indexes for the resaved elements.

--touch

Whether to update the dateUpdated timestamp for the elements.

--group

The group handle(s) to save categories/tags/users from. Can be set to multiple comma-separated groups.

--set

An attribute name that should be set for each of the elements. The value will be determined by --to.

--to

The value that should be set on the --set attribute.

The following value types are supported:

  • An attribute name: --to myCustomField
  • An object template: --to "={myCustomField|lower}"
  • A raw value: --to "=foo bar"
  • A PHP arrow function: --to "fn(\$element) => \$element->callSomething()"
  • An empty value: --to :empty:
--if-empty

Whether the --set attribute should only be set if it doesn’t have a value.

--if-invalid

Whether the --set attribute should only be set if the current value doesn’t validate.

# resave/entries

Re-saves entries.

Options

--queue

Whether the elements should be resaved via a queue job.

--drafts

Whether to resave element drafts.

--provisional-drafts

Whether to resave provisional element drafts.

--revisions

Whether to resave element revisions.

--element-id

The ID(s) of the elements to resave.

--uid

The UUID(s) of the elements to resave.

--site

The site handle to fetch elements from.

--propagate-to

Comma-separated site handles to propagate entries to.

When this is set, the entry will only be saved for this site.

--status

The status(es) of elements to resave. Can be set to multiple comma-separated statuses.

--offset

The number of elements to skip.

--limit

The number of elements to resave.

--update-search-index

Whether to update the search indexes for the resaved elements.

--touch

Whether to update the dateUpdated timestamp for the elements.

--section

The section handle(s) to save entries from. Can be set to multiple comma-separated sections.

--type

The type handle(s) of the elements to resave.

--set

An attribute name that should be set for each of the elements. The value will be determined by --to.

--set-enabled-for-site

The site-enabled status that should be set on the entry, for the site it’s initially being saved/propagated to.

--to

The value that should be set on the --set attribute.

The following value types are supported:

  • An attribute name: --to myCustomField
  • An object template: --to "={myCustomField|lower}"
  • A raw value: --to "=foo bar"
  • A PHP arrow function: --to "fn(\$element) => \$element->callSomething()"
  • An empty value: --to :empty:
--if-empty

Whether the --set attribute should only be set if it doesn’t have a value.

--if-invalid

Whether the --set attribute should only be set if the current value doesn’t validate.

# resave/matrix-blocks

Re-saves Matrix blocks.

You must supply the --field or --element-id argument for this to work properly.

Options

--queue

Whether the elements should be resaved via a queue job.

--element-id

The ID(s) of the elements to resave.

--uid

The UUID(s) of the elements to resave.

--site

The site handle to fetch elements from.

--status

The status(es) of elements to resave. Can be set to multiple comma-separated statuses.

--offset

The number of elements to skip.

--limit

The number of elements to resave.

--update-search-index

Whether to update the search indexes for the resaved elements.

--touch

Whether to update the dateUpdated timestamp for the elements.

--type

The type handle(s) of the elements to resave.

--field

The field handle to save Matrix blocks for.

--owner-id

Comma-separated list of owner element IDs.

--set

An attribute name that should be set for each of the elements. The value will be determined by --to.

--to

The value that should be set on the --set attribute.

The following value types are supported:

  • An attribute name: --to myCustomField
  • An object template: --to "={myCustomField|lower}"
  • A raw value: --to "=foo bar"
  • A PHP arrow function: --to "fn(\$element) => \$element->callSomething()"
  • An empty value: --to :empty:
--if-empty

Whether the --set attribute should only be set if it doesn’t have a value.

--if-invalid

Whether the --set attribute should only be set if the current value doesn’t validate.

# resave/tags

Re-saves tags.

Options

--queue

Whether the elements should be resaved via a queue job.

--element-id

The ID(s) of the elements to resave.

--uid

The UUID(s) of the elements to resave.

--site

The site handle to fetch elements from.

--status

The status(es) of elements to resave. Can be set to multiple comma-separated statuses.

--offset

The number of elements to skip.

--limit

The number of elements to resave.

--update-search-index

Whether to update the search indexes for the resaved elements.

--touch

Whether to update the dateUpdated timestamp for the elements.

--group

The group handle(s) to save categories/tags/users from. Can be set to multiple comma-separated groups.

--set

An attribute name that should be set for each of the elements. The value will be determined by --to.

--to

The value that should be set on the --set attribute.

The following value types are supported:

  • An attribute name: --to myCustomField
  • An object template: --to "={myCustomField|lower}"
  • A raw value: --to "=foo bar"
  • A PHP arrow function: --to "fn(\$element) => \$element->callSomething()"
  • An empty value: --to :empty:
--if-empty

Whether the --set attribute should only be set if it doesn’t have a value.

--if-invalid

Whether the --set attribute should only be set if the current value doesn’t validate.

# resave/users

Re-saves users.

Options

--queue

Whether the elements should be resaved via a queue job.

--element-id

The ID(s) of the elements to resave.

--uid

The UUID(s) of the elements to resave.

--site

The site handle to fetch elements from.

--status

The status(es) of elements to resave. Can be set to multiple comma-separated statuses.

--offset

The number of elements to skip.

--limit

The number of elements to resave.

--update-search-index

Whether to update the search indexes for the resaved elements.

--touch

Whether to update the dateUpdated timestamp for the elements.

--group

The group handle(s) to save categories/tags/users from. Can be set to multiple comma-separated groups.

--set

An attribute name that should be set for each of the elements. The value will be determined by --to.

--to

The value that should be set on the --set attribute.

The following value types are supported:

  • An attribute name: --to myCustomField
  • An object template: --to "={myCustomField|lower}"
  • A raw value: --to "=foo bar"
  • A PHP arrow function: --to "fn(\$element) => \$element->callSomething()"
  • An empty value: --to :empty:
--if-empty

Whether the --set attribute should only be set if it doesn’t have a value.

--if-invalid

Whether the --set attribute should only be set if the current value doesn’t validate.

# sections

Manages sections.

# sections/create

Creates a section.

Options

--name
The section name.
--handle
The section handle.
--type
The section type (single, channel, or structure).
--no-versioning
Whether to disable versioning for the section.
--uri-format
The entry URI format to set for each site.
--template
The template to load when an entry’s URL is requested.
--from-category-group
The category group handle to model the section from.
--from-tag-group
The tag group handle to model the section from.
--from-global-set
The global set handle to model the section from.

# sections/delete

Deletes a section.

Parameters

handle
The section handle

# serve

# serve

Runs PHP built-in web server.

Parameters

address
address to serve on. Either "host" or "host:port".

Options

--docroot, -t
path or path alias (opens new window) of the directory to serve.

--router, -r :

--port, -p
port to serve on.

# setup

Craft CMS setup installer.

# setup/app-id

Generates a new application ID and saves it in the .env file.

# setup/cloud

Prepares the Craft install to be deployed to Craft Cloud.

# setup/db

Alias for setup/db-creds.

Options

--driver
The database driver to use. Either 'mysql' for MySQL or 'pgsql' for PostgreSQL.
--server
The database server name or IP address. Usually 'localhost' or '127.0.0.1'.
--port
The database server port. Defaults to 3306 for MySQL and 5432 for PostgreSQL.
--user
The database username to connect with.
--password
The database password to connect with.
--database
The name of the database to select.
--schema
The schema that Postgres is configured to use by default (PostgreSQL only).
--table-prefix
The table prefix to add to all database tables. This can be no more than 5 characters, and must be all lowercase.

# setup/db-cache-table

Creates a database table for storing DB caches.

# setup/db-creds

Stores new DB connection settings to the .env file.

Options

--driver
The database driver to use. Either 'mysql' for MySQL or 'pgsql' for PostgreSQL.
--server
The database server name or IP address. Usually 'localhost' or '127.0.0.1'.
--port
The database server port. Defaults to 3306 for MySQL and 5432 for PostgreSQL.
--user
The database username to connect with.
--password
The database password to connect with.
--database
The name of the database to select.
--schema
The schema that Postgres is configured to use by default (PostgreSQL only).
--table-prefix
The table prefix to add to all database tables. This can be no more than 5 characters, and must be all lowercase.

# setup

Sets up all the things.

This is an interactive wrapper for the setup/app-id, setup/security-key, setup/db-creds, and install commands, each of which support being run non-interactively.

# setup/keys

Generates an application ID and security key (if they don’t exist), and saves them in the .env file.

# setup/message-tables

Creates database tables for storing message translations. (EXPERIMENTAL!)

# setup/php-session-table

Creates a database table for storing PHP session information.

# setup/security-key

Generates a new security key and saves it in the .env file.

# setup/welcome

Called from the post-create-project-cmd Composer hook.

# shell

# shell

Runs an interactive shell.

This command requires the yiisoft/yii2-shell (opens new window) package, which you may need to add to your project:

composer require --dev yiisoft/yii2-shell
$ php craft shell

Psy Shell v0.10.12 (PHP 8.0.3 — cli) by Justin Hileman
>>> help
  help       Show a list of commands. Type `help [foo]` for information about [foo].      Aliases: ?
  ls         List local, instance or class variables, methods and constants.              Aliases: dir
  dump       Dump an object or primitive.
  doc        Read the documentation for an object, class, constant, method or property.   Aliases: rtfm, m
  show       Show the code for an object, class, constant, method or property.
  wtf        Show the backtrace of the most recent exception.                             Aliases: last-ex
  whereami   Show where you are in the code.
  throw-up   Throw an exception or error out of the Psy Shell.
  timeit     Profiles with a timer.
  trace      Show the current call stack.
  buffer     Show (or clear) the contents of the code input buffer.                       Aliases: buf
  clear      Clear the Psy Shell screen.
  edit       Open an external editor. Afterwards, get produced code in input buffer.
  sudo       Evaluate PHP code, bypassing visibility restrictions.
  history    Show the Psy Shell history.                                                  Aliases: hist
  exit       End the current session and return to caller.                                Aliases: quit, q

Options

--include
Include file(s) before starting tinker shell.

# tests

# tests/setup

Sets up a test suite for the current project.

Parameters

dst
The folder that the test suite should be generated in. Defaults to the current working directory.

# up

# up

Runs pending migrations and applies pending project config changes.

Options

--no-backup
Skip backing up the database.
--force
Whether to perform the action even if a mutex lock could not be acquired.

# update

Updates Craft and plugins.

# update/composer-install

Installs dependencies based on the current composer.json & composer.lock.

# update/info

Displays info about available updates.

# update/update

Updates Craft and/or plugins.

Parameters

handle
The update handle (all, craft, or a plugin handle). You can pass multiple handles separated by spaces, and you can update to a specific version using the syntax <handle>:<version>.

Options

--with-expired

Whether to update expired licenses.

NOTE: This will result in “License purchase required” messages in the control panel on public domains, until the licenses have been renewed.

--minor-only

Whether only minor updates should be applied.

--patch-only

Whether only patch updates should be applied.

--except

Plugin handles to exclude

--force, -f

Force the update if allowUpdates is disabled

--backup

Backup the database before updating

--migrate

Run new database migrations after completing the update

# users

Manages user accounts.

# users/activation-url

Generates an activation URL for a pending user.

Parameters

user
The ID, username, or email address of the user account.

# users/create

Creates a user.

Options

--email
The user’s email address.
--username
The user’s username.
--password
The user’s new password.
--admin
Whether the user should be an admin.
--groups
The group handles to assign the created user to.
--group-ids
The group IDs to assign the user to the created user to.

# users/delete

Deletes a user.

Parameters

user
The ID, username, or email address of the user account.

Options

--inheritor
The email or username of the user to inherit content when deleting a user.
--delete-content
Whether to delete the user’s content if no inheritor is specified.
--hard
Whether the user should be hard-deleted immediately, instead of soft-deleted.

# users/impersonate

Generates a URL to impersonate a user.

Parameters

user
The ID, username, or email address of the user account.

# users/list-admins

Lists admin users.

# users/logout-all

Logs all users out of the system.

# users/password-reset-url

Generates a password reset URL for a user.

Parameters

user
The ID, username, or email address of the user account.

# users/set-password

Changes a user’s password.

Parameters

user
The ID, username, or email address of the user account.

Options

--password
The user’s new password.

# users/unlock

Unlocks a user's account.

Parameters

user
The ID, username, or email address of the user account.

# utils/ascii-filenames

# utils/ascii-filenames

Converts all non-ASCII asset filenames to ASCII.

# utils/fix-element-uids

# utils/fix-element-uids

Ensures all elements UIDs are unique.

# utils/fix-field-layout-uids

# utils/fix-field-layout-uids

Fixes any duplicate UUIDs found within field layout components in the project config.

# utils/prune-orphaned-matrix-blocks

# utils/prune-orphaned-matrix-blocks

Prunes orphaned Matrix blocks for each site.

# utils/prune-provisional-drafts

# utils/prune-provisional-drafts

Prunes provisional drafts for elements that have more than one per user.

Options

--dry-run
Whether this is a dry run.

# utils/prune-revisions

# utils/prune-revisions

Prunes excess element revisions.

Options

--section
The section handle(s) to prune revisions from. Can be set to multiple comma-separated sections.
--max-revisions
The maximum number of revisions an element can have.
--dry-run
Whether this is a dry run.

# utils/repair

Repairs data.

# utils/repair/category-group-structure

Repairs structure data for a category group.

Parameters

handle
The category group handle.

Options

--dry-run
Whether to only do a dry run of the repair process.

# utils/repair/project-config

Repairs double-packed associative arrays in the project config.

Options

--dry-run
Whether to only do a dry run of the repair process.

# utils/repair/section-structure

Repairs structure data for a section.

Parameters

handle
The section handle.

Options

--dry-run
Whether to only do a dry run of the repair process.

# utils/update-usernames

# utils/update-usernames

Updates all users’ usernames to ensure they match their email address.

Parts of this page are generated or assembled by automations. While we greatly appreciate contributions to the documentation, reporting automated content issues will allow us to fix them at the source!