Creating Your First Plugin
This documentation section will help you get started with developing plugins for the IntelliJ Platform. You can use either IntelliJ IDEA Community Edition or IntelliJ IDEA Ultimate as your IDE (it is highly recommended to use the latest available version). Both include the complete set of plugin development tools. To become more familiar with IntelliJ IDEA, please refer to the IntelliJ IDEA Web Help.
There are two supported workflows available for building plugins. The recommended workflow for new projects is to use Gradle. The old Plugin DevKit workflow still supports existing projects.
If a new plugin will be Scala-based, a plugin development workflow sbt-idea-plugin, is available. The workflow is analogous to the Gradle workflow but tailored to developing IntelliJ Platform plugins in Scala. JetBrains does not officially support this Scala workflow, and at this time the workflow has only minimal documentation.
The Gradle workflow offers these advantages:
- Gradle in general:
- Representations of source sets, modules, and projects are portable,
- Projects of any size or complexity usually require scripts for build management, which Gradle handles natively,
- Training, documentation, and community help for general Gradle topics are widely available.
- Specific to development of IntelliJ Platform plugins with the Gradle plugin for IntelliJ IDEA:
- Changing plugin targets is easier because it is all done in
build.gradle
:- Switching the version of the target IntelliJ Platform (IDE),
- Changing the target IntelliJ Platform-based IDE, e.g., from IntelliJ IDEA to PyCharm,
- Running a plugin against alternate versions of the JetBrains runtime.
- Gradle is fully integrated with IntelliJ Platform-based IDE CI builds and plugins.jetbrains.com, so it is easy to customize and extend the build and publishing processes.
- Gradle has built-in verification for
plugin.xml
module dependency and use of version-specific IntelliJ Platform APIs, the same checks as on plugins.jetbrains.com.
- Changing plugin targets is easier because it is all done in