# Publishing your plugins

{% hint style="success" %}

### Introducing IDA Plugin Manager - Goodbye Manual Submissions

With the introduction of [HCLI](https://hcli.docs.hex-rays.com/) and the [IDA Plugin Manager](https://hcli.docs.hex-rays.com/user-guide/plugin-manager/), **we’ve built a new ecosystem for discovering, installing, and managing IDA plugins** — all distributed through a central index in the [IDA Plugin Repository](https://github.com/HexRaysSA/plugin-repository). The [plugins.hex-rays.com](https://plugins.hex-rays.com/) remains available for browsing and showcasing plugins, but the **previous manual submission process via the My Hex-Rays portal has been retired**.
{% endhint %}

## Make Your Plugin Compatible with HCLI & Plugin Manager

The key points to make your IDA plugin available via IDA Plugin Manager are:

* Update/create `ida-plugin.json`
* Package your plugin into a ZIP archive
* Publish releases on GitHub

Refer to the [HCLI Plugin Manager Publication Guide](https://docs.hex-rays.com/developer-guide/plugin-publishing#steps-to-publication) for detailed steps, examples and process description.

## Plugin Manager & HCLI Basic Documentation Resources

New to HCLI or the Plugin Manager? Start here to get up and running quickly. These resources are perfect for IDA users who want to browse, install, and manage plugins efficiently.

<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 with HCLI</strong></td><td></td><td></td><td><a href="https://hcli.docs.hex-rays.com/getting-started/installation/">https://hcli.docs.hex-rays.com/getting-started/installation/</a></td></tr><tr><td><strong>Plugin Manager Overview</strong></td><td></td><td></td><td><a href="https://hcli.docs.hex-rays.com/user-guide/plugin-manager/">https://hcli.docs.hex-rays.com/user-guide/plugin-manager/</a></td></tr></tbody></table>

## Plugin Development Documentation Resources

Are you a plugin author looking to make your plugin compatible with HCLI and the Plugin Manager? Explore these detailed guides to learn how to prepare, package, and publish your plugin in the new ecosystem.

<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>Repository Architecture</strong></td><td></td><td></td><td><a href="../../developer-guide/plugin-publishing/plugin-repository-architecture">plugin-repository-architecture</a></td></tr><tr><td><strong>Plugin Packaging Format</strong></td><td></td><td></td><td><a href="../../developer-guide/plugin-publishing/plugin-packaging-and-format">plugin-packaging-and-format</a></td></tr><tr><td><strong>Publishing Your Plugin</strong></td><td></td><td></td><td><a href="../../developer-guide/plugin-publishing">plugin-publishing</a></td></tr></tbody></table>

## Pre-submission checklist

Before publishing your plugin to the IDA Plugin Repository, make sure it’s fully compatible with HCLI and the Plugin Manager - read the [testing guide](https://docs.hex-rays.com/developer-guide/plugin-publishing/test-plugin-before-publishing).

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

{% hint style="info" %}

### Updated fields

We’ve added **new required and optional fields** to ensure compatibility with HCLI and [IDA Plugin Manager](https://hcli.docs.hex-rays.com/user-guide/plugin-manager/). See the details and examples [here](https://docs.hex-rays.com/developer-guide/plugin-publishing#1-update-or-create-ida-pluginjson).
{% endhint %}

The `ida-plugin.json` it's essential to ensure your plugin will be available in the [IDA Plugin Repository](https://github.com/HexRaysSA/plugin-repository) and discoverable through Plugin Manager.

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 minimal `ida-plugin.json` file:

```json
{
  "IDAMetadataDescriptorVersion": 1,
  "plugin": {
    "name": "plugin1",
    "version": "1.0.0",
    "entryPoint": "plugin1.py",
    "urls": {
      "repository": "https://github.com/your-org/your-plugin"
    },
    "authors": [{
      "name": "John Smith",
      "email": "your-email@example.com"
    }]
  }
}

```

Check further examples in the [Plugin Publishing Guide](https://docs.hex-rays.com/developer-guide/plugin-publishing).

### Required Fields Description

| Field                                        | Description                                                                                                                                                                                                                                                                                                                                                                                                                |
| -------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.plugin.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`.                                                                  |
| `.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`). |
| `.plugin.version`                            | Specify the version of your plugin. It must follow the x.y.z format (e.g., 1.0.0).                                                                                                                                                                                                                                                                                                                                         |
| `.plugin.description`                        | Summarize your plugin functionality.                                                                                                                                                                                                                                                                                                                                                                                       |
| `.plugin.urls.repository`                    | Link to your plugin’s public GitHub repository                                                                                                                                                                                                                                                                                                                                                                             |
| `plugin.authors` and/or `plugin.maintainers` | - At least one must be provided. Each entry requires `name` and `email`.                                                                                                                                                                                                                                                                                                                                                   |

### Optional Fields Description

| Field                       | Description                                                                                                                                                                                                                                                                                                                                                                                                                         |
| --------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `plugin.description`        | Summarize your plugin functionality.                                                                                                                                                                                                                                                                                                                                                                                                |
| `plugin.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.                                                                                                                                                                                                            |
| `plugin.platforms`          | Supported platforms. Defaults to all if not specified. Values: `windows-x86_64`, `linux-x86_64`, `macos-x86_64`, `macos-aarch64`                                                                                                                                                                                                                                                                                                    |
| `plugin.license`            | SPDX license identifier (e.g., "MIT", "GPL-3.0", "Apache-2.0")                                                                                                                                                                                                                                                                                                                                                                      |
| `plugin.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.                                                                                                                                                                       |
| `plugin.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` |
| `plugin.keywords`           | Search terms to improve discoverability.                                                                                                                                                                                                                                                                                                                                                                                            |
| `plugin.pythonDependencies` | PyPI packages to install (e.g., `["requests>=2.28.0", "package-name"]`).                                                                                                                                                                                                                                                                                                                                                            |
| `plugin.settings`           | Configuration options as a list of descriptors of settings.                                                                                                                                                                                                                                                                                                                                                                         |

## FAQ

Make your plugin HCLI and Plugin Manager ready - check out our [FAQ](https://docs.hex-rays.com/developer-guide/plugin-publishing#faq) for guidance and practical tips.
