# Plugins

IDA’s capabilities can be significantly extended through programmable plugins. These plugins can automate routine tasks, for example, enhance the analysis of hostile code or add a specific functionality to our disassembler.

Plugins can be developed using:

* C++ using the IDA SDK, or
* Python via the IDAPython API.

Key capabilities:

* **Integration with hotkeys**: plugins can be linked to specific hotkeys or menu items for quick access
* **Access to the IDB**: they have full access to the IDA database, allowing them to examine or modify the program or use Input/Output functions.

## Where to find plugins

### Development resources

* **Examples included with IDA C++ SDK**: Our SDK contains **+60 sample plugins**, including decompiler plugins (you can find them all inside the SDK directory, in the `plugins` folder), as well as source code to processor modules, loaders, and header files. You can download the latest version of IDA SDK from `HexRaysSA/ida-sdk` repository on [GitHub](https://github.com/HexRaysSA/ida-sdk).

### Built-in plugins

* **Plugins shipped with your IDA instance**: Explore the `plugins` directory in your IDA installation folder for plugins shipped out-of-the-box. You can run them through **Edit -> Plugins** submenu or via hotkeys.
  * **Explore plugin docs**: Learn more about built-in plugins through [dedicated tutorials](https://docs.hex-rays.com/user-guide/plugins/plugins-shipped-with-ida)

### Community plugins

* **Hex-Rays plugins repository**: To access a vast collection of community-developed plugins, visit [plugins.hex-rays.com](https://plugins.hex-rays.com/).

#### HCLI & Plugin Manager

* You can easily search for, install, and upgrade plugins using the [Plugin Manager](https://hcli.docs.hex-rays.com/user-guide/plugin-manager/). During installation, HCLI automatically places plugins in the correct locations, installs required Python dependencies, and handles additional setup tasks.

## Creating your own plugins

### Getting started: Domain API

If you're new to IDA and plugin development, the high-level [Domain API](https://ida-domain.docs.hex-rays.com/) is the best place to begin. It provides a broad coverage for common tasks and simplifies scripting, helping you get up and running quickly.

#### General Domain API Documentation Resources

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Getting Started</strong></td><td></td><td></td><td><a href="https://ida-domain.docs.hex-rays.com/getting_started/">https://ida-domain.docs.hex-rays.com/getting_started/</a></td></tr><tr><td><strong>Examples</strong></td><td></td><td></td><td><a href="https://ida-domain.docs.hex-rays.com/examples/">https://ida-domain.docs.hex-rays.com/examples/</a></td></tr><tr><td><strong>Reference</strong></td><td></td><td></td><td><a href="https://ida-domain.docs.hex-rays.com/usage/">https://ida-domain.docs.hex-rays.com/usage/</a></td></tr></tbody></table>

### Advanced development: C++ and IDAPython SDK

Do you want to create advanced custom plugins and need more low-level control? Check our tutorials based on the language of your choice:

<table data-card-size="large" data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td><strong>Create plugins with C++</strong></td><td></td><td></td><td><a href="../developer-guide/cpp-sdk/how-to-create-a-plugin">how-to-create-a-plugin</a></td></tr><tr><td><strong>Create plugins with IDAPython</strong></td><td></td><td></td><td><a href="../developer-guide/idapython/how-to-create-a-plugin">how-to-create-a-plugin</a></td></tr></tbody></table>

#### Automating Plugin Development with HCLI and GitHub Action

Use [HCLI](https://hcli.docs.hex-rays.com/) - the Hex-Rays Command Line Interface to automate your plugin development workflow. Set up a CI workflow for your plugins using the [HCLI IDA GitHub Action](https://github.com/HexRaysSA/ida-hcli-actions) to download and install IDA Pro automatically and test your plugin across different environments.

What you can achieve:

* **Cross-platform testing**: Test your plugins on Linux, Windows, and macOS
* **Multi-version compatibility**: Validate against different IDA Pro versions
* **All dependencies handled**: No need for separate Python or uv setup

## What's next?

### Configure how plugins are loaded with `plugins.cfg`

The plugin modules reside in the `plugins` subdirectory of IDA. IDA is able to find and load all the plugins from this directory automatically. However, you can write a configuration file and tell IDA how to load plugins. To do so, you need to modify the `plugins.cfg` file in the `plugins` subdirectory, as described below.

The `plugins.cfg` file is needed to customize the plugins, including:

* appearance of the plugin in the menu
* the hotkey used to call the plugin
* the optional argument passed to the plugin

The format of the `plugins.cfg` file is simple:

* Empty lines and lines starting with ';' are comment lines
* Other lines must have the following structure and fields:

  ```
           menu_name filename hotkey arg flags
  ```

  Example:

  ```
           Undefine undef    Alt-U  0
  ```

| Fields      | Description                                                                                                                                                                                                                                                                                                                                                                                              |
| ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `menu_name` | A visible name of the plugin. This name will be used in the Edit → Plugins menu. Underscore symbols will be replaced by spaces here.                                                                                                                                                                                                                                                                     |
| `filename`  | <p>The plugin file name. If the filename doesn't include the file extension or the directory, IDA will add them.<br><br><strong>Default extensions:</strong><br>- Windows: <code>.dll</code><br>- Linux: <code>.so</code><br>- macOS: <code>.dylib</code><br><br></p>                                                                                                                                    |
| `hotkey`    | A hotkey to activate the plugin                                                                                                                                                                                                                                                                                                                                                                          |
| `arg`       | An optional integer argument which will be passed to the run() function of the plugin                                                                                                                                                                                                                                                                                                                    |
| `flags`     | <p><strong>Optional</strong> flags. The following values are available:<br>- <code>DEBUG</code>: Debugger plugin<br>- <code>WIN</code>: Enable plugin for MS Windows<br>- <code>MAC</code>: Enable plugin for Mac<br>- <code>LINUX</code>: Enable plugin for Linux<br>- <code>GUI</code>: Plugin can only be used with GUI version of IDA<br>- <code>SILENT</code>: Silently skip nonexisting plugin</p> |

### Share your plugin with Hex-Rays community

Make your plugin compatible with [Plugin Manager](https://docs.hex-rays.com/developer-guide/plugin-publishing) to improve its discoverability and provide users with seamless installation and management.
