PluginManager now has all methods as internals

I use this method specific: PluginManager.getInstance().findEnabledPlugin() and now findEnabledPlugin is an internal method.

I use this method to get the current version of my own plugin installed, how could I do that now? do you have any other api to get information about my own plugin programatically?

You will find this discussion interesting: PluginManagerCore.getPlugin is now Internal

Especially Joachim’s solution PluginManagerCore.getPlugin is now Internal - #9 by jansorg → I’m now using this:

if (this.getClass().getClassLoader() instanceof PluginAwareClassLoader c) {
    return c.getPluginDescriptor().getVersion();
}

and just in case, if it doesn’t work, I extract the plugin version from the /META-INF/plugin.xml file (getResourceAsStream("/META-INF/plugin.xml"), etc.).

Please note future IDEs will offer PluginDetailsService. If my understanding is correct, this is the replacement API. Unfortunately, this is a new API (2026.2?).

Yes, you are right, please use PluginDetailsService in 2026.2, also PluginUpdateCheckService is public API and we will have another API for enable/disable suggestions that will require user confirmation.

We are going to approve existing usages in plugins for intermediate period while no new usages will be allowed.

@yuriy.artamonov I trying to migrate to PluginDetailsService but one of my plugins need the installation path of the plugin and this new service don’t have this information. could you add it to the api?

Use PluginPathManager.getPluginResource(pluginClass, resourceName) it exists for a long time

@yuriy.artamonov

Currently, this is possible using APIs such as , but I understand that some of these APIs are either internal, discouraged, or not ideal for long-term compatibility. PluginDetailService provides plugin metadata, but it does not expose the plugin installation path. also does not seem to provide a reliable way to retrieve the installation directory for a specific plugin. PluginManagerPluginPathManager

Use Case

I have code similar to the following:

val pluginId = PluginId.getId(PLUGIN_ID)
val plugin = PluginManager.getInstance().findEnabledPlugin(pluginId)

val destinationPath = plugin?.pluginPath?.resolve("lib") ?: return

val gdsl = destinationPath.resolve("standardDsls").resolve("test.gdsl")

if (!Files.exists(gdsl)) {
    Notifications.installGDSLNotification(project)
}

The goal is to access the plugin’s lib directory and check whether a standardDsls directory exists there. If it does not exist, the plugin should create it and copy a bundled file into that location. .gdsl

Problem

PluginDetailService does not expose the plugin installation directory, and does not appear to provide this information either. PluginPathManager

There are possible workarounds, but they are not clean. For example, one workaround is to include a resource inside the plugin and then locate that resource at runtime, walking up the parent directories until reaching the plugin’s lib directory. However, this approach feels fragile and implementation-dependent.

Since there used to be an API that allowed access to this information, it would be very useful to have a supported replacement.

Did you try PluginPathManager.getPluginResource as I suggested? It provides you with File for a resourceName inside plugin install dir. It is public API