# Publishing your plugins

Do you want to share your IDA plugin with Hex-Rays community?\
To have your plugin featured in the official [Hex-Rays plugin repository](https://plugins.hex-rays.com/), follow our guide for submitting it through [My Hex-Rays](https://my.hex-rays.com/dashboard/my-plugins). The portal serves as a one-stop shop for plugin submission and maintenance, allowing you to manage and track all your submitted plugins in one place.

## Pre-submission checklist

Before submitting your plugin to the Hex-Rays repository, make sure the following requirements are met:

1. Your plugin must be hosted in a **public GitHub repository** and include:

* A `README.md` file with plugin overview, installation instructions and usage examples.
* An `ida-plugin.json` file containing the required metadata. See our [guidelines](#define-plugin-metadata-with-ida-pluginjson) on details.

2. The plugin has been tested and confirmed compatible with the latest IDA version.

## Define plugin metadata with `ida-plugin.json`

The `ida-plugin.json` eases the organization of your plugin files (allows it to be self-contained in its own sub-directory) and smooths the process for accepting your plugin into our official plugin repository if you decide to share it with the community.

To work properly, the `ida-plugin.json` file must contain at the very least the `IDAMetadataDescriptorVersion` field as well as a `plugin` object containing the fields described below.

Example of the `ida-plugin.json` file:

```json
{
  "IDAMetadataDescriptorVersion": 1,
  "plugin": {
    "name": "My First Plugin",
    "entryPoint": "my-first-plugin",
    "categories": ["disassembly-and-processor-modules"],
    "logoPath": "logo.png",
    "idaVersions": "9.1",
    "description" : "The exemplary description of your plugin's functionality",
    "version": "1.1.2"
  }
}

```

### Fields description

| Field         | Description                                                                                                                                                                                                                                                                                                                                                                                                                         |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`        | The `name` will be used to identify the plugin and also generate a namespace name for it if necessary (e.g., an IDAPython plugin). The namespace name is generated by converting all non alphanumeric characters of the plugin name to underscores (`_`) and prepending `__plugins__` to it. For example "my plugin" would become `__plugins__my_plugin`.                                                                           |
| `entryPoint`  | The filename of the "main" file for the plugin. It should be stored in the same directory as its `ida-plugin.json` file. If the `entryPoint` has no file extension, IDA will assume it is a native plugin and append the appropriate file extension for dynamic shared objects for the host platform (`.dll`, `.so`, `.dylib`). For IDAPython plugins, this should typically be a `.py` file (e.g., `my-first-plugin.py`).          |
| `categories`  | Select **at least one** category to improve your plugin’s discoverability: `disassembly-and-processor-modules`, `file-parsers-and-loaders`, `decompilation`, `debugging-and-tracing`, `deobfuscation`, `collaboration-and-productivity`, `integration-with-third-parties-interoperability`,`api-scripting-and-automation`, `ui-ux-and-visualization`, `malware-analysis`, `vulnerability-research-and-exploit-development`, `other` |
| `logoPath`    | Include an image to visually represent your plugin on its page at [plugins.hex-rays.com](https://plugins.hex-rays.com). This should be a relative path to an image file within your plugin’s repository. The recommended aspect ratio for the image is 16:9.                                                                                                                                                                        |
| `idaVersions` | Declare which versions of IDA your plugin supports. You can specify a single version (e.g., `9.0`) or a version range (e.g., `>=9.0`) using the [semantic versioning](https://github.com/npm/node-semver#readme) scheme.                                                                                                                                                                                                            |
| `description` | Summarize your plugin functionality.                                                                                                                                                                                                                                                                                                                                                                                                |
| `version`     | Specify the version of your plugin. It must follow the `x.y.z` format (e.g., `1.0.0`).                                                                                                                                                                                                                                                                                                                                              |

## Submission process

### Step 1: Submit a plugin via My Hex-Rays portal

1. Navigate to [My Plugins](https://my.hex-rays.com/dashboard/my-plugins) tab in My Hex-Rays portal.
2. Click on **Submit a Plugin** button.
3. In the new dialog:

* insert the URL for your public GitHub repository (1)
* accept the T\&C and confirm your ownership (2)\
  then click **Review**.

![Submit a plugin](/files/DvcehcuUMuWxgXi95qKi)

4. If everything looks correct in the plugin details summary, click **Submit Plugin** to finalize your submission.

![Confirm submission](/files/V95DZyho7XOTSTLSvT7l)

### Step 2: Plugin review

* Once submitted, your plugin status will change to *Pending* while it is reviewed by the Hex-Rays team.
* If approved, the status will change to *Accepted*.
* If your plugin becomes rejected, you'll be notified by email with further details.

![My plugins view](/files/7tPLFLG2dDVqNMKH6JUl)

## Plugins management

### Updating your plugin details

To reflect changes—such as updated categories—on your plugin’s page immediately:

1. Navigate to [My Plugins](https://my.hex-rays.com/dashboard/my-plugins) tab in My Hex-Rays portal.
2. Find your plugin in the list and click **View Details**.
3. In the dialog, click **Refresh** to update the plugin information (this action sets the plugin's status back to *Pending*) and click **Update Plugin** to confirm changes.

The changes in your plugin `README.md` and `ida-plugin.json` files are monitored - when they get detected, your plugin status will change automatically to *Pending*.

### Removing your plugin

To remove your plugin from the Hex-Rays plugin repository:

1. Navigate to [My Plugins](https://my.hex-rays.com/dashboard/my-plugins) tab in My Hex-Rays portal.
2. Locate the plugin you want to remove.
3. Click **Unpublish** and confirm your decision.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.hex-rays.com/9.1/user-guide/plugins/plugin-submission-guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
