# ApiStatus.NonExtendable and usage policies

**URL:** <https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692>\
**Category:** IntelliJ Platform\
**Created:** [July 19, 2026, 10:18am UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692 "2026-07-19T10:18:45Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![joshtau](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/joshtau/32/1840_2.png) [@joshtau](https://platform.jetbrains.com/u/joshtau)\
**Post date:** [July 19, 2026, 10:18am UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692/1 "2026-07-19T10:18:45Z")

</div>

> [@PluginManagerCore.getPlugin is now Internal](https://platform.jetbrains.com/t/pluginmanagercore-getplugin-is-now-internal/4272/21):
>
> No, it would not until number of usages changes / new files with errors appear, we will still approve it. You may have noticed Ignored Internal API usages group in your plugin check results

We were told that using an Internal API was okay, then suddenly JetBrains has decided (on a Friday) that your (opensource, btw, with 12 years of history) plugin uses `ApiStatus.NonExtendable`, and they’ve deprecated your plugin, without warning, and it was the same person who you spoke to before about it – oh, and the fucking kicker? It’s still private.

So I have one person here telling me that it’s fine to use certain APIs, then another person telling me it’s fine, until it’s not. And without even a way forward.

JetBrains can’t even manage/scan their own plugins, WTF does the community have of these arbitrary rules.

We need to support multiple IDE versions.

I don’t understand how JetBrains just thinks we’re either:

1. Going to maintain multiple versions - which wouldn’t even work, AS THE APIS ARE STILL INTERNAL/NONEXTENDABLE.
2. Just tell users to upgrade/go fly a kite.

I spend more time actually battling with Jetbrains nonsense at this point than maintaining the plugin, honestly.

---

<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:** [July 19, 2026, 11:55am UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692/2 "2026-07-19T11:55:20Z")

</div>

Hi, let’s make this discussion more constructive and get understanding what is going on and where.

First of all, we do not just introduce Internal API marks without a reason. Often it is caused by real security and safety threats. In order to not break plugins right away, we at the same time introduce limitations gradually. It means that verifications will fail, but we try to approve all existing usages till next Major release, so you may support some more Major versions.

`ApiStatus.NonExtendable` is a very strict thing, it means we do not agree that you pass to our APIs any your subclasses of that API. We do not support that contract, we did not agree to that, it is unsupported, will not work properly. Could you now bring a reference to this case so we may discuss it?

---

<div class="post-metadata">

**Author:** ![joshtau](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/joshtau/32/1840_2.png) [@joshtau](https://platform.jetbrains.com/u/joshtau)\
**Post date:** [July 19, 2026, 2:21pm UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692/3 "2026-07-19T14:21:43Z")

</div>

You’re right. I’m sorry, I apologise - I got a bit tired and grumpy and shouldn’t have posted what I did. Thank you for calling that out, and for turning the conversation back around.

I’ll recollect and come back early next week. 👍

---

<div class="post-metadata">

**Author:** ![rsmckinney](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/rsmckinney/32/506_2.png) [@rsmckinney](https://platform.jetbrains.com/u/rsmckinney)\
**Post date:** [July 21, 2026, 8:36pm UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692/4 "2026-07-21T20:36:48Z")

</div>

It’s great that JB clearly delineates where its support begins and ends within the platform. But that’s all JB needs to do, let the plugin author decide whether using an internal API is worth owning the extra maintenance cost. Sometimes these APIs are the only recourse.

Otherwise, JB invites hacks that make matters worse, like using reflection and other strategies that bypass static analysis.

---

<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:** [July 21, 2026, 10:05pm UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692/5 "2026-07-21T22:05:58Z")

</div>

> [@rsmckinney](#):
>
> Sometimes these APIs are the only recourse.

In such cases we expect a healthy conversation and not abuse. Reflection access to private things may be prosecuted by our ToS, don’t do that

---

<div class="post-metadata">

**Author:** ![Elior.Boukhobza](https://sea1.discourse-cdn.com/flex001/user_avatar/platform.jetbrains.com/elior.boukhobza/32/3023_2.png) [@Elior.Boukhobza](https://platform.jetbrains.com/u/Elior.Boukhobza)\
**Post date:** [July 23, 2026, 12:03am UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692/6 "2026-07-23T00:03:19Z")

</div>

While I agree with you that it’s annoying and very unpleasant, at least they are still humans that may bend the rules if they admit they have no better solutions. In other places, like with Apple, Google, Mozilla, Meta or Microsoft, they can just simply remove your app, plugin or webpage without a warning, sometimes even a way to appeal, and good luck trying to talk to a human.

But yeah these rules are very impacting the productivity and hinders innovation, that’s for sure.

---

<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:** [July 23, 2026, 12:18am UTC](https://platform.jetbrains.com/t/apistatus-nonextendable-and-usage-policies/4692/7 "2026-07-23T00:18:10Z")

</div>

Honestly, if a plugin release is rejected because it’s using an internal API via reflection, I guess the “Hide Trial” plugin should be the first to be ejected 😋

 ![image](https://us1.discourse-cdn.com/flex001/uploads/jetbrains_platform/original/2X/b/b036369e050aa2c3e190f6df697ef02a277535cb.png)
