registry
GitHub提供 IntelliJ Registry API 的使用指南,涵盖注册表键的定义、访问方式、早期启动安全处理及测试配置。
Trigger Scenarios
Install
npx skills add DetachHead/rebased --skill registry -g -y
SKILL.md
Frontmatter
{
"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"/>
Accessing the Registry
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.
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.
Version History
- 1f8708d Current 2026-08-16 15:38


