[[plugin-tooling]]
== Plugin tooling

[discrete]
[[automatic-plugin-generator]]
=== Automatic plugin generator

We recommend that you kick-start your plugin by generating it with the {kib-repo}tree/{branch}/packages/kbn-plugin-generator[{kib} Plugin Generator]. Run the following in the {kib} repo, and you will be asked a couple of questions, see some progress bars, and have a freshly generated plugin ready for you to play with in {kib}'s `plugins` folder.

["source","shell"]
-----------
node scripts/generate_plugin my_plugin_name # replace "my_plugin_name" with your desired plugin name
-----------

[discrete]
=== Plugin location

The {kib} directory must be named `kibana`, and your plugin directory should be located in the root of `kibana` in a `plugins` directory, for example:

["source","shell"]
----
.
└── kibana
    └── plugins
        ├── foo-plugin
        └── bar-plugin
----

=== Build plugin distributable
WARNING: {kib} distributable is not shipped with `@kbn/optimizer` anymore. You need to pre-build your plugin for use in production.

You can leverage {kib-repo}blob/{branch}/packages/kbn-plugin-helpers[@kbn/plugin-helpers] to build a distributable archive for your plugin.
The package transpiles the plugin code, adds polyfills, and links necessary js modules in the runtime.
You don't need to install the `plugin-helpers` dependency. If you created the plugin using `node scripts/generate_plugin` script, `package.json` is already pre-configured.
To build your plugin run within your plugin folder:
["source","shell"]
-----------
yarn build
-----------
It will output a`zip` archive in `kibana/plugins/my_plugin_name/build/` folder.

=== Install a plugin from archive
See <<install-plugin, How to install a plugin>>.

=== Run {kib} with your plugin in dev mode
If your plugin isn't server only and contains `ui` in order for Kibana to pick the browser bundles you need to run `yarn dev --watch` in the plugin root folder at a dedicated terminal.

Then, in a second terminal, run `yarn start` at the {kib} root folder. Make sure {kib} found and bootstrapped your plugin by:
["source","shell"]
-----------
[INFO ][plugins-system.standard] Setting up […] plugins: […, myPluginName, …]
-----------
