[[kibana-plugins]]
== Kibana Plugins added[4.2]

Add-on functionality for Kibana is implemented with plug-in modules. You can use the `bin/kibana plugin` 
command to manage these modules. You can also install a plugin manually by moving the plugin file to the 
`installedPlugins` directory and unpacking the plugin files into a new directory.

[float]
=== Installing Plugins

Use the following command to install a plugin:

[source,shell]
bin/kibana plugin --install <org>/<package>/<version>

You can also use `-i` instead of `--install`, as in the following example:

[source,shell]
bin/kibana plugin -i elasticsearch/marvel/latest

Because the organization given is `elasticsearch`, the plugin management tool automatically downloads the 
plugin from `download.elastic.co`.

[float]
=== Installing Plugins from an Arbitrary URL

You can specify a URL to a plugin with the `-u` or `--url` options after the `-i` or `--install` option, as in the
following example:

[source,shell]
bin/kibana plugin -i sample-plugin -u https://some.sample.url/directory
Installing sample-plugin
Attempting to extract from https://some.sample.url/directory
Downloading <some number> bytes....................
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete

You can specify URLs that use the HTTP, HTTPS, or `file` protocols.

[float]
=== Installing Plugins to an Arbitrary Directory

Use the `-d` or `--plugin-dir` option to specify a directory for plugins, as in the following example:

[source,shell]
bin/kibana plugin -i elasticsearch/sample-plugin/latest -d <path/to/directory>
Installing sample-plugin
Attempting to extract from https://download.elastic.co/elasticsearch/sample-plugin/sample-plugin-latest.tar.gz
Downloading <some number> bytes....................
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete

NOTE: This command creates the specified directory if it does not already exist.

[float]
=== Removing Plugins

Use the `--remove` or `-r` option to remove a plugin, including any configuration information, as in the following 
example:

[source,shell]
bin/kibana plugin --remove marvel

You can also remove a plugin manually by deleting the plugin's subdirectory under the `installedPlugins` directory.

[float]
=== Listing Installed Plugins

Use `--list` or `-l` option to list the currently installed plugins.

[float]
=== Updating Plugins

To update a plugin, remove the current version and reinstall the plugin.

[float]
=== Configuring the Plugin Manager

By default, the plugin manager provides you with feedback on the status of the activity you've asked the plugin manager 
to perform. You can control the level of feedback with the `--quiet` and `--silent` options. Use the `--quiet` option to 
suppress all non-error output. Use the `--silent` option to suppress all output.

By default, plugin manager requests do not time out. Use the `--timeout` option, followed by a time, to change this 
behavior, as in the following examples:

[source,shell]
.Waits for 30 seconds before failing
bin/kibana plugin --install username/sample-plugin --timeout 30s

[source,shell]
.Waits for 1 minute before failing
bin/kibana plugin --install username/sample-plugin --timeout 1m

[float]
==== Plugins and Custom Kibana Configurations

Use the `-c` or `--config` options to specify the path to the configuration file used to start Kibana. By default, Kibana 
uses the configuration file `config/kibana.yml`. When you change your installed plugins, the `bin/kibana plugin` command 
restarts the Kibana server. When you are using a customized configuration file, you must specify the
path to that configuration file each time you use the `bin/kibana plugin` command.

[float]
=== Plugin Manager Exit Codes

[horizontal]
0:: Success
64:: Unknown command or incorrect option parameter
74:: I/O error
70:: Other error

[float]
[[plugin-switcher]]
== Switching Plugin Functionality

The Kibana UI serves as a framework that can contain several different plugins. You can switch between these 
plugins by clicking the image:images/app-button.png[Plugin Chooser] *Plugin chooser* button to display icons for the
installed plugins:

image::images/app-picker.png[]

Click a plugin's icon to switch to that plugin's functionality.
