Skip to main content
OpenIDEA plugins extend the IDE with commands, editor features, tool windows, themes, icons and languages. A plugin is a folder with a plugin.toml manifest. If it has code, the code is a sandboxed WebAssembly component that can only do what the user allowed.
The plugin system is a preview. Settings › Plugins shows a Preview badge: the API and the plugins may still change. Released API versions only grow, so a plugin built for API 1.0 keeps loading in later 1.x IDEs (see API versions).

What a plugin can do

  • Add commands. They become IDE actions: they show in Find Action and Search Everywhere, can be bound to keys, and can be placed in menus, the main toolbar and the status bar.
  • Read and change project files and the focused editor, react to workbench events (file opened or saved, VCS changes, actions run) and run background tasks with progress.
  • Provide editor features for any language: completion, inline completion, quick fixes, navigation, hover, inlay hints, semantic highlighting, diagnostics while typing, formatting, code lenses, gutter markers and more.
  • Show tool windows and custom editors, either declarative (trees, lists, forms, tables) or as a sandboxed web page.
  • Contribute run configurations, test result parsers and run targets, database sources, and MCP tools for the built-in MCP server.
  • Call web services, store secrets in the system keychain, keep data in their own storage, and run programs the user approved.
  • Contribute settings pages, file templates, snippets, themes, file icon themes and languages.

Two kinds of plugin

Declared contributions work as soon as the plugin is enabled, before any code loads: commands appear in Find Action, themes can be applied, settings pages exist. Code is loaded only when it is first needed (a command runs, a file of a declared language opens, and so on) and is unloaded again after 5 minutes without use. Code plugins are WebAssembly components targeting the plugin world in wit/. The Rust SDK (sdk/rust/openidea-plugin) is the supported way to write them; any language with component-model tooling (componentize-py, jco componentize, TinyGo) can target the same world.

API version

Declare the API your plugin needs with engines.openidea in the manifest, for example engines.openidea = "^1.4".

Where plugins come from

  • Marketplace: Settings › Plugins › Available lists the official plugins and the community plugins of the registry. See Publish to the marketplace.
  • Disk: Install Plugin from Disk… (a folder) or Install Plugin from Package File… (an .oiplugin or .zip) in the gear menu of Settings › Plugins.
  • Linked folders: openidea-plugin link loads a folder you are developing, without installing it.
  • Project plugins: packages in <project>/.openidea/plugins/<name>/ load in trusted projects only, after you approve their permissions.

Next steps

Quickstart

Scaffold, build and run a plugin in a few minutes.

Example plugins

A tour of the plugins in plugins/official.

Architecture and sandbox

How plugin code runs and what limits it.

Manifest

Every field of plugin.toml.
The full, authoritative guide is plugins/README.md in the repository.