Starting with the 2020.1 release, installing, updating, and uninstalling plugins without restarting the IDE is available in the IntelliJ Platform.
During plugin development, Auto-Reload also allows code changes to take effect immediately in the sandbox IDE instance. To test whether dynamic installation works correctly, verify installing local build distribution succeeds (see Troubleshooting).
Please note that any unloading problems in a production environment will simply ask the user to restart the IDE.
For a plugin to support this, all restrictions listed below must be met. To verify a plugin locally, invoke Plugin DevKit | Plugin descriptor | Plugin.xml dynamic plugin verification inspection inspection on all plugin descriptor files.and run
No Use of Components
No Components must be used; existing ones must be migrated to services, extensions, or listeners.
Action Group Requires ID
<group> elements must declare a unique
Use Only Dynamic Extensions
Whether defined in the platform itself (Extension Point and Listener List) or coming from other plugins, all used extension points must be marked explicitly as dynamic (see next paragraph).
Some deprecated extension points (e.g.,
com.intellij.configurationProducer) are intentionally non-dynamic, and their usage should be migrated to the corresponding replacement.
Mark Extension Points as Dynamic
If a plugin defines its own custom extension points, they must adhere to specific usage rules and then be declared ready for dynamic use explicitly.
Configurables Depending on Extension Points
Configurable which depends on dynamic extension points must implement
No Use of Service Overrides
Application, project, and module services declared with
overrides="true" are not allowed.
Loading/Unloading a plugin clears all cached values created using
Do not Store PSI
Do not store references to PSI elements in objects which can survive plugin loading or unloading; use
Do not Use FileType/Language as Map Key
FileType.getName() (use inspection Plugin DevKit | Code | Map key may leak).
Plugin Load/Unload Events
This can be used to e.g., cancel long-running activities or disallow unload due to ongoing processes.
When a plugin is being uninstalled or updated, the IDE waits synchronously for plugin unload and asks for restart if the unloading failed.
If it fails:
Try a newer version of the IDE (eventually latest available from Early Access Program), in some cases platform bugs might be an issue. See this list of known platform issues related to handling dynamic plugins.
Try in a fresh and new configuration (e.g., clean the sandbox or use a different configuration directory).
All events are tracked under
com.intellij.ide.plugins.DynamicPlugins category in IDE log file. If a plugin fails to reload, the log will contain a cause as to why.
Finding leaks preventing unload
Set Registry key
true(Go to and type
Trigger the plugin reload.
Open the .hprof memory snapshot generated in user home directory on plugin unload, look for the plugin ID string. IntelliJ Ultimate can open memory snapshots directly.
PluginClassLoaderreferencing the plugin ID string
Look at references to the
Every one of them is a memory leak (or part of a memory leak) that needs to be resolved.
When you've completed step 1 and 2, the log will contain more information about the memory leak, for instance the following shows a chain of field references that is keeping the class loader in memory.