# PluginManager now has all methods as internals

**URL:** <https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371>\
**Category:** IntelliJ Platform\
**Created:** [May 29, 2026, 2:55pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371 "2026-05-29T14:55:08Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![dalgarins](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/dalgarins/32/142_2.png) [@dalgarins](https://platform.jetbrains.com/u/dalgarins)\
**Post date:** [May 29, 2026, 2:55pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/1 "2026-05-29T14:55:08Z")

</div>

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?

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [May 29, 2026, 3:13pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/2 "2026-05-29T15:13:19Z")

</div>

You will find this discussion interesting: [PluginManagerCore.getPlugin is now Internal](https://platform.jetbrains.com/t/pluginmanagercore-getplugin-is-now-internal/4272)

Especially Joachim’s solution [PluginManagerCore.getPlugin is now Internal - #9 by jansorg](https://platform.jetbrains.com/t/pluginmanagercore-getplugin-is-now-internal/4272/9) → I’m now using this:

```auto
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.).

---

<div class="post-metadata">

**Author:** ![jonathanlermitage.1](https://avatars.discourse-cdn.com/v4/letter/j/e480ec/32.png) [@jonathanlermitage.1](https://platform.jetbrains.com/u/jonathanlermitage.1)\
**Post date:** [May 29, 2026, 3:18pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/3 "2026-05-29T15:18:53Z")

</div>

Please note future IDEs will offer [PluginDetailsService](https://github.com/JetBrains/intellij-community/blob/master/platform/core-impl/src/com/intellij/ide/plugins/PluginDetails.kt). If my understanding is correct, this is the replacement API. Unfortunately, this is a new API (2026.2?).

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [May 29, 2026, 5:40pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/4 "2026-05-29T17:40:50Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![dalgarins](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/dalgarins/32/142_2.png) [@dalgarins](https://platform.jetbrains.com/u/dalgarins)\
**Post date:** [June 1, 2026, 5:09pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/5 "2026-06-01T17:09:39Z")

</div>

@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?

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [June 1, 2026, 7:52pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/6 "2026-06-01T19:52:18Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![dalgarins](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/dalgarins/32/142_2.png) [@dalgarins](https://platform.jetbrains.com/u/dalgarins)\
**Post date:** [June 1, 2026, 8:42pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/7 "2026-06-01T20:42:11Z")

</div>

@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:

```kotlin
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.

---

<div class="post-metadata">

**Author:** ![yuriy.artamonov](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/yuriy.artamonov/32/48_2.png) [@yuriy.artamonov](https://platform.jetbrains.com/u/yuriy.artamonov)\
**Post date:** [June 1, 2026, 9:29pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/8 "2026-06-01T21:29:14Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![jansorg](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/jansorg/32/52_2.png) [@jansorg](https://platform.jetbrains.com/u/jansorg)\
**Post date:** [June 19, 2026, 10:20am UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/9 "2026-06-19T10:20:51Z")

</div>

A problem I found with the classloader is that it’s unavailable in unit test mode, because unit tests use a different type of classloaders.

This complicates accessing metadata of the own plugin because \<2026.2 and \>=2026.2 don’t share any public API to access metadata.

---

<div class="post-metadata">

**Author:** ![dalgarins](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/dalgarins/32/142_2.png) [@dalgarins](https://platform.jetbrains.com/u/dalgarins)\
**Post date:** [June 19, 2026, 1:39pm UTC](https://platform.jetbrains.com/t/pluginmanager-now-has-all-methods-as-internals/4371/10 "2026-06-19T13:39:23Z")

</div>

In my case I had to release a different version only for API 262.
