export const meta = {
  title: `Overview`,
  description: `Plugins enable you to add additional commands and functionality to existing Amplify CLI. Learn how to create, publish, consume a plugin package.`,
};

  

Plugins are explicitly managed in the Amplify CLI pluggable platform. Plugins enable you to add additional commands and functionality to existing Amplify CLI. This section goes through the steps to create, publish, consume a plugin package, explains the folder structure, and key files in the plugin package.

## Official plugins

- amplify-category-analytics
- amplify-category-api
- amplify-category-auth
- amplify-category-function
- amplify-category-hosting
- amplify-category-interactions
- amplify-category-notifications
- amplify-category-predictions
- amplify-category-storage
- amplify-codegen
- amplify-frontend-javascript
- amplify-frontend-android
- amplify-frontend-ios
- amplify-provider-awscloudformation

## Third-party plugins

- [amplify-category-video](https://www.npmjs.com/package/amplify-category-video) - Make it easy to incorporate video streaming into your mobile and web applications powered by AWS Amplify and AWS Media Services
- [amplify-category-docs](https://www.npmjs.com/package/amplify-category-docs) - An easy way to view the Amplify Docs from the Amplify CLI
- [amplify-category-data-importer](https://www.npmjs.com/package/amplify-category-data-importer) - Automate the process of seeding, importing, and managing data for Amplify projects
- [graphql-ttl-transformer](https://github.com/flogy/graphql-ttl-transformer) - Enable DynamoDB's time-to-live feature to auto-delete old entries in your AWS Amplify API
- [amplify-graphql-seed-plugin](https://www.npmjs.com/package/amplify-graphql-seed-plugin) - Seed your local and remote databases with highly customizable mock data using your GraphQL API

## Plugin installation

You can add a 3rd party plugin to the Amplify CLI with the following steps:

- If the plugin author named the plugin package according to the [naming convention](/cli/plugins/architecture#plugin-types).

1. Run `npm install -g <plugin>` and install the plugin to the global node_modules directory.<br/>
2. Run `amplify plugin scan` so the Amplify CLI plugin platform will pick up the newly added plugin.

- If the plugin author did NOT name the plugin package according to the naming convention outlined above.

1. Run `npm install -g <plugin>` and install the plugin to the global node_modules directory.<br/>
2. Run `amplify plugin add` and provide the path to the plugin to explicitly add the plugin package into the Amplify CLI plugin platform.

## Plugin Commands

The following is the suite of the commands under the `amplify plugin`:

- amplify plugin configure
- amplify plugin scan
- amplify plugin add
- amplify plugin remove
- amplify plugin list
- amplify plugin init
- amplify plugin verify
- amplify plugin help

### configure

`amplify plugin configure` is used to configure the following settings in the `plugins.json` file:

- `plugin-directories` : contains the directories that plugin packages are searched for during a plugin scan.
- `plugin-prefixes`: contains the plugin package name prefixes. A package named with such prefix is considered a plugin candidate and checked during a plugin scan. If `plugin-prefixes` is empty, all packages inside the scanned directories will be checked.
- `max-scan-interval-in-seconds` : the Amplify CLI Core will scan again if the last scan time has passed for longer than `max-scan-interval-in-seconds`. Setting this value to 0 will result in fresh scan at the beginning of each Amplify CLI command execution. The default value is 1 day.

### scan

`amplify plugin scan` will start a fresh scan for plugins in the local environment. A configurable set of directories specified in `plugin-directories`, such as the global node_modules, are scanned for plugins.<br/>
Execution of this command will completely update the contents of the `plugins` field in the `plugins.json`.
The `last-scan-time` field in the `plugins.json` is the time stamp of the last plugin scan.
Note that, other than manually started by this command, a plugin scan can also be triggered by a regular amplify command execution, for example if the Amplify CLI Core noticed something is incorrect, or the last scan time has passed for longer than `max-scan-interval-in-seconds`(set to be one day by default).

### add

`amplify plugin add` will prompt you to select a previously removed plugin (see below), or enter the full path of a local package to be added as a plugin into the Amplify CLI. The Amplify CLI Core verifies the existence and validity of the plugin package during execution of the this command. You can use this command to add a plugin that will not be found by the plugin scan process, e.g. if it is not in one of the `plugin-directories`, or its package name does not have the proper prefix as specified in the `plugin-prefixes`.

### remove

`amplify plugin remove` will prompt you with the list of all the currently active plugins, and allow you to select the ones that you do not want to be included in the Amplify CLI. The Amplify CLI Core will remove the manifest of those plugins from the `plugins` field, so they will NOT be counted as active plugins anymore and will NOT be loaded during command executions.<br/>
If a removed plugin is in one of the directories specified in the `plugin-directories`, and its package name has the prefix as specified in the `plugin-prefixes`, it is then inserted in the `excluded` field of the `plugins.json` file. This will not be inserted back to the `plugins` field in the next plugin scan.
The actual plugin packages themselves are not removed from your computer, and they can be added back as active plugins by `amplify plugin add`.

### list

`amplify plugin list` lists all the active plugins, along with other information of the local Amplify CLI plugin platform.

### init

The Amplify CLI provides the command `amplify plugin init` (with alias `amplify plugin new`) for the development of plugins.<br/>
This command first collects the requirements from you and then creates the skeleton of the plugin package for you to start the development.
The newly created plugin package is added to your local Amplify CLI platform, so you can conveniently test its functionalities while it is being developed.
It can be easily removed from the platform with the `amplify plugin remove` command and added back with the `amplify plugin add` command.

### verify

The Amplify CLI provides the utility command `amplify plugin verify` to verify that:

- The package implements the required interface methods for plugins.
- The `commands` field contains all the required commands for the type of the plugin.
`amplify plugin verify` command treats the folder where it is executed as the root directory of the plugin package. The command can be executed manually. Its functionality is also invoked by the `amplify plugin scan` and `amplify plugin add` commands.

### help

Prints out help information for the commands under `amplify plugin`.
