github-actions[bot] 33c40ac117
Update generated descriptor pages (#1460)
Co-authored-by: YannCebron <570887+YannCebron@users.noreply.github.com>
2025-04-30 13:16:38 +02:00

1798 lines
53 KiB
Markdown

<!-- Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
# Plugin Configuration File
<show-structure for="chapter" depth="4"/>
<link-summary>Plugin configuration file contains all the information about the plugin, as well as all registered extensions, actions, listeners, etc.</link-summary>
The <path>plugin.xml</path> configuration file contains all the information about the plugin, which is displayed in the [plugins' settings dialog](https://www.jetbrains.com/help/idea/managing-plugins.html), and all registered extensions, actions, listeners, etc.
The sections below describe all the elements in detail.
The example <path>plugin.xml</path> files can be found in the [IntelliJ SDK Docs Code Samples](https://github.com/JetBrains/intellij-sdk-code-samples) repository.
## Additional Plugin Configuration Files
A plugin can contain additional configuration files beside the main <path>plugin.xml</path>.
They have the same format, and they are included with the `config-file` attribute of [`<depends>`](#idea-plugin__depends) elements specifying [plugin dependencies](plugin_dependencies.md).
However, some elements and attributes required in <path>plugin.xml</path> are ignored in additional configuration files.
If the requirements differ, the documentation below will state it explicitly.
One use case for additional configuration files is when a plugin provides optional features that are only available in some IDEs and require [certain modules](plugin_compatibility.md#modules-specific-to-functionality).
## Useful Resources
Please make sure to follow the guidelines from [Best practices for listing your plugin](https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html) for an optimal presentation of your plugin on JetBrains Marketplace.
The _Busy Plugin Developers. Episode 2_ discusses [5 tips for optimizing JetBrains Marketplace plugin page](https://youtu.be/oB1GA9JeeiY?t=52) in more detail.
See also [](marketing.md) about widgets and badges.
## Configuration Structure Overview
> If an element or an attribute is not documented on this page, consider them as configuration items intended to be used by JetBrains only.
> They must not be used by third-party plugins.
>
{title="Private Configuration Elements" style="warning"}
Deprecated elements are omitted in the list below.
<include from="snippets.topic" element-id="descriptorDocumentationProviderNote"/>
[//]: # (GENERATED CONTENT START)
[//]: # (This content is generated by generate_descriptor_pages.main.kts script.)
[//]: # (DO NOT EDIT IT MANUALLY)
- [`<idea-plugin>`](#idea-plugin)
- [`<id>`](#idea-plugin__id)
- [`<name>`](#idea-plugin__name)
- [`<version>`](#idea-plugin__version)
- [`<product-descriptor>`](#idea-plugin__product-descriptor)
- [`<idea-version>`](#idea-plugin__idea-version)
- [`<vendor>`](#idea-plugin__vendor)
- [`<description>`](#idea-plugin__description)
- [`<change-notes>`](#idea-plugin__change-notes)
- [`<depends>`](#idea-plugin__depends)
- [`<incompatible-with>`](#idea-plugin__incompatible-with)
- [`<extensions>`](#idea-plugin__extensions)
- [An Extension](#idea-plugin__extensions__-)
- [`<extensionPoints>`](#idea-plugin__extensionPoints)
- [`<extensionPoint>`](#idea-plugin__extensionPoints__extensionPoint)
- [`<with>`](#idea-plugin__extensionPoints__extensionPoint__with)
- [`<resource-bundle>`](#idea-plugin__resource-bundle)
- [`<actions>`](#idea-plugin__actions)
- [`<action>`](#idea-plugin__actions__action)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<keyboard-shortcut>`](#idea-plugin__actions__action__keyboard-shortcut)
- [`<mouse-shortcut>`](#idea-plugin__actions__action__mouse-shortcut)
- [`<override-text>`](#idea-plugin__actions__action__override-text)
- [`<synonym>`](#idea-plugin__actions__action__synonym)
- [`<abbreviation>`](#idea-plugin__actions__action__abbreviation)
- [`<group>`](#idea-plugin__actions__group)
- [`<action>`](#idea-plugin__actions__action)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<keyboard-shortcut>`](#idea-plugin__actions__action__keyboard-shortcut)
- [`<mouse-shortcut>`](#idea-plugin__actions__action__mouse-shortcut)
- [`<override-text>`](#idea-plugin__actions__action__override-text)
- [`<synonym>`](#idea-plugin__actions__action__synonym)
- [`<abbreviation>`](#idea-plugin__actions__action__abbreviation)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<override-text>`](#idea-plugin__actions__action__override-text)
- [`<reference>`](#idea-plugin__actions__group__reference)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<separator>`](#idea-plugin__actions__group__separator)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<reference>`](#idea-plugin__actions__group__reference)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<applicationListeners>`](#idea-plugin__applicationListeners)
- [`<listener>`](#idea-plugin__applicationListeners__listener)
- [`<projectListeners>`](#idea-plugin__projectListeners)
- [`<listener>`](#idea-plugin__applicationListeners__listener)
- [`<xi:include>`](#idea-plugin__xi:include)
- [`<xi:fallback>`](#idea-plugin__xi:include__xi:fallback)
## `idea-plugin`
{#idea-plugin}
The <path>plugin.xml</path> file root element.
{type="narrow"}
Required
: **yes**
{type="narrow"}
Attributes
:
- `url` _(optional; ignored in an [additional config file](#additional-plugin-configuration-files))_<br/>
The link to the plugin homepage displayed on the plugin page in
the [JetBrains Marketplace](https://plugins.jetbrains.com).
- `require-restart` _(optional)_<br/>
The boolean value determining whether the plugin installation, update, or uninstallation requires an IDE restart
(see [Dynamic Plugins](dynamic_plugins.md) for details).<br/>
Default value: `false`.
Children
:
- [`<actions>`](#idea-plugin__actions)
- [`<applicationListeners>`](#idea-plugin__applicationListeners)
- [`<change-notes>`](#idea-plugin__change-notes)
- [`<depends>`](#idea-plugin__depends)
- [`<description>`](#idea-plugin__description)
- [`<extensionPoints>`](#idea-plugin__extensionPoints)
- [`<extensions>`](#idea-plugin__extensions)
- [`<id>`](#idea-plugin__id)
- [`<idea-version>`](#idea-plugin__idea-version)
- [`<incompatible-with>`](#idea-plugin__incompatible-with)
- [`<name>`](#idea-plugin__name)
- [`<product-descriptor>`](#idea-plugin__product-descriptor)
- [`<projectListeners>`](#idea-plugin__projectListeners)
- [`<resource-bundle>`](#idea-plugin__resource-bundle)
- [`<vendor>`](#idea-plugin__vendor)
- [`<version>`](#idea-plugin__version)
- [`<xi:include>`](#idea-plugin__xi:include)
- [`<application-components>`](#idea-plugin__application-components) ![Deprecated][deprecated]
- [`<module-components>`](#idea-plugin__module-components) ![Deprecated][deprecated]
- [`<project-components>`](#idea-plugin__project-components) ![Deprecated][deprecated]
### `id`
{#idea-plugin__id}
A unique identifier of the plugin.
It should be a fully qualified name similar to Java packages and must not collide with the ID of existing plugins.
The ID is a technical value used to identify the plugin in the IDE and [JetBrains Marketplace](https://plugins.jetbrains.com).
Please use characters, numbers, and `'.'`/`'-'`/`'_'` symbols only and keep it reasonably short.
> Make sure to pick a stable ID, as the value cannot be changed later after public release.
>
{style="warning"}
{type="narrow"}
Required
: no; ignored in an [additional config file](#additional-plugin-configuration-files)<br/>
**It is highly recommended to set in <path>plugin.xml</path> file.**<br/>
The element can be skipped in the source <path>plugin.xml</path> file if the Gradle plugin `patchPluginXml` task
([2.x](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml),
[1.x](tools_gradle_intellij_plugin.md#tasks-patchpluginxml))
is enabled and configured.
Default value
: Value of the [`<name>`](#idea-plugin__name) element.
Example
:
```xml
<id>com.example.framework</id>
```
### `name`
{#idea-plugin__name}
<tldr>
**Reference:** [JetBrains Marketplace: Plugin Name](https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#plugin-name)
</tldr>
The user-visible plugin display name (Title Case).
{type="narrow"}
Required
: **yes**; ignored in an [additional config file](#additional-plugin-configuration-files)
Example
:
```xml
<name>My Framework Support</name>
```
### `version`
{#idea-plugin__version}
<tldr>
**Reference:** [JetBrains Marketplace: Semantic Versioning](https://plugins.jetbrains.com/docs/marketplace/semver.html)
</tldr>
The plugin version displayed in the <control>Plugins</control> settings dialog and on the
[JetBrains Marketplace](https://plugins.jetbrains.com) plugin page.
Plugins uploaded to the JetBrains Marketplace must follow semantic versioning.
{type="narrow"}
Required
: **yes**; ignored in an [additional config file](#additional-plugin-configuration-files)<br/>
The element can be skipped in the source <path>plugin.xml</path> file if the Gradle plugin `patchPluginXml` task
([2.x](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml),
[1.x](tools_gradle_intellij_plugin.md#tasks-patchpluginxml))
is enabled and configured.
Example
:
```xml
<version>1.3.18</version>
```
### `product-descriptor`
{#idea-plugin__product-descriptor}
<tldr>
**Reference:** [JetBrains Marketplace: How to add required parameters for paid plugins](https://plugins.jetbrains.com/docs/marketplace/add-required-parameters.html)
</tldr>
[Paid](https://plugins.jetbrains.com/build-and-market) or
[Freemium](https://plugins.jetbrains.com/docs/marketplace/freemium.html) plugin descriptor.
{type="narrow"}
Required
: only for paid or freemium plugins; ignored in an [additional config file](#additional-plugin-configuration-files)<br/>
**Do not add `<product-descriptor>` element in a free plugin.**
{type="narrow"}
Attributes
:
- `code` _(**required**)_<br/>
The plugin product code used in the JetBrains Sales System.
The code must be agreed with JetBrains in advance and follow
[the requirements](https://plugins.jetbrains.com/docs/marketplace/add-required-parameters.html).
- `release-date` _(**required**)_<br/>
Date of the major version release in the `YYYYMMDD` format.
- `release-version` _(**required**)_<br/>
A major version in a specific number format, for example, `20242` for the 2024.2 major release.<br/>
See [`release-version` constraints](https://plugins.jetbrains.com/docs/marketplace/versioning-of-paid-plugins.html#release-version-constraints) for more details.
- `optional` _(optional)_<br/>
The boolean value determining whether the plugin is
a [Freemium](https://plugins.jetbrains.com/docs/marketplace/freemium.html) plugin.<br/>
Default value: `false`.
- `eap` _(optional)_<br/>
Specifies the boolean value determining whether the plugin is an EAP release.<br/>
Default value: `false`.
### `idea-version`
{#idea-plugin__idea-version}
<tldr>
**Reference:** [Build Number Ranges](build_number_ranges.md)
</tldr>
The plugin's range of compatible IntelliJ-based IDE versions.
{type="narrow"}
Required
: **yes**; ignored in an [additional config file](#additional-plugin-configuration-files)<br/>
The element can be skipped in the source <path>plugin.xml</path> file if the Gradle plugin `patchPluginXml` task
([2.x](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml),
[1.x](tools_gradle_intellij_plugin.md#tasks-patchpluginxml))
is enabled and configured.
{type="narrow"}
Attributes
:
- `since-build` _(**required**)_<br/>
The lowest IDE version compatible with the plugin.
- `until-build` _(optional)_<br/>
The highest IDE version compatible with the plugin.
Undefined value declares compatibility with all the IDEs since the version specified by the `since-build`
(also with the future builds that may cause incompatibility errors).
Examples
:
- Compatibility with a specific build number (2021.3.3) and higher versions:
```xml
<idea-version since-build="213.7172.25"/>
```
- Compatibility with versions from any of `213` branches to any of `221` branches:
```xml
<idea-version
since-build="213" until-build="221.*"/>
```
### `vendor`
{#idea-plugin__vendor}
<tldr>
**Reference:** [JetBrains Marketplace: Contacts and Resources](https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#contacts-and-resources)
</tldr>
The vendor name or organization ID (if created) in the <control>Plugins</control> settings dialog and on
the [JetBrains Marketplace](https://plugins.jetbrains.com) plugin page.
{type="narrow"}
Required
: **yes**; ignored in an [additional config file](#additional-plugin-configuration-files)
{type="narrow"}
Attributes
:
- `url` _(optional)_<br/>
The URL to the vendor's homepage.
Supports `https://` and `http://` scheme links.
- `email` _(optional)_<br/>
The vendor's email address.
Examples
:
- Personal vendor with an email address provided:
```xml
<vendor email="joe@example.com">Joe Doe</vendor>
```
- Organizational vendor with a website URL and email address provided:
```xml
<vendor
url="https://mycompany.example.com"
email="contact@example.com">
My Company
</vendor>
```
### `description`
{#idea-plugin__description}
<tldr>
**Reference:** [JetBrains Marketplace: Plugin Description](https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#plugin-description)
</tldr>
The plugin description displayed on the [JetBrains Marketplace](https://plugins.jetbrains.com) plugin page and in
the <control>Plugins</control> settings dialog.
Simple HTML elements, like text formatting, paragraphs, lists, etc., are allowed and must be wrapped into
`<![CDATA[` ... `]]>` section.
{type="narrow"}
Required
: **yes**; ignored in an [additional config file](#additional-plugin-configuration-files)<br/>
The element can be skipped in the source <path>plugin.xml</path> file if the Gradle plugin `patchPluginXml` task
([2.x](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml),
[1.x](tools_gradle_intellij_plugin.md#tasks-patchpluginxml))
is enabled and configured.
Example
:
```xml
<description><![CDATA[
Provides support for My Framework.
The support includes:
<ul>
<li>code completion</li>
<li>references</li>
</ul>
For more information visit the
<a href="https://example.com">project site</a>.
]]></description>
```
### `change-notes`
{#idea-plugin__change-notes}
<tldr>
**Reference:** [JetBrains Marketplace: Change Notes](https://plugins.jetbrains.com/docs/marketplace/best-practices-for-listing.html#change-notes)
</tldr>
A short summary of new features, bugfixes, and changes provided with the latest plugin version.
Change notes are displayed on the [JetBrains Marketplace](https://plugins.jetbrains.com) plugin page and in
the <control>Plugins</control> settings dialog.
Simple HTML elements, like text formatting, paragraphs, lists, etc., are allowed and must be wrapped into
`<![CDATA[` ... `]]>` section.
{type="narrow"}
Required
: no; ignored in an [additional config file](#additional-plugin-configuration-files)<br/>
The element can be skipped in the source <path>plugin.xml</path> file if the Gradle plugin `patchPluginXml` task
([2.x](tools_intellij_platform_gradle_plugin_tasks.md#patchPluginXml),
[1.x](tools_gradle_intellij_plugin.md#tasks-patchpluginxml))
is enabled and configured.
Example
:
```xml
<change-notes><![CDATA[
<h2>New Features</h2>
<ul>
<li>Feature 1</li>
<li>Feature 2</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fixed issue 1</li>
<li>Fixed issue 2</li>
</ul>
]]></change-notes>
```
### `depends`
{#idea-plugin__depends}
<tldr>
**Reference:** [Plugin Dependencies](plugin_dependencies.md)
, [Modules Specific to Functionality](plugin_compatibility.md#modules-specific-to-functionality)
</tldr>
Specifies a dependency on another plugin or a module of an IntelliJ Platform-based product.
A single [`<idea-plugin>`](#idea-plugin) element can contain multiple `<depends>` elements.
{type="narrow"}
Required
: no; in most cases dependency on the
[platform](plugin_compatibility.md#modules-available-in-all-products)
module is needed
{type="narrow"}
Attributes
:
- `optional` _(optional)_<br/>
Boolean value defining whether the dependency is optional to load the plugin in the IDE.
If the dependency plugin is not installed in the current IDE, and `optional` is:
- `true` - the plugin will be loaded
- `false` (default) - the plugin will not be loaded
- `config-file` _(required when `optional` is `true`)_<br/>
Relative path to an
[additional configuration file](#additional-plugin-configuration-files),
loaded only if the dependency plugin is installed in the current IDE.
Examples
:
- Required plugin dependency:
```xml
<depends>com.example.dependencypluginid</depends>
```
- Required dependency on the IntelliJ IDEA Java Module:
```xml
<depends>com.intellij.modules.java</depends>
```
- Optional plugin dependency:
```xml
<depends optional="true">
com.example.dependencypluginid
</depends>
```
- Required module dependency with additional configuration:
```xml
<depends
config-file="myPluginId-withJava.xml">
com.intellij.modules.java
</depends>
```
- Optional module dependency with additional configuration:
```xml
<depends
optional="true"
config-file="myPluginId-withKotlin.xml">
org.jetbrains.kotlin
</depends>
```
### `incompatible-with`
{#idea-plugin__incompatible-with}
<primary-label ref="2020.2"/>
<tldr>
**Reference:** [Declaring Incompatibility with Module](plugin_compatibility.md#declaring-incompatibility-with-module)
</tldr>
Declares incompatibility with a provided module.
{type="narrow"}
Required
: no; ignored in an [additional config file](#additional-plugin-configuration-files)
Example
:
```xml
<incompatible-with>
com.intellij.modules.appcode.ide
</incompatible-with>
```
### `extensions`
{#idea-plugin__extensions}
<tldr>
**Reference:** [Extensions](plugin_extensions.md)
</tldr>
Defines the plugin extensions.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `defaultExtensionNs` _(optional)_<br/>
Default extensions namespace.
It allows skipping the common prefix in fully qualified extension point names.
Usually, the `com.intellij` namespace is used when the plugin implements IntelliJ Platform extensions.
Children
:
The children elements are registrations of instances
of [extension points](#idea-plugin__extensionPoints__extensionPoint) provided by the IntelliJ Platform or plugins.
<br/>
An extension element name is defined by its extension point via
`name`
or `qualifiedName` attributes.
<br/>
An extension element attributes depend on the extension point implementation, but all extensions support basic attributes:
`id`, `order`,
and `os`.
Examples
:
- Extensions' declaration with a default namespace:
```xml
<extensions defaultExtensionNs="com.intellij">
<applicationService
serviceImplementation="com.example.Service"/>
</extensions>
```
- Extensions' declaration using the fully qualified extension name:
```xml
<extensions>
<com.example.vcs.myExtension
implementation="com.example.MyExtension"/>
</extensions>
```
#### An Extension
{#idea-plugin__extensions__-}
An extension instance registered under [`<extensions>`](#idea-plugin__extensions).
Listed attributes are basic attributes available for all extensions.
The list of actual attributes can be longer depending on the extension point implementation.
{type="narrow"}
Attributes
:
- `id` _(optional)_<br/>
Unique extension identifier.
It allows for referencing an extension in other attributes, for example, in
`order`.
<br/>
To not clash with other plugins defining extensions with the same identifier,
consider prepending the identifier with a prefix related to the plugin [`<id>`](#idea-plugin__id) or
[`<name>`](#idea-plugin__name), for example, `id="com.example.myplugin.myExtension"`.
- `order` _(optional)_<br/>
Allows for ordering the extension relative to other instances of the same extension point.
Supported values:
- `first` - orders the extension as first.
It is not guaranteed that the extension will be the first if multiple extensions are defined as `first`.
- `last` - orders the extension as last.
It is not guaranteed that the extension will be the last if multiple extensions are defined as `last`.
- `before extension_id` - orders the extension before an extension with
the given `id`
- `after extension_id` - orders the extension after an extension with
the given `id`
<br/>
Values can be combined, for example, `order="after extensionY, before extensionX"`.
- `os` _(optional)_<br/>
Allows restricting an extension to a given OS.
Supported values:
- `freebsd`
- `linux`
- `mac`
- `unix`
- `windows`
For example, `os="windows"` registers the extension on Windows only.
### `extensionPoints`
{#idea-plugin__extensionPoints}
<tldr>
**Reference:** [Extension Points](plugin_extension_points.md)
</tldr>
Extension points defined by the plugin.
{type="narrow"}
Required
: no
Children
:
- [`<extensionPoint>`](#idea-plugin__extensionPoints__extensionPoint)
#### `extensionPoint`
{#idea-plugin__extensionPoints__extensionPoint}
<tldr>
**Reference:** [Declaring Extension Points](plugin_extension_points.md#declaring-extension-points)
</tldr>
A single extension point entry of the [`<extensionPoints>`](#idea-plugin__extensionPoints) defined by the plugin.
A single [`<extensionPoints>`](#idea-plugin__extensionPoints) element can contain multiple `<extensionPoint>` elements.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `name` _(`name` or `qualifiedName` is **required**)_<br/>
The extension point name that should be unique in the scope of the plugin, e.g., `myExtension`.
The fully qualified name of the extension point is built at runtime by prepending the value of the `name`
attribute with the plugin [`<id>`](#idea-plugin__id) + `.` prefix.<br/>
Example: when the `name` is `myExtension` and plugin ID is `com.example.myplugin`, the fully qualified name of
the EP will be `com.example.myplugin.myExtension`.<br/>
Only one of the `name` and
`qualifiedName` attributes can be
specified.
- `qualifiedName` _(`name` or `qualifiedName` is **required**)_<br/>
The fully qualified name of the extension point.
It should be unique between different plugins, and it is recommended to include a plugin ID to guarantee uniqueness,
e.g., `com.example.myplugin.myExtension`.<br/>
Only one of the `name` and `qualifiedName` attributes can be specified.
- `interface` _(`interface` or `beanClass` is **required**)_<br/>
The fully qualified name of the interface to be implemented for extending the plugin's functionality.<br/>
Only one of the `interface` and `beanClass` attributes can be specified.
- `beanClass` _(`interface` or `beanClass` is **required**)_<br/>
The fully qualified name of the extension point bean class providing additional information to the plugin.<br/>
The bean class specifies one or several properties annotated with the
[`@Attribute`](%gh-ic%/platform/util/src/com/intellij/util/xmlb/annotations/Attribute.java)
annotation.
Note that bean classes do not follow the JavaBean standard.
Implement
[`PluginAware`](%gh-ic%/platform/extensions/src/com/intellij/openapi/extensions/PluginAware.java)
to obtain information about the plugin providing the actual extension (see [Error Handling](plugin_extension_points.md#error-handling)).<br/>
Only one of the `interface` and `beanClass` attributes can be specified.
- `dynamic` _(optional)_<br/>
Boolean value defining whether the extension point meets the requirements to be
[dynamic](plugin_extension_points.md#dynamic-extension-points),
which is a prerequisite for [dynamic plugins](dynamic_plugins.md).<br/>
Default value: `false`.
- `area` _(optional)_<br/>
The scope in which the [extension](plugin_extensions.md) is
instantiated.
Allowed values:
- `IDEA_APPLICATION` _(default)_
- `IDEA_PROJECT`
- `IDEA_MODULE` (**deprecated**)
**It is strongly recommended not to introduce new project- and module-level extension points.**
If an extension point needs to operate on a `Project` or `Module` instance, declare an application-level extension
point and pass the instance as a method parameter.
Children
:
- [`<with>`](#idea-plugin__extensionPoints__extensionPoint__with)
##### `with`
{#idea-plugin__extensionPoints__extensionPoint__with}
Specifies the required parent type for class names provided in extension point tags or attributes.
A single [`<extensionPoint>`](#idea-plugin__extensionPoints__extensionPoint) element can contain
multiple `<with>` elements.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `tag` _(`tag` or `attribute` is **required**)_<br/>
The name of the tag holding the fully qualified name of the class which parent type will be limited
by the type provided in the `implements` attribute.<br/>
Only one of the `tag` and `attribute` attributes can be specified.
- `attribute` _(`tag` or `attribute` is **required**)_<br/>
The name of the attribute holding the fully qualified name of the class which parent type will be limited
by the type provided in the `implements` attribute.<br/>
Only one of the `tag` and `attribute` attributes can be specified.
- `implements` _(**required**)_<br/>
The fully qualified name of the parent type limiting the type provided in the place specified by
`tag` or
`attribute`.
Example
:
An extension point which restricts the type provided in a `myClass` attribute to be an instance
of `com.example.ParentType`, and the type provided in a `someClass` element to be an instance
of `java.lang.Comparable`:
```xml
<extensionPoint
name="myExtension"
beanClass="com.example.MyExtension">
<with
attribute="myClass"
implements="com.example.ParentType"/>
<with
tag="someClass"
implements="java.lang.Comparable"/>
</extensionPoint>
```
When using the above extension point, an implementation could be registered as follows:
```xml
<myExtension ...
myClass="com.example.MyCustomType">
<someClass>com.example.MyComparable</someClass>
</myExtension>
```
where:
- `com.example.MyCustomType` must be a subtype of `com.example.ParentType`
- `com.example.MyComparable` must be a subtype of `java.lang.Comparable`
### `resource-bundle`
{#idea-plugin__resource-bundle}
A resource bundle to be used with message key attributes in extension declarations and for
[action and group localization](action_system.md#localizing-actions-and-groups).
A single [`<idea-plugin>`](#idea-plugin) element can contain multiple `<resource-bundle>` elements.
{type="narrow"}
Required
: no
Example
:
To load the content of <path>messages/Bundle.properties</path> bundle, declare:
```xml
<resource-bundle>messages.Bundle</resource-bundle>
```
### `actions`
{#idea-plugin__actions}
<tldr>
**Reference:** [Actions](action_system.md)
</tldr>
Defines the plugin actions.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `resource-bundle` _(optional; available since 2020.1)_<br/>
Defines the dedicated actions resource bundle.
See [Localizing Actions and Groups](action_system.md#localizing-actions-and-groups)
for more details.
Children
:
- [`<action>`](#idea-plugin__actions__action)
- [`<group>`](#idea-plugin__actions__group)
- [`<reference>`](#idea-plugin__actions__group__reference)
Example
:
```xml
<actions resource-bundle="messages.ActionsBundle">
<!--
Actions/Groups defined here will use keys
from the ActionsBundle.properties bundle.
-->
</actions>
```
#### `action`
{#idea-plugin__actions__action}
<tldr>
**Reference:** [Registering Actions in plugin.xml](action_system.md#registering-actions-in-pluginxml)
</tldr>
A single action entry of the [`<actions>`](#idea-plugin__actions) implemented by the plugin.
A single `<actions>` element can contain multiple `<action>` elements.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `id` _(optional; defaults to the action class short name if not specified)_<br/>
A unique action identifier.
It is recommended to specify the `id` attribute explicitly.<br/>
The action identifier must be unique across different plugins.
To ensure uniqueness, consider prepending it with the value of the plugin's [`<id>`](#idea-plugin__id).
- `class` _(**required**)_<br/>
The fully qualified name of the action implementation class.
- `text` _(**required** if the action is not
[localized](action_system.md#localizing-actions-and-groups))_<br/>
The default long-version text to be displayed for the action (tooltip for toolbar button or text for menu item).
- `description` _(optional)_<br/>
The text which is displayed in the status bar when the action is focused.
- `icon` _(optional)_<br/>
The icon that is displayed on the toolbar button or next to the action menu item.
See [Working with Icons](icons.md) for more information
about defining and using icons.
- `use-shortcut-of` _(optional)_<br/>
The ID of the action whose keyboard shortcut this action will use.
Children
:
- [`<abbreviation>`](#idea-plugin__actions__action__abbreviation)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<keyboard-shortcut>`](#idea-plugin__actions__action__keyboard-shortcut)
- [`<mouse-shortcut>`](#idea-plugin__actions__action__mouse-shortcut)
- [`<override-text>`](#idea-plugin__actions__action__override-text)
- [`<synonym>`](#idea-plugin__actions__action__synonym)
Examples
:
- Action declaring explicit `text`:
```xml
<action
id="com.example.myframeworksupport.MyAction"
class="com.example.impl.MyAction"
text="Do Action"
description="Do something with the code"
icon="AllIcons.Actions.GC">
<!-- action children elements -->
</action>
```
- Action without the `text` attribute must use the texts from the resource bundle declared with
the [`<resource-bundle>`](#idea-plugin__resource-bundle) element,
or the `resource-bundle` attribute of
the [`<actions>`](#idea-plugin__actions) element:
```xml
<action
id="com.example.myframeworksupport.MyAction"
class="com.example.impl.MyAction"
icon="AllIcons.Actions.GC"/>
```
##### `add-to-group`
{#idea-plugin__actions__action__add-to-group}
Specifies that the action should be added to an existing [`<group>`](#idea-plugin__actions__group).
A single action can be added to multiple groups.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `group-id` _(**required**)_<br/>
Specifies the ID of the [`<group>`](#idea-plugin__actions__group) to which the action is added.
The group must be an implementation of the
[`DefaultActionGroup`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java)
class.
- `anchor` _(optional)_<br/>
Specifies the position of the action relative to other actions.
Allowed values:
- `first` - the action is placed as the first in the group
- `last` _(default)_ - the action is placed as the last in the group
- `before` - the action is placed before the action specified by the `relative-to-action` attribute
- `after` - the action is placed after the action specified by the `relative-to-action` attribute
- `relative-to-action` _(**required** if `anchor` is `before`/`after`)_<br/>
The action before or after which the current action is inserted.
Example
:
```xml
<add-to-group
group-id="ToolsMenu"
anchor="after"
relative-to-action="GenerateJavadoc"/>
```
##### `keyboard-shortcut`
{#idea-plugin__actions__action__keyboard-shortcut}
Specifies the keyboard shortcut for the action.
A single action can have several keyboard shortcuts.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `keymap` _(**required**)_<br/>
Specifies the keymap for which the action shortcut is active.
IDs of the standard keymaps are defined as constants in the
[KeymapManager](%gh-ic%/platform/platform-api/src/com/intellij/openapi/keymap/KeymapManager.java)
class.
- `first-keystroke` _(**required**)_<br/>
Specifies the first keystroke of the action shortcut.
The keystrokes are specified according to the regular Swing rules.
- `second-keystroke` _(optional)_<br/>
Specifies the second keystroke of the action shortcut.
- `remove` _(optional)_<br/>
Removes a shortcut from the specified action.
- `replace-all` _(optional)_<br/>
Removes all keyboard and mouse shortcuts from the specified action before adding
the specified shortcut.
Examples
:
- Add the first and second keystrokes to all keymaps:
```xml
<keyboard-shortcut
keymap="$default"
first-keystroke="control alt G"
second-keystroke="C"/>
```
- Remove the given shortcut from the _Mac OS X_ keymap:
```xml
<keyboard-shortcut
keymap="Mac OS X"
first-keystroke="control alt G"
second-keystroke="C"
remove="true"/>
```
- Remove all existing keyboard and mouse shortcuts and register one for the _Mac OS X 10.5+_ keymap only:
```xml
<keyboard-shortcut
keymap="Mac OS X 10.5+"
first-keystroke="control alt G"
second-keystroke="C"
replace-all="true"/>
```
##### `mouse-shortcut`
{#idea-plugin__actions__action__mouse-shortcut}
Specifies the mouse shortcut for the action.
A single action can have several mouse shortcuts.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `keymap` _(**required**)_<br/>
Specifies the keymap for which the action shortcut is active.
IDs of the standard keymaps are defined as constants in the
[KeymapManager](%gh-ic%/platform/platform-api/src/com/intellij/openapi/keymap/KeymapManager.java)
class.
- `keystroke` _(**required**)_<br/>
Specifies the clicks and modifiers for the action.
It is defined as a sequence of words separated by spaces:
- modifier keys: `shift`, `control`, `meta`, `alt`, `altGraph`
- mouse buttons: `button1`, `button2`, `button3`
- button double-click: `doubleClick`
- `remove` _(optional)_<br/>
Removes a shortcut from the specified action.
- `replace-all` _(optional)_<br/>
Removes all keyboard and mouse shortcuts from the specified action before adding
the specified shortcut.
Examples
:
- Add the shortcut to all keymaps:
```xml
<mouse-shortcut
keymap="$default"
keystroke="control button3 doubleClick"/>
```
- Remove the given shortcut from the _Mac OS X_ keymap:
```xml
<mouse-shortcut
keymap="Mac OS X"
keystroke="control button3 doubleClick"
remove="true"/>
```
- Remove all existing keyboard and mouse shortcuts and register one for the _Mac OS X 10.5+_ keymap only:
```xml
<mouse-shortcut
keymap="Mac OS X 10.5+"
keystroke="control button3 doubleClick"
replace-all="true"/>
```
##### `override-text`
{#idea-plugin__actions__action__override-text}
<primary-label ref="2020.1"/>
Defines an alternate menu action or group text depending on context: menu location, toolbar, and other.
{type="narrow"}
Supported
:
2020.1+ for actions<br/>
2020.3+ for groups
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `place` _(**required**)_<br/>
Declares where the alternate text should be used.
- `text` _(`text` or `use-text-of-place` is **required**)_<br/>
Defines the text to be displayed for the action.
- `use-text-of-place` _(`text` or `use-text-of-place` is **required**)_<br/>
Defines a location whose text should be displayed for this action.
Examples
:
- Explicitly overridden text:
```xml
<!--
Default action text:
"Garbage Collector: Collect _Garbage"
-->
<action
class="com.example.CollectGarbage"
text="Garbage Collector: Collect _Garbage"
...>
<!--
Alternate text displayed anywhere in the main menu:
"Collect _Garbage"
-->
<override-text
place="MainMenu"
text="Collect _Garbage"/>
</action>
```
- Overridden text reused from the `MainMenu` place:
```xml
<override-text
place="EditorPopup"
use-text-of-place="MainMenu"/>
```
##### `synonym`
{#idea-plugin__actions__action__synonym}
<primary-label ref="2020.3"/>
Defines an alternative text for searching the action in <ui-path>Help | Find Action...</ui-path> or
<ui-path>Navigate | Search Everywhere</ui-path> popups.
A single action can have multiple synonyms.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `key` _(`key` or `text` is **required**)_<br/>
The key of the synonym text provided in a [message bundle](action_system.md#localizing-actions-and-groups).
- `text` _(`key` or `text` is **required**)_<br/>
The synonym text.
Example
:
```xml
<!-- Default action text: Delete Element -->
<synonym key="my.action.text.remove.element"/>
<synonym text="Remove Element"/>
```
##### `abbreviation`
{#idea-plugin__actions__action__abbreviation}
Defines an abbreviation for searching the action in <ui-path>Help | Find Action...</ui-path> or
<ui-path>Navigate | Search Everywhere</ui-path> popups.
A single action can have multiple abbreviations.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `value` _(**required**)_<br/>
The abbreviation value.
Example
:
```xml
<!-- Default action text: UI Inspector -->
<abbreviation value="uii"/>
```
#### `group`
{#idea-plugin__actions__group}
<tldr>
**Reference:** [Grouping Actions](action_system.md#grouping-actions)
</tldr>
Defines an action group.
The [`<action>`](#idea-plugin__actions__action), `<group>` and [`<separator>`](#idea-plugin__actions__group__separator) elements defined inside the group are automatically included in it.
The `<group>` elements can be nested.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `id` _(**required**)_<br/>
A unique group identifier.
The group identifier must be unique between different plugins.
Thus, it is recommended to prepend it with the value of the plugin [`<id>`](#idea-plugin__id).
- `class` _(optional)_<br/>
The fully qualified name of the group implementation class.
If not specified,
[`DefaultActionGroup`](%gh-ic%/platform/platform-api/src/com/intellij/openapi/actionSystem/DefaultActionGroup.java)
is used.
- `text` _(**required** if the `popup` is `true` and the group is not
[localized](action_system.md#localizing-actions-and-groups))_<br/>
The default long-version text to be displayed for the group (text for the menu item showing the submenu).
- `description` _(optional)_<br/>
The text which is displayed in the status bar when the group is focused.
- `icon` _(optional)_<br/>
The icon that is displayed next to the group menu item.
See [Working with Icons](icons.md) for more information about defining
and using icons.
- `popup` _(optional)_<br/>
Boolean flag defining whether the group items are presented in the submenu popup.
- `true` - group actions are placed in a submenu
- `false` _(default)_ - actions are displayed as a section of the same menu delimited by separators
- `compact` _(optional)_<br/>
Boolean flag defining whether disabled actions within this group are hidden.
If the value is:
- `true` - disabled actions are hidden
- `false` _(default)_ - disabled actions are visible
- `use-shortcut-of` _(optional)_<br/>
The ID of the action whose keyboard shortcut this group will use.
- `searchable` _(optional; available since 2020.3)_<br/>
Boolean flag defining whether the group is displayed in <ui-path>Help&nbsp;|&nbsp;Find Action...</ui-path>
or <ui-path>Navigate | Search Everywhere</ui-path> popups.<br/>
Default value: `true`.
Children
:
- [`<action>`](#idea-plugin__actions__action)
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
- [`<group>`](#idea-plugin__actions__group)
- [`<override-text>`](#idea-plugin__actions__action__override-text)
- [`<reference>`](#idea-plugin__actions__group__reference)
- [`<separator>`](#idea-plugin__actions__group__separator)
Examples
:
- Group declaring explicit `text`:
```xml
<group
id="com.example.myframeworksupport.MyGroup"
popup="true"
text="My Tools">
<!-- group children elements -->
</group>
```
- A popup group without the `text` attribute must use the texts from the resource bundle declared with
the [`<resource-bundle>`](#idea-plugin__resource-bundle) element,
or the `resource-bundle` attribute
of the [`<actions>`](#idea-plugin__actions) element:
```xml
<group
id="com.example.myframeworksupport.MyGroup"
popup="true"/>
```
- A group with custom implementation and icon:
```xml
<group
id="com.example.myframeworksupport.MyGroup"
class="com.example.impl.MyGroup"
icon="AllIcons.Actions.GC"/>
```
##### `reference`
{#idea-plugin__actions__group__reference}
Allows adding an existing action to the group.
The element can be used directly under the [`<actions>`](#idea-plugin__actions) element, or in
the [`<group>`](#idea-plugin__actions__group) element.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `ref` _(**required**)_<br/>
The ID of the action to add to a group.
- `id` _(optional)_<br/>
**_Deprecated_**: Use `ref` instead.
The ID of the action to add to a group.
Children
:
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
Examples
:
- An action reference in a group:
```xml
<group ...>
<reference ref="EditorCopy"/>
</group>
```
- An action reference registered directly in the [`<actions>`](#idea-plugin__actions) element:
```xml
<actions>
<reference ref="com.example.MyAction">
<add-to-group group-id="ToolsMenu"/>
</reference>
</group>
```
##### `separator`
{#idea-plugin__actions__group__separator}
Defines a separator between actions in a group.
The element can be used directly under the [`<actions>`](#idea-plugin__actions) element with the child
[`<add-to-group>`](#idea-plugin__actions__action__add-to-group) element defining the target group, or in the
[`<group>`](#idea-plugin__actions__group) element.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `text` _(optional)_<br/>
Text displayed on the separator.
Separator text is displayed only in specific contexts such as popup menus, toolbars, etc.
- `key` _(optional)_<br/>
The [message key](action_system.md#localizing-actions-and-groups) for the separator text.
The message bundle for use should be registered via the `resource-bundle` attribute of
the [`<actions>`](#idea-plugin__actions) element.
The attribute is ignored if the `text` attribute is specified.
Children
:
- [`<add-to-group>`](#idea-plugin__actions__action__add-to-group)
Examples
:
- A separator dividing two actions in a group:
```xml
<group ...>
<action .../>
<separator/>
<action .../>
</group>
```
- A separator registered directly in the [`<actions>`](#idea-plugin__actions) element:
```xml
<actions>
<separator>
<add-to-group
group-id="com.example.MyGroup"
anchor="first"/>
</separator>
</group>
```
- A separator with a defined text:
```xml
<separator text="Group By"/>
```
- A separator with a text defined by a message key:
```xml
<separator key="message.key"/>
```
### `applicationListeners`
{#idea-plugin__applicationListeners}
<primary-label ref="2019.3"/>
<tldr>
**Reference:** [Defining Application-Level Listeners](plugin_listeners.md#defining-application-level-listeners)
</tldr>
Defines the application-level listeners.
{type="narrow"}
Required
: no
Children
:
- [`<listener>`](#idea-plugin__applicationListeners__listener)
#### `listener`
{#idea-plugin__applicationListeners__listener}
<primary-label ref="2019.3"/>
<tldr>
**Reference:** [Listeners](plugin_listeners.md)
</tldr>
Defines a single application or project-level listener.
A single [`<applicationListeners>`](#idea-plugin__applicationListeners) or
[`<projectListeners>`](#idea-plugin__projectListeners) can contain multiple `<listener>` elements.
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `topic` _(**required**)_<br/>
The fully qualified name of the listener interface corresponding to the type of received events.
- `class` _(**required**)_<br/>
The fully qualified name of the class implementing the listener interface that receives and handles the events.
- `os` _(optional; available since 2020.1)_<br/>
Restricts listener instantiation to a specific operating system.
Allowed values:
- `freebsd`
- `mac`
- `linux`
- `unix`
- `windows`
- `activeInTestMode` _(optional)_<br/>
Boolean flag defining whether the listener should be instantiated in test mode.<br/>
Default value: `true`.
- `activeInHeadlessMode` _(optional)_<br/>
Boolean flag defining whether the listener should be instantiated in headless mode.<br/>
Default value: `true`.
Example
:
```xml
<listener
topic="com.intellij.ide.AppLifecycleListener"
class="com.example.MyListener"
os="mac"
activeInTestMode="false"/>
```
### `projectListeners`
{#idea-plugin__projectListeners}
<primary-label ref="2019.3"/>
<tldr>
**Reference:** [Defining Project-Level Listeners](plugin_listeners.md#defining-project-level-listeners)
</tldr>
Defines the project-level listeners.
{type="narrow"}
Required
: no
Children
:
- [`<listener>`](#idea-plugin__applicationListeners__listener)
### `xi:include`
{#idea-plugin__xi:include}
Allows including content of another plugin descriptor in this descriptor with
[XInclude](http://www.w3.org/2001/XInclude) standard.
{type="narrow"}
Namespace
:
`xi="http://www.w3.org/2001/XInclude"`
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `href` _(optional)_<br/>
Path of the plugin descriptor file to include.
- `xpointer` _(optional)_<br/>
**_Deprecated since 2021.2_**: The `xpointer` attribute must be `xpointer(/idea-plugin/*)` or not defined.
Elements pointer to include.<br/>
Default value: `xpointer(/idea-plugin/*)`.
Children
:
- [`<xi:fallback>`](#idea-plugin__xi:include__xi:fallback)
Example
:
Given a plugin descriptor:
```xml
<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
<id>com.example.myplugin</id>
<name>Example</name>
<xi:include href="/META-INF/another-plugin.xml"/>
...
</idea-plugin>
```
and <path>/META-INF/another-plugin.xml</path>:
```xml
<idea-plugin>
<extensions>...</extensions>
<actions>...</actions>
</idea-plugin>
```
The effective plugin descriptor loaded to memory will contain the following elements:
```xml
<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
<id>com.example.myplugin</id>
<name>Example</name>
<extensions>...</extensions>
<actions>...</actions>
...
</idea-plugin>
```
#### `xi:fallback`
{#idea-plugin__xi:include__xi:fallback}
Indicates that including the specified file is optional.
If the file referenced in `href` is not found and the `xi:fallback`
element
is missing, the plugin will fail to load.
{type="narrow"}
Namespace
:
`xi="http://www.w3.org/2001/XInclude"`
{type="narrow"}
Required
: no
Example
:
```xml
<idea-plugin xmlns:xi="http://www.w3.org/2001/XInclude">
...
<xi:include href="/META-INF/optional-plugin.xml">
<xi:fallback/>
</xi:include>
...
</idea-plugin>
```
### `application-components`
{#idea-plugin__application-components collapsible="true" initial-collapse-state="collapsed"}
<primary-label ref="Deprecated"/>
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
Defines a list of application [components](plugin_components.md).
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
Children
:
- [`<component>`](#idea-plugin__application-components__component) ![Deprecated][deprecated]
#### `component`
{#idea-plugin__application-components__component}
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
Defines a single application, project, or
module [component](plugin_components.md).
A single [`<application-components>`](#idea-plugin__application-components),
[`<project-components>`](#idea-plugin__project-components), or [`<module-components>`](#idea-plugin__module-components)
element can contain multiple `<component>` elements.
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
Children
:
- [`<headless-implementation-class>`](#idea-plugin__application-components__component__headless-implementation-class) ![Deprecated][deprecated]
- [`<implementation-class>`](#idea-plugin__application-components__component__implementation-class) ![Deprecated][deprecated]
- [`<interface-class>`](#idea-plugin__application-components__component__interface-class) ![Deprecated][deprecated]
- [`<loadForDefaultProject>`](#idea-plugin__application-components__component__loadForDefaultProject) ![Deprecated][deprecated]
- [`<option>`](#idea-plugin__application-components__component__option) ![Deprecated][deprecated]
- [`<skipForDefaultProject>`](#idea-plugin__application-components__component__skipForDefaultProject) ![Deprecated][deprecated]
##### `implementation-class`
{#idea-plugin__application-components__component__implementation-class}
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
The fully qualified name of the component implementation class.
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: **yes**
##### `interface-class`
{#idea-plugin__application-components__component__interface-class}
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
The fully qualified name of the component interface class. If not specified, the interface will be the same as
defined by [`<implementation-class>`](#idea-plugin__application-components__component__interface-class) element.
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
##### `headless-implementation-class`
{#idea-plugin__application-components__component__headless-implementation-class}
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
The fully qualified name of the component implementation class to be used when the IDE runs in headless mode.
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
##### `option`
{#idea-plugin__application-components__component__option}
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
Allows to provide additional component options.
A single [`<component>`](#idea-plugin__application-components__component) element can contain multiple `<option>` elements.
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
{type="narrow"}
Attributes
:
- `name` _(**required**)_<br/>
Option name.
- `value` _(**required**)_<br/>
Option value.
##### `loadForDefaultProject`
{#idea-plugin__application-components__component__loadForDefaultProject}
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
If present, the component is instantiated also for the default project. It takes effect only when used inside
[`<project-components>`](#idea-plugin__project-components) element.
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
##### `skipForDefaultProject`
{#idea-plugin__application-components__component__skipForDefaultProject}
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
In the past, if present, the component was not loaded for the default project.
Currently, project components aren't loaded in the default project by default, so this element has no effect.
Use [`<loadForDefaultProject>`](#idea-plugin__application-components__component__loadForDefaultProject)
if it is required to load a component in the default project.
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
### `project-components`
{#idea-plugin__project-components collapsible="true" initial-collapse-state="collapsed"}
<primary-label ref="Deprecated"/>
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
Defines a list of project [components](plugin_components.md).
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
Children
:
- [`<component>`](#idea-plugin__application-components__component) ![Deprecated][deprecated]
### `module-components`
{#idea-plugin__module-components collapsible="true" initial-collapse-state="collapsed"}
<primary-label ref="Deprecated"/>
> Do not use it in new plugins.
> See [Components](plugin_components.md) for the migration guide.
>
{style="warning"}
Defines a list of module [components](plugin_components.md).
{type="narrow"}
Deprecated
:
since 2020.1
{type="narrow"}
Required
: no
Children
:
- [`<component>`](#idea-plugin__application-components__component) ![Deprecated][deprecated]
[//]: # (GENERATED CONTENT END)
[deprecated]: https://img.shields.io/badge/-Deprecated-7f7f7f?style=flat-square
[internal]: https://img.shields.io/badge/-Internal-8b8b8b?style=flat-square