Attribute
Value
|Implementation
Basis
| |---------------------|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------| | `instance` | **yes** [(1)](#attribute-notes) | FQN of implementation. See [](#the-configurable-interface) for more information. | `Configurable` | | `provider` | **yes** [(1)](#attribute-notes) | FQN of implementation. See [](#the-configurableprovider-class) for more information. | `ConfigurableProvider` | | `nonDefaultProject` | **yes** |Applicable _only_ to the `com.intellij.projectConfigurable` (project Settings) EP.
`true` = show Settings for all projects _except_ the [default project](https://www.jetbrains.com/help/idea/configure-project-settings.html#new-default-settings).
`false` = show Settings for all projects.
| `Configurable` | | `displayName` | **yes** [(2)](#attribute-notes) |The non-localized Settings name visible to users, which is needed for the Settings dialog left-side menu.
For a _localized_ visible name omit `displayName` and use the `key` and `bundle` attributes.
|`Configurable`
`ConfigurableProvider`
| | `key` and `bundle` | **yes** [(2)](#attribute-notes) |The [localization](internationalization.md#message-bundles) key and bundle for the Settings name visible to users.
For non-localized visible names omit `key` and `bundle` and use `displayName`.
|`Configurable`
`ConfigurableProvider`
| | `id` | **yes** |The unique, FQN identifier for this implementation.
The FQN should be based on the plugin `id` to ensure uniqueness.
|`Configurable`
`ConfigurableProvider`
| | `parentId` | **yes** |This attribute is used to create a hierarchy of Settings. This component is declared one of the specified `parentId` component's children. Typically used for placing a Settings panel within the Settings Dialog menu. Acceptable values for `parentId` are given in [](#values-for-parent-id-attribute).
`groupId` is deprecated. [(3)](#attribute-notes)
|`Configurable`
`ConfigurableProvider`
| | `groupWeight` | no |Specifies the weight (stacking order) of this component within the group of a parent configurable component. The default weight is 0, meaning lowest in the order.
If one child in a group or a parent component has non-zero weight, all children will be sorted descending by their weight. If the weights are equal, the components will be sorted ascending by their display name.
|`Configurable`
`ConfigurableProvider`
| | `dynamic` | no |This component's children are dynamically calculated by calling the `getConfigurables()` method.
Not recommended because it requires loading additional classes while building a Settings tree. If possible, use XML attributes instead.
| `Configurable.Composite` | | `childrenEPName` | no | Specifies the FQN name of the Extension Point that will be used to calculate the children of this component. | `Configurable` | ##### Attribute Notes (1) Either `instance` or `provider` must be specified depending on the implementation. (2) Either `displayName` or `key` and `bundle` must be specified depending on whether the displayed Settings name is localized. (3) If both `groupId` and `parentId` are specified, a warning is logged. Also, see _default_ entry in [](#values-for-parent-id-attribute). #### Values for Parent ID Attribute The table below shows all`other`
**Do not use**
| _default_ | If neither `parentId` nor `groupId` attribute is set, the component is added to the `other` Settings group. This is undesirable; see `other` group description. | |Catch-all
**Deprecated**
| `other` | The IntelliJ Platform no longer uses this group. Do not use this group. Use the `tools` group instead. | |Project-related Settings
**Deprecated**
| `project` | The IntelliJ Platform no longer uses this group. It was intended to store some project-related settings. Do not use this group. | ## Implementations for Settings Extension Points Implementations for `com.intellij.projectConfigurable` EP and `com.intellij.applicationConfigurable` EP can have one of two bases: * The [`Configurable`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/options/Configurable.java) interface, which provides a named configurable component with a Swing form. Most Settings providers are based on the `Configurable` interface or one of its sub- or supertypes. * The [`ConfigurableProvider`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/options/ConfigurableProvider.java) class, which can hide a configurable component from the Settings dialog based on runtime conditions. ### The `Configurable` Interface Many Settings in the `intellij-community` code base implement `Configurable` or one of its subtypes, such as [`SearchableConfigurable`](%gh-ic%/platform/ide-core/src/com/intellij/openapi/options/SearchableConfigurable.java). Readers are encouraged to review the Javadoc comments for `Configurable`. #### Constructors Implementations must meet several requirements for constructors. * Application Settings implementations, declared using the [`applicationConfigurable` EP](#declaring-application-settings), must have a default constructor with no arguments. * Project Settings implementations, declared using the [`projectConfigurable` EP](#declaring-project-settings), must declare a constructor with a single argument of type [`Project`](%gh-ic%/platform/core-api/src/com/intellij/openapi/project/Project.java). * Beginning in 2020.2, constructor injection (other than for `Project`) is not allowed. For a `Configurable` implementation correctly declared using an EP, the implementation's constructor is not invoked by the IntelliJ Platform until a user chooses the corresponding Settings `displayName` in the Settings Dialog menu. > The IntelliJ Platform may instantiate a `Configurable` implementation on a background thread, so creating Swing components in a constructor can degrade UI responsiveness. > {style="warning"} #### IntelliJ Platform Interactions with `Configurable` The instantiation of a generic `Configurable` implementation is documented in the interface file. A few high-level points are reviewed here: * The `Configurable.reset()` method is invoked immediately after `Configurable.createComponent()`. Initialization of Setting values in the constructor or `createComponent()` is unnecessary. * See the [](#constructors) section for information about when a Settings object is instantiated. * Once instantiated, a `Configurable` instance's lifetime continues regardless of whether the implementation's Settings are changed, or the user chooses a different entry on the Settings Dialog menu. * A `Configurable` instance's lifetime ends when