Are paid plugins supported in split mode?

@jonathanlermitage.1 raised a point in Questions on V2 plugin descriptor - #5 by jonathanlermitage.1 and mentioned that in the past paid plugins were not supported in split mode.

Are paid plugins and license handling supported in split mode / remote development?

Thank you!

It’s supposed to be fixed on the client side (IJPL-171075), but the split-mode may be a different thing.
I tested my monolithic paid plugins in a splited IDE, and I faced two issues:

  • the license checks partially worked (edit: I tested again, it did not work at all). I think this was normal, as my plugins are not supposed to support remote IDEs (like Gateway).
  • some Swing UI elements were not correctly displayed (I have some settings panels with things like JetBrains’ EditorTextField fields), even when the plugin is installed on the host side.

I will try to create a sample plugin based on v2 plugin descriptor and see what happens with the license checks and Swing.

A similar issue has been raised in my issue tracker before. I haven’t checked the remote for a while, but it seems to have been fixed: https://youtrack.jetbrains.com/issue/IJPL-171075/Licensing-on-JetBrainsClient-side

But for paid plugin versions, compatibility on Marketplace still shows JetBrains Client as unsupported at the moment. :thinking:

I tested a freemium plugin with 2025.3+ with split-mode.

The LicenseFacade seems to be available on all versions and the confirmation stamp for a plugin seems to be available on frontend and backend.

LicensingFacade.LicenseStateListener is NOT notified on the backend, only on the frontend. At least in my testing after I updated the license in the “Register” dialog.
To properly tell the backend you need to add your own RPC service or similar to make it work, for example to refresh annotators on the backend if they depend on the license.

My experience is the same with paid/freemium. Both sides independently check the facade for license status on startup and any updates are synced from the frontend to the backend over custom RPC.

In my testing, changes made in the frontend with the license dialog (e.g. removing a license) are synced by the IDE itself to the backend. But the LicenseFacade listener, e.g. to reset cached license info, is not invoked on the backend.