Incompatible Changes in IntelliJ Platform and Plugins API 2026.*
Please see Verifying Plugin Compatibility on how to use Plugin Verifier and IDE inspections to check such problems.
Early Access Program (EAP) releases of upcoming versions are available here.
2026.3
IntelliJ Platform 2026.3
Several modules were extracted from the core plugin to separate modules with their own classloaders. This shouldn't affect binary compatibility, but an explicit dependency should be added in build.gradle.kts using bundledModule(<moduleName>) if a plugin uses API from these modules:
intellij.platform.debuggerintellij.platform.externalSystemintellij.platform.remoteServersintellij.platform.webide.impl
Several modules were moved from the core plugin to separate bundled plugins. This shouldn't affect binary compatibility, but an explicit dependency should be added in build.gradle.kts using bundledPlugin(<pluginId>) if a plugin uses API from these modules:
com.intellij.platform.vcs(Version Control):intellij.platform.vcs,intellij.platform.vcs.impl,intellij.platform.vcs.log,intellij.platform.vcs.log.impl,intellij.platform.vcs.log.graph,intellij.platform.vcs.dvcs,intellij.platform.vcs.dvcs.impl. A dependency on thecom.intellij.modules.vcsplugin alias is sufficient, see Modules Available in All Products.com.intellij.xml(XML and HTML):intellij.xml.parser,intellij.xml.syntax,intellij.xml.psi,intellij.xml.psi.impl,intellij.xml.dom,intellij.xml.dom.impl,intellij.xml.analysis,intellij.xml.analysis.impl,intellij.xml.impl,intellij.xml.ui.common,intellij.xml.structureView,intellij.xml.structureView.impl,intellij.xml.emmet,intellij.xml.emmet.frontend,intellij.relaxng. A dependency on thecom.intellij.modules.xmlplugin alias is sufficient, see Modules Available in All Products.com.intellij.platform.tasks(Tasks and Contexts):intellij.platform.tasks,intellij.platform.tasks.impl. Not to be confused with thecom.intellij.tasks(Issue Trackers) plugin.com.intellij.problemsView(Problems View):intellij.platform.problemsView.shared, which was renamed tointellij.platform.problemView.shared.
com.intellij.openapi.projectRoots.Sdkinterface now extendscom.intellij.openapi.util.UserDataHolderExand inherits its abstract methodputUserDataIfAbsent(@NotNull Key<T> key, @NotNull T value)Do not implement
Sdk: it is a non-extendable interface.com.intellij.openapi.projectRoots.Sdkinterface now extendscom.intellij.openapi.util.UserDataHolderExand inherits its abstract methodreplace(@NotNull Key<T> key, @Nullable T oldValue, @Nullable T newValue)Do not implement
Sdk: it is a non-extendable interface.com.intellij.openapi.actionSystem.LangDataKeys.RUN_PROFILEfield type changed fromDataKey<RunProfile>toDataKey<?>Use
com.intellij.openapi.actionSystem.ExecutionDataKeys.RUN_PROFILEor add an explicit cast.com.intellij.openapi.actionSystem.LangDataKeys.CONSOLE_VIEWfield type changed fromDataKey<ConsoleView>toDataKey<?>Use
com.intellij.openapi.actionSystem.ExecutionDataKeys.CONSOLE_VIEWor add an explicit cast.com.intellij.openapi.actionSystem.LangDataKeys.EXECUTION_ENVIRONMENTfield type changed fromDataKey<ExecutionEnvironment>toDataKey<?>Use
com.intellij.openapi.actionSystem.ExecutionDataKeys.EXECUTION_ENVIRONMENTor add an explicit cast.com.intellij.openapi.actionSystem.LangDataKeys.RUN_CONTENT_DESCRIPTORfield type changed fromDataKey<RunContentDescriptor>toDataKey<?>Use
com.intellij.openapi.actionSystem.ExecutionDataKeys.RUN_CONTENT_DESCRIPTORor add an explicit cast.com.intellij.ide.ApplicationLoadListenerclass removedThe interface and its
com.intellij.ApplicationLoadListenerextension point were internal API and are not available to plugins anymore, even if a plugin used them before. Plugins may not run code at early application startup. UseProjectActivityinstead, see Project Open.
JNA Library 2026.3
The JNA library is no longer loaded by the core classloader. It stays bundled as the content module intellij.libraries.jna, but a plugin does not see it implicitly anymore. A plugin that uses com.sun.jna.* classes or com.intellij.jna.JnaLoader must declare an explicit dependency. Without it, the plugin fails at runtime with NoClassDefFoundError.
Add the module dependency to plugin.xml:
and to build.gradle.kts: bundledModule("intellij.libraries.jna"). A plugin that ships its own JNA jars is not affected.
Consider this a chance to stop using JNA. Plugins for 2026.2 and later target Java 25, where the Foreign Function and Memory API (java.lang.foreign) is final. The IDE runs with --enable-native-access=ALL-UNNAMED, so plugin code can call native functions through FFM without a warning. The platform itself migrated its native bindings from JNA to FFM in 2026.3.
com.intellij.jna.JnaLoader moved from intellij.platform.util to the intellij.libraries.jna module, so it also needs the dependency described above. JnaLoader.load(Logger) is deprecated and scheduled for removal; call JnaLoader.isLoaded() instead.
OkHttp Library Unbundling
The OkHttp library is no longer bundled with the IDE. The content module intellij.libraries.okhttp and its okhttp3 classes are gone from every product. A plugin that used the bundled library fails at runtime with NoClassDefFoundError.
Bundle com.squareup.okhttp3:okhttp in the plugin, or switch to java.net.http.HttpClient. com.intellij.util.net.PlatformHttpClient returns a JDK client that follows the IDE proxy, certificate and user agent settings. The platform itself migrated all its OkHttp usages to the JDK client in 2026.3. The Okio library (intellij.libraries.squareup.okio.jvm) stays bundled.
okhttp3package removedBundle
com.squareup.okhttp3:okhttpin the plugin, or usejava.net.http.HttpClientthroughcom.intellij.util.net.PlatformHttpClient.
Kotlin UI DSL 1.0 Removal
Kotlin UI DSL Version 1 (the com.intellij.ui.layout DSL entry points) has been completely removed. Any access to the removed classes will lead to compilation or runtime errors. The migration should be done according to the Kotlin UI DSL Version 2 migration guide.
com.intellij.ui.layout.BaseBuilderclass removedcom.intellij.ui.layout.CCFlagsclass removedcom.intellij.ui.layout.Cellclass removedcom.intellij.ui.layout.CellBuilderclass removedcom.intellij.ui.layout.CellMarkerclass removedcom.intellij.ui.layout.LCFlagsclass removedcom.intellij.ui.layout.LayoutBuilderclass removedcom.intellij.ui.layout.LayoutBuilderImplclass removedcom.intellij.ui.layout.LayoutImplKtclass removedcom.intellij.ui.layout.LayoutKtclass removedcom.intellij.ui.layout.Rowclass removedcom.intellij.ui.layout.RowBuilderclass removed
Java Plugin 2026.3
com.intellij.openapi.module.StdModuleTypesclass removedUse
com.intellij.openapi.module.JavaModuleType.getModuleType()instead. Avoid a check of the module type if possible. Seecom.intellij.openapi.module.ModuleTypefor details.
2026.2
IntelliJ Platform 2026.2
Several modules were extracted from the core plugin to separate modules with their own classloaders. This shouldn't affect binary compatibility, but an explicit dependency should be added in build.gradle.kts using bundledModule(<moduleName>) if a plugin uses API from these modules:
intellij.xml.emmetintellij.xml.structureView
Several modules were moved from the core plugin to separate bundled plugins. This shouldn't affect binary compatibility, but an explicit dependency should be added in build.gradle.kts using bundledPlugin(<pluginId>) if a plugin uses API from these modules:
com.intellij.bookmarks(Bookmarks Manager):intellij.platform.bookmarkscom.intellij.platform.serviceView(Services View):intellij.platform.execution.dashboardcom.intellij.modules.jcef(Web Browser (JCEF)):intellij.platform.ui.jcefcom.intellij.navbar(Navbar):intellij.platform.navbarcom.intellij.platform.ssh(SSH):intellij.platform.ssh.core,intellij.platform.ssh,intellij.platform.ssh.ui,intellij.platform.ssh.attachcom.intellij.structuralSearch(Structural Search):intellij.platform.structuralSearchcom.intellij.structureView(Structure View):intellij.platform.structureViewcom.intellij.platform.testRunner(Test Runner):intellij.platform.testRunner,intellij.platform.smRunnercom.intellij.todo(TODO Comments):intellij.platform.todo
In 2026.2, these plugins were shipped with IDs following the intellij.<name>.plugin scheme (for example, intellij.bookmarks.plugin). Starting from 2026.3, the plugins use the IDs listed above, and the old IDs are kept as plugin aliases for backward compatibility.
JCEF 2026.2
A plugin that uses the embedded browser (JCEF) API must now declare an explicit dependency on the bundled Web Browser (JCEF) plugin. See Plugin Dependency for the required plugin.xml and build.gradle.kts changes and the compatibility notes for older IDE versions.
Error Reporting 2026.2
MessagePool and MessagePoolListener are now internal API and are not available to plugins. Plugins must not observe all IDE exceptions and diagnostics.
To observe plugin's own exceptions and freezes, use error report sink.
Plugin Management 2026.2
PluginManagerCore.enablePlugin(), PluginManagerCore.disablePlugin(), and PluginManagerCore.getPlugins() are now internal API and are not available to plugins. Plugins must not manage other plugins.
A plugin that only needs information about other plugins, such as IDs, versions, vendors, license, modules, or dependencies, should use PluginDetailsService.
PolySymbols 2026.2
com.intellij.polySymbols.search.PsiSourcedPolySymbolclass renamed tocom.intellij.polySymbols.search.PsiLinkedPolySymbolUse
PsiLinkedPolySymbolinstead. Additionally, thesourceproperty was renamed tolinkedElement.com.intellij.polySymbols.utils.PsiSourcedPolySymbolDelegateclass renamed tocom.intellij.polySymbols.utils.PsiLinkedPolySymbolDelegateUse
PsiLinkedPolySymbolDelegateinstead.com.intellij.polySymbols.refactoring.PsiSourcedPolySymbolRefactoringHelperclass renamed tocom.intellij.polySymbols.refactoring.PsiLinkedPolySymbolRefactoringHelperUse
PsiLinkedPolySymbolRefactoringHelperinstead.com.intellij.polySymbols.refactoring.PsiSourcedPolySymbolRenameHandlerclass renamed tocom.intellij.polySymbols.refactoring.PsiLinkedPolySymbolRenameHandlerUse
PsiLinkedPolySymbolRenameHandlerinstead.com.intellij.polySymbols.search.PsiSourcedPolySymbolProviderclass renamed tocom.intellij.polySymbols.search.PsiLinkedPolySymbolProviderUse
PsiLinkedPolySymbolProviderinstead.com.intellij.polySymbols.search.PsiSourcedPolySymbolReferenceclass renamed tocom.intellij.polySymbols.search.PsiLinkedPolySymbolReferenceUse
PsiLinkedPolySymbolReferenceinstead.com.intellij.polySymbols.search.PsiSourcedPolySymbolReferenceSearcherclass renamed tocom.intellij.polySymbols.search.PsiLinkedPolySymbolReferenceSearcherUse
PsiLinkedPolySymbolReferenceSearcherinstead.com.intellij.polySymbols.search.PsiSourcedPolySymbolRequestResultProcessorclass renamed tocom.intellij.polySymbols.search.PsiLinkedPolySymbolRequestResultProcessorUse
PsiLinkedPolySymbolRequestResultProcessorinstead.
Kotlin Plugin 2026.2
K1 Plugin Removal
K1 Plugin was completely removed from the distribution. Any access to its classes or to the classes of the K1 Compiler Frontend would lead to runtime errors. The migration should be done according to the migration guide.
org.jetbrains.kotlin.asJava.classes.KtLightClassForSourceDeclarationclass removedorg.jetbrains.kotlin.asJava.classes.KtLightClassImplclass removedorg.jetbrains.kotlin.asJava.classes.KtUltraLightClassclass removedorg.jetbrains.kotlin.asJava.elements.KtLightMemberImplclass removedorg.jetbrains.kotlin.asJava.elements.KtLightPsiLiteralclass removedorg.jetbrains.kotlin.idea.actions.generate.KotlinGenerateMemberActionBaseclass removedorg.jetbrains.kotlin.idea.base.projectStructure.moduleInfo.ModuleSourceInfoclass removedorg.jetbrains.kotlin.idea.base.utils.fqname.FqNameUtilKtclass removedorg.jetbrains.kotlin.idea.caches.project.MultiplatformUtilKtclass removedorg.jetbrains.kotlin.idea.caches.resolve.util.JavaResolutionUtilsclass removedorg.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIdeclass removedorg.jetbrains.kotlin.idea.codeInsight.KtFunctionPsiElementCellRendererclass removedorg.jetbrains.kotlin.idea.codeInsight.ReferenceVariantsHelperclass removedorg.jetbrains.kotlin.idea.codeInsight.postfix.KtPostfixTemplateProviderKtclass removedorg.jetbrains.kotlin.idea.core.ShortenReferencesclass removedorg.jetbrains.kotlin.idea.core.UtilsKtclass removedorg.jetbrains.kotlin.idea.core.overrideImplement.GenerateMembersHandlerclass removedorg.jetbrains.kotlin.idea.core.overrideImplement.GenerateMembersHandler.Companionclass removedorg.jetbrains.kotlin.idea.core.overrideImplement.ImplementMembersHandlerclass removedorg.jetbrains.kotlin.idea.core.overrideImplement.OverrideMemberChooserObjectclass removedorg.jetbrains.kotlin.idea.gradleJava.compilerPlugin.AbstractCompilerPluginGradleImportHandlerclass removedorg.jetbrains.kotlin.idea.imports.ImportsUtilsclass removedorg.jetbrains.kotlin.idea.inspections.IntentionBasedInspectionKtclass removedorg.jetbrains.kotlin.idea.quickfix.KotlinIntentionActionsFactoryclass removedorg.jetbrains.kotlin.idea.quickfix.KotlinQuickFixActionclass removedorg.jetbrains.kotlin.idea.quickfix.KotlinSingleIntentionActionFactoryclass removedorg.jetbrains.kotlin.idea.quickfix.QuickFixContributorclass removedorg.jetbrains.kotlin.idea.quickfix.QuickFixesclass removedorg.jetbrains.kotlin.idea.quickfix.createFromUsage.CreateFromUsageFixBaseclass removedorg.jetbrains.kotlin.idea.refactoring.KotlinRefactoringUtilKtclass removedorg.jetbrains.kotlin.idea.refactoring.changeSignature.ChangeSignatureUtilsKtclass removedorg.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeInfoclass removedorg.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinChangeSignatureDataclass removedorg.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinMethodDescriptorclass removedorg.jetbrains.kotlin.idea.refactoring.memberInfo.MemberInfoUtilsKtclass removedorg.jetbrains.kotlin.idea.refactoring.safeDelete.KotlinSafeDeleteProcessorclass removedorg.jetbrains.kotlin.idea.search.usagesSearch.SearchHelpersKtclass removedorg.jetbrains.kotlin.idea.search.usagesSearch.UtilsKtclass removedorg.jetbrains.kotlin.idea.util.CallTypeAndReceiverclass removedorg.jetbrains.kotlin.idea.util.IdeDescriptorRenderersclass removedorg.jetbrains.kotlin.idea.util.ImportInsertHelperclass removedorg.jetbrains.kotlin.idea.util.ImportInsertHelper.Companionclass removedorg.jetbrains.kotlin.idea.util.ModifierListModifactorKtclass removedorg.jetbrains.kotlin.idea.util.TypeUtilsclass removedorg.jetbrains.kotlin.j2k.UtilsKtclass removedorg.jetbrains.kotlin.resolve.lazy.BodyResolveModeclass removedorg.jetbrains.kotlin.util.DescriptorUtilsKtclass removedorg.jetbrains.kotlin.asJava.KotlinAsJavaSupport.getLightClass(KtClassOrObject)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.analyze$default(KtElement, BodyResolveMode, int, Object)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.analyze(KtElement, BodyResolveMode)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.getResolutionFacade(KtElement)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveImportReference(KtFile, FqName)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveToCall$default(KtElement, BodyResolveMode, int, Object)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveToDescriptorIfAny$default(KtClassOrObject, BodyResolveMode, int, Object)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveToDescriptorIfAny$default(KtDeclaration, BodyResolveMode, int, Object)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveToDescriptorIfAny$default(KtNamedFunction, BodyResolveMode, int, Object)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveToDescriptorIfAny$default(KtProperty, BodyResolveMode, int, Object)method removedorg.jetbrains.kotlin.idea.caches.resolve.ResolutionUtils.resolveToDescriptorIfAny(KtDeclaration, BodyResolveMode)method removedorg.jetbrains.kotlin.idea.util.CommentSaver.restore$default(CommentSaver, PsiElement, boolean, int, Object)method removedorg.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsKt.getJetTypeFqName(KotlinType, boolean)method removedorg.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsKt.getNameIfStandardType(KotlinType)method removed
CLion 2026.2
The C/C++ language engine based on com.intellij.cidr.lang (CLion Classic) is no longer bundled with CLion. CLion Nova, based on the ReSharper C++ engine, is now the default and the only bundled C/C++ engine. The classic APIs remain available via the C/C++ Language Support via Classic Engine plugin (ID com.intellij.cidr.lang). Plugins depending on these APIs must declare a dependency on the Marketplace plugin using plugin("com.intellij.cidr.lang", "<version>"). See C/C++ Language Engine: Nova and Classic for setup details and CLion Nova API replacements.
com.jetbrains.cidr.lang.OCFileTypeclass removedThe Classic C/C++ engine is no longer bundled. Depend on the C/C++ Language Support via Classic Engine plugin to keep using it, or migrate to
com.jetbrains.rider.cpp.fileType.CppFileType(CLion Nova).com.jetbrains.cidr.lang.OCLanguageclass removedThe Classic C/C++ engine is no longer bundled. Depend on the C/C++ Language Support via Classic Engine plugin to keep using it, or migrate to
com.jetbrains.rider.cpp.fileType.CppLanguage(CLion Nova).com.jetbrains.cidr.lang.psi.OCFileclass removedDepend on the C/C++ Language Support via Classic Engine plugin to keep using it, or use
com.jetbrains.rider.cpp.fileType.psi.CppFile(CLion Nova) for file-level access only.
CLion Nova has no frontend PSI, so the remaining com.jetbrains.cidr.lang classes — PSI, symbols, types, and resolve/references — have no replacement; depend on the Classic Engine plugin to keep using them.
2026.1
IntelliJ Platform 2026.1
- AWT input event handlers no longer run under write-intent lock
Custom input handlers (
KeyListener,MouseAdapter, etc.) no longer execute under the write-intent lock. If PSI or other write-intent-protected data needs to be accessed in these handlers, explicitly acquire a read action usingReadAction.nonBlocking().submit()or coroutine-based equivalents such asreadAction {}.
Language Server Protocol (LSP) 2026.1.4
In 2026.1.4, key LSP classes were renamed. LspServerManager was renamed to LspClientManager and the service is registered only under the new interface. Plugins retrieving LspServerManager via project.service<LspServerManager>() or similar methods will get null. Use LspClientManager.getInstance(project) instead, or LspServerManager.getInstance(project) to support versions before 2026.4.1.
PolySymbols 2026.1
com.intellij.polySymbols.PolySymbol.getOrigin()method removedThe property was confusing and in many cases was not used. Its functionality is replaced by:
frameworkproperty - providecom.intellij.polySymbols.html.HtmlFrameworkSymbolsSupport.HtmlFrameworkIdPropertyvalue throughPolySymbol.Propertymechanism
defaultIconproperty - implementiconproperty and returntrueforPolySymbol.DocHideIconPropertythroughPolySymbol.Propertymechanism
typeSupportproperty - providecom.intellij.polySymbols.utils.PolySymbolTypeSupport.TypeSupportPropertyvalue throughPolySymbol.Propertymechanism
com.intellij.polySymbols.PolySymbolQualifiedKindclass renamed tocom.intellij.polySymbols.PolySymbolKindadditionally
nameproperty was renamed tokindNameandqualifiedKindproperties and parameters across the package were renamed tokind
The following classes no longer implement PsiModificationTracker (this requirement was confusing):
Implementing PsiModificationTracker was replaced by modificationTracker property for the following classes:
Java Plugin 2026.1
The Java plugin has been split into several modules with their own classloaders. This shouldn't affect plugins that use standard <depends>com.intellij.java</depends> dependency. If a plugin depends on specific Java plugin modules directly, the dependencies should be updated to reference the new module names.