## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

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

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

### Community plugins

- Hex-Rays plugins repository: To access a vast collection of community-developed plugins, visit plugins.hex-rays.com.

#### HCLI & Plugin Manager

- You can easily search for, install, and upgrade plugins using the 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 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

Getting Started |  |  | https://ida-domain.docs.hex-rays.com/getting_started/
Examples |  |  | https://ida-domain.docs.hex-rays.com/examples/
Reference |  |  | https://ida-domain.docs.hex-rays.com/usage/

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

Create plugins with C++ |  |  | how-to-create-a-plugin.md
Create plugins with IDAPython |  |  | how-to-create-a-plugin.md

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

Use HCLI - 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 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` | The plugin file name. If the filename doesn’t include the file extension or the directory, IDA will add them. Default extensions: - Windows: `.dll` - Linux: `.so` - macOS: `.dylib` Note: Plugins compiled with support for 64-bit address space use a `64` suffix before the extension (e.g., `pdb64.dll`).
`hotkey` | A hotkey to activate the plugin
`arg` | An optional integer argument which will be passed to the run() function of the plugin
`flags` | Optional flags. The following values are available: - `DEBUG`: Debugger plugin - `WIN`: Enable plugin for MS Windows - `MAC`: Enable plugin for Mac - `LINUX`: Enable plugin for Linux - `GUI`: Plugin can only be used with GUI version of IDA - `SILENT`: Silently skip nonexisting plugin

### Share your plugin with Hex-Rays community

Make your plugin compatible with Plugin Manager to improve its discoverability and provide users with seamless installation and management.