with one click
registry
Guidelines for using the IntelliJ Registry API. Use when working with registry keys or feature flags.
Menu
Guidelines for using the IntelliJ Registry API. Use when working with registry keys or feature flags.
How to manage module dependencies in IntelliJ codebase. Use when adding or modifying module dependencies in iml files.
How to manage module dependencies in IntelliJ codebase. Use when adding or modifying module dependencies in iml files.
Pluginize a Product DSL module set by hand-writing a wrapper plugin module next to its feature modules. Use when promoting modules out of an aggregate module set (e.g. `essential`, `ide.common`) into a bundled plugin so products can include or omit them through normal plugin wiring, when updating bundled plugin registration for such a wrapper, or when fixing tests whose plugin loading logs show a missing wrapper plugin for a former module set.
Pluginize a Product DSL module set by hand-writing a wrapper plugin module next to its feature modules. Use when promoting modules out of an aggregate module set (e.g. `essential`, `ide.common`) into a bundled plugin so products can include or omit them through normal plugin wiring, when updating bundled plugin registration for such a wrapper, or when fixing tests whose plugin loading logs show a missing wrapper plugin for a former module set.
Comprehensive testing reference for running tests in IntelliJ codebase via tests.cmd. Use when running, debugging, or troubleshooting test execution.
Guidelines for implementing IntelliJ actions (AnAction). Use those rules when you need to create or change an action in the intellij platform.
| name | registry |
| description | Guidelines for using the IntelliJ Registry API. Use when working with registry keys or feature flags. |
Guidelines for using the IntelliJ Registry API.
plugin.xml or registry.propertiesAlways prefer declaring in plugin.xml (not registry.properties):
<registryKey key="my.feature.enabled"
defaultValue="true"
description="Enables my feature"
restartRequired="false"/>
To override in a dependent plugin:
<registryKey key="my.feature.enabled"
defaultValue="false"
description="Enables my feature"
restartRequired="false"
overrides="true"/>
In suspending code:
val isEnabled = RegistryManager.getInstanceAsync().get("my.key")
In blocking code:
val isEnabled = RegistryManager.getInstance().get("my.key")
Access via Registry.get() or Registry.is() is effectively deprecated, since it might cause problems during early IDE startup.
Always prefer the RegistryManager when possible.
When code may run before COMPONENTS_LOADED state (e.g., during EULA dialog, splash screen),
you MUST use Registry.is(key, defaultValue) with an explicit default:
// Required for early startup code
Registry.`is`("my.key", false) // default must match registry.properties
How to find the default value:
community/platform/util/resources/misc/registry.properties<registryKey> declaration in plugin.xmlWhy: Registry.is(key) without default throws an exception if called before
LoadingState.COMPONENTS_LOADED. The safe overload returns the provided default
when Registry is not yet initialized.
For testing or run configurations:
-Dmy.registry.key=value
Use @RegistryKey annotation instead of Registry.get().setValue():
@Test
@RegistryKey(key = "my.registry.key", value = "true")
fun testWithRegistryEnabled() { ... }
See writing-tests.md for more test patterns.