> ## Documentation Index
> Fetch the complete documentation index at: https://openidea.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> What OpenIDEA plugins can do, the two kinds of plugin, and the current state of the plugin API.

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.

> [!WARNING]
>
> 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](https://openidea.sh/en/plugins/versioning.md)).

## 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

| Kind | Contains | Needs code | Examples |
| - | - | - | - |
| Data-only | A manifest and data files: themes, icon themes, language definitions, menus, shortcuts, settings, file templates, snippets, run detectors | No | [harbor-night](https://github.com/l0ng-ai/openidea/tree/main/plugins/official/harbor-night), [material-icons](https://github.com/l0ng-ai/openidea/tree/main/plugins/official/material-icons) |
| Code plugin | The above plus a WebAssembly component (`wasm = "dist/plugin.wasm"`) | Yes | [string-tools](https://github.com/l0ng-ai/openidea/tree/main/plugins/official/string-tools), [git-toolbox](https://github.com/l0ng-ai/openidea/tree/main/plugins/official/git-toolbox) |

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/`](https://github.com/l0ng-ai/openidea/tree/main/wit). The Rust SDK ([`sdk/rust/openidea-plugin`](https://github.com/l0ng-ai/openidea/tree/main/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

| | |
| - | - |
| Latest released API | **1.4.0**, shipped with OpenIDEA 0.1.40 |
| In development | **1.5.0** on the `main` branch, planned for the next release |
| Format of the WIT package | `openidea:plugin@<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](https://github.com/l0ng-ai/openidea-plugins). See [Publish to the marketplace](https://openidea.sh/en/plugins/publishing/marketplace.md).
* **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

> [card] [Quickstart](https://openidea.sh/en/plugins/quickstart.md)
>
> Scaffold, build and run a plugin in a few minutes.

> [card] [Example plugins](https://openidea.sh/en/plugins/examples.md)
>
> A tour of the plugins in `plugins/official`.

> [card] [Architecture and sandbox](https://openidea.sh/en/plugins/architecture.md)
>
> How plugin code runs and what limits it.

> [card] [Manifest](https://openidea.sh/en/plugins/manifest.md)
>
> Every field of `plugin.toml`.

The full, authoritative guide is [`plugins/README.md`](https://github.com/l0ng-ai/openidea/blob/main/plugins/README.md) in the repository.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.