name: registry description: Guidelines for using the IntelliJ Registry API. Use when working with registry keys or feature flags.
Working with Registry
Guidelines for using the IntelliJ Registry API.
Documentation
- Defining Registry Keys: Registry.md - How to declare keys in
plugin.xmlorregistry.properties - Cloud Registry: Cloud Registry and Notifications.md - Remote registry updates for JetBrains IDEs
Quick Reference
Defining a Registry Key
Always 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"/>
Using Registry.is() - Avoid Redundant Defaults
Don't use default value when application is fully loaded - the default comes from registry extension:
// Bad - redundant default
Registry.`is`("my.key", false)
// Good - default from extension
Registry.`is`("my.key")
Early Startup: Registry.is() with Default Value
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:
- Search in
community/platform/util/resources/misc/registry.properties - Or check the
<registryKey>declaration inplugin.xml
Why: 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.
Override via Command Line
For testing or run configurations:
-Dmy.registry.key=value
Registry in Tests
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.