Generates a new project called **<name>** and creates symlinks for the `./admin` folder and each plugin inside the `./plugin` folder. It means that the Strapi's development workflow has been set up on the machine earlier.
Generates a new project called **<name>** and skip the interactive database configuration and initilize with these options. **<dbclient>** can be `mongo`, `postgres`, `mysql`, `sqlite3` or `redis`. **<dbusername>** and **<dbpassword>** are optional.
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>**.
Generates an API called **<name>** in the `./api` folder which works with the given **<template>**. By default, the generated APIs are based on Mongoose.
Generates an empty controller called **<name>** in the `./plugins/<plugin>/controllers` folder.
> Note: The first letter of the filename will be uppercased.
## strapi generate:model
Create a new model
```bash
strapi generate:model <name> [<attribute:type>]
options: [--api <name>|--plugin <name>]
```
- **strapi generate:model <name>**<br/>
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`.
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`.
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`.
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.
```bash
strapi generate:plugin <name>
```
- **strapi generate:plugin <name>**<br/>
Generates an empty plugin called **<name>** in the `./plugins` folder.
Example: `strapi generate:plugin user` will create the plugin at `./plugins/user`.
Installs a plugin called **<name>** in the `./plugins` folder.
Example: `strapi install content-type-builder` will install the plugin at `./plugins/content-type-builder`.
- **strapi install <name> --dev**<br/>
It will create a symlink from the local Strapi repository plugin folder called **<name>** in the `./plugins` folder.
Example: `strapi install content-type-builder --dev` will create a symlink from `/path/to/the/repository/packages/strapi-plugin-content-type-builder` to `./plugins/content-type-builder`.
> Checkout the [CONTRIBUTING guide](https://github.com/strapi/strapi/blob/master/CONTRIBUTING.md) for more details about the local Strapi development workflow.