Test your Plugin

This guide shows you how to thoroughly test your IDA plugin before publishing it to the plugin repository, ensuring it meets quality standards and works correctly across different environments.

Problem Statement

You've developed an IDA plugin and want to test it comprehensively before releasing it to ensure:

  • The plugin metadata is valid

  • It installs correctly

  • It works across supported IDA versions

  • Python dependencies are properly declared

  • There are no common packaging errors

Prerequisites

  • HCLI installed (see Installationarrow-up-right)

  • Your plugin with ida-plugin.json file

  • Valid IDA Pro installation (for runtime testing)

  • Authentication configured (for dependency installation)

Quick Validation Checklist

Before deep testing, ensure these basics:

Step-by-Step Testing Guide

Step 1: Validate Plugin Metadata with Lint

The first step is to validate your plugin structure and metadata:

For a directory:

For a ZIP archive:

For a GitHub release:

Step 2: Understand Lint Output

Success output:

Error output:

Step 3: Fix Common Validation Errors

Error: "Invalid JSON syntax"

Cause: Trailing commas or syntax errors in ida-plugin.json.

Solution: Use a JSON validator or jq:

Fix trailing commas:

Error: "Missing required field: plugin.version"

Cause: Version field is missing or empty.

Solution: Add semantic version:

Error: "Entry point file not found"

Cause: File specified in entryPoint doesn't exist.

Solution: Verify the file exists and path is correct. This path is relative to ida-plugin.json:

Error: "Python dependency not found on PyPI"

Cause: Typo in dependency name or package doesn't exist.

Solution: Verify package exists:

Fix in ida-plugin.json:

Error: "Invalid version specifier"

Cause: Version doesn't follow semantic versioning.

Solution: Use format MAJOR.MINOR.PATCH:

Step 4: Test Local Installation

Install your plugin from the local directory:

Expected output:

Step 5: Verify Installation

Check that the plugin is installed:

Output should include your plugin:

Verify plugin files were copied:

Step 6: Test in IDA Pro

Launch IDA Pro and verify:

  1. Plugin loads without errors:

    • Check IDA console output for Python errors

    • Look for your plugin in Edit → Plugins menu

  2. Plugin functionality works:

    • Execute main plugin features

    • Test edge cases

    • Verify hotkeys (if any)

  3. Check for errors:

Step 7: Test Across IDA Versions

If your plugin supports multiple IDA versions, test each one:

Verify:

  • No API compatibility issues

  • All features work as expected

  • No deprecation warnings

Step 8: Test Plugin Configuration (if applicable)

If your plugin uses settings:

Step 9: Test Uninstallation

Verify clean removal:

Check that files are removed:

Re-install to continue testing:

Pre-Publishing Checklist

Before creating a GitHub release:

Metadata Completeness

Testing Complete

Documentation

Repository Setup

Common Testing Pitfalls

1. Not Testing on Clean IDA Installation

Problem: Plugin works on your system but fails for users.

Solution: Test with fresh IDA installation:

2. Hardcoded Paths

Problem: Plugin uses absolute paths that don't exist on other systems.

Solution: Use IDA SDK functions:

3. Missing Python Dependency Versions

Problem: Plugin works with latest dependency but breaks with older versions.

Solution: Specify minimum versions:

Prefer not to pin to specific versions (==2.28.0) because it's difficult for many plugins to agree on precisely the same version.

Reference Documentation

For more detailed information:

Getting Help

If you encounter issues:

  1. Check the linter output: hcli plugin lint provides detailed error messages

Publishing Your Plugin

Once all tests pass:

  1. Create a GitHub release with a semantic version tag (e.g., v1.0.0)

  2. Attach ZIP archive (if needed for native plugins)

  3. Wait for the daily indexer run

  4. Verify plugin appears: hcli plugin search your-plugin

The plugin repository automatically discovers and indexes plugins with valid ida-plugin.json files!

Last updated

Was this helpful?