# Command Line Interface (CLI)

Strapi comes with a full featured Command Line Interface (CLI) which lets you scaffold and manage your project in seconds.

# strapi new

Create a new project.

strapi new <name>

options: [--no-run|--use-npm|--debug|--quickstart|--dbclient=<dbclient> --dbhost=<dbhost> --dbport=<dbport> --dbname=<dbname> --dbusername=<dbusername> --dbpassword=<dbpassword> --dbssl=<dbssl> --dbauth=<dbauth> --dbforce]
  • strapi new <name>
    Generates a new project called <name> and installs the default plugins through the npm registry.

  • strapi new <name> --debug
    Will display the full error message if one is fired during the database connection.

  • strapi new <name> --quickstart
    Use the quickstart system to create your app.

  • strapi new <name> --quickstart --no-run
    Use the quickstart system to create your app, and do not start the application after creation.

  • strapi new <name> --dbclient=<dbclient> --dbhost=<dbhost> --dbport=<dbport> --dbname=<dbname> --dbusername=<dbusername> --dbpassword=<dbpassword> --dbssl=<dbssl> --dbauth=<dbauth> --dbforce

    Generates a new project called <name> and skip the interactive database configuration and initialize with these options.

    • <dbclient> can be mongo, postgres, mysql.
    • <dbssl> and <dbauth> are available only for mongo and are optional.
    • --dbforce Allows you to overwrite content if the provided database is not empty. Only available for postgres, mysql, and is optional.

# strapi develop|dev

Start a Strapi application with autoReload enabled.

Strapi modifies/creates files at runtime and needs to restart when new files are created. To achieve this, strapi develop adds a file watcher and restarts the application when necessary.

strapi develop
options: [--no-build |--watch-admin ]
  • strapi develop
    Starts your application with the autoReload enabled
  • strapi develop --no-build
    Starts your application with the autoReload enabled and skip the administration panel build process
  • strapi develop --watch-admin
    Starts your application with the autoReload enabled and the front-end development server. It allows you to customize the administration panel.

TIP

You should never use this command to run a Strapi application in production.

# strapi start

Start a Strapi application with autoReload disabled.

This commands is there to run a Strapi application without restarts and file writes (aimed at production usage). Certain features are disabled in the strapi start mode because they require application restarts.

TIP

You can specify a NODE_ENV to use the configurations in the ./config/environments/[development|staging|production] folder. By default the development environment will be used.

# strapi build

Builds your admin panel.

strapi build

options: [--no-optimization]
  • strapi build
    Builds the administration panel and minimizing the assets
  • strapi build --clean
    Builds the administration panel and delete the previous build and .cache folders
  • strapi build --no-optimization
    Builds the administration panel without minimizing the assets. The build duration is faster.

TIP

You can specify a NODE_ENV to use the configurations in the ./config/environments/[development|staging|production] folder. By default the development environment will be used.

# strapi generate:api

Scaffold a complete API with its configurations, controller, model and service.

strapi generate:api <name> [<attribute:type>]

options: [--plugin <name>]
  • strapi generate:api <name>
    Generates an API called <name> in the ./api folder at the root of your project.

  • strapi generate:api <name> <attribute:type>
    Generates an API called <name> in the ./api folder at the root of your project. The model will already contain an attribute called <attribute> with the type property set to <type>.

    Example: strapi generate:api product name:string description:text price:integer

  • strapi generate:api <name> --plugin <plugin>
    Generates an API called <name> in the ./plugins/<plugin> folder.

    Example: strapi generate:api product --plugin content-manager

TIP

The first letter of the filename will be uppercase.

# strapi generate:controller

Create a new controller.

strapi generate:controller <name>

options: [--api <name>|--plugin <name>]
  • strapi generate:controller <name>
    Generates an empty controller called <name> in the ./api/<name>/controllers folder.

    Example: strapi generate:controller category will create the controller at ./api/category/controllers/Category.js.

  • strapi generate:controller <name> --api <api>
    Generates an empty controller called <name> in the ./api/<api>/controllers folder.

    Example: strapi generate:controller category --api product will create the controller at ./api/product/controllers/Category.js.

  • strapi generate:controller <name> --plugin <plugin>
    Generates an empty controller called <name> in the ./plugins/<plugin>/controllers folder.

TIP

The first letter of the filename will be uppercase.

# strapi generate:model

Create a new model.

strapi generate:model <name> [<attribute:type>]

options: [--api <name>|--plugin <name>]
  • strapi generate:model <name>
    Generates an empty model called <name> in the ./api/<name>/models folder. It will create two files. The first one will be <name>.js which contains your lifecycle callbacks and another <name>.settings.json that will list your attributes and options.

    Example: strapi generate:model category will create these two files ./api/category/models/Category.js and ./api/category/models/Category.settings.json.

  • strapi generate:model <name> <attribute:type>
    Generates an empty model called <name> in the ./api/<name>/models folder. The file <name>.settings.json will already contain a list of attribute with their associated <type>.

    Example: strapi generate:model category name:string description:text will create these two files ./api/category/models/Category.js and ./api/category/models/Category.settings.json. This last file will contain two attributes name with the type string and description with type text.

  • strapi generate:model <name> --api <api>
    Generates an empty model called <name> in the ./api/<api>/models folder.

    Example: strapi generate:model category --api product will create these two files:

    • ./api/product/models/Category.js
    • ./api/product/models/Category.settings.json.
  • strapi generate:model <name> --plugin <plugin>
    Generates an empty model called <name> in the ./plugins/<plugin>/models folder.

TIP

The first letter of the filename will be uppercase.

# strapi generate:service

Create a new service.

strapi generate:service <name>

options: [--api <name>|--plugin <name>]
  • strapi generate:service <name>
    Generates an empty service called <name> in the ./api/<name>/services folder.

    Example: strapi generate:service category will create the service at ./api/category/services/Category.js.

  • strapi generate:service <name> --api <api>
    Generates an empty service called <name> in the ./api/<api>/services folder.

    Example: strapi generate:service category --api product will create the service at ./api/product/services/Category.js.

  • strapi generate:service <name> --plugin <plugin>
    Generates an empty service called <name> in the ./plugins/<plugin>/services folder.

TIP

The first letter of the filename will be uppercase.

# strapi generate:policy

Create a new policy.

strapi generate:policy <name>

options: [--api <name>|--plugin <name>]
  • strapi generate:policy <name>
    Generates an empty policy called <name> in the ./config/policies folder.

    Example: strapi generate:policy isAuthenticated will create the policy at ./config/policies/isAuthenticated.js.

  • strapi generate:policy <name> --api <api>
    Generates an empty policy called <name> in the ./api/<api>/config/policies folder. This policy will be scoped and only accessible by the <api> routes.

    Example: strapi generate:policy isAuthenticated --api product will create the policy at ./api/product/config/policies/isAuthenticated.js.

  • strapi generate:policy <name> --plugin <plugin>
    Generates an empty policy called <name> in the ./plugins/<plugin>/config/policies folder. This policy will be scoped and accessible only by the <plugin> routes.

# strapi generate:plugin

Create a new plugin skeleton.

strapi generate:plugin <name>
  • strapi generate:plugin <name>
    Generates an empty plugin called <name> in the ./plugins folder.

    Example: strapi generate:plugin user will create the plugin at ./plugins/user.

Please refer to the local plugins section to know more.

# strapi install

Install a plugin in the project.

strapi install <name>
  • strapi install <name>
    Installs a plugin called <name>.

    Example: strapi install graphql will install the plugin strapi-plugin-graphql

WARNING

Some plugins have admin panel integrations, your admin panel might have to be rebuilt. This can take some time.

# strapi uninstall

Uninstall a plugin from the project.

strapi uninstall <name>

options [--delete-files]
  • strapi uninstall <name>
    Uninstalls a plugin called <name>.

    Example: strapi uninstall graphql will remove the plugin strapi-plugin-graphql

  • strapi uninstall <name> --delete-files
    Uninstalls a plugin called <name> and removes the files in ./extensions/name/

    Example: strapi uninstall graphql --delete-files will remove the plugin strapi-plugin-graphql and all the files in ./extensions/graphql

WARNING

Some plugins have admin panel integrations, your admin panel might have to be rebuilt. This can take some time.

# strapi console

Start the server and eval commands in your application in real time.

strapi console

# strapi version

Print the current globally installed Strapi version.

strapi version

# strapi help

List CLI commands.

strapi help