Binary Plugins

Binary Plugins for Revolution EDA

Binary plugins contain compiled artifacts (.pyd, .so, or other platform-specific modules). Unlike source plugins, they must be packaged for the target operating system, architecture, and Python version. For general plugin loading, API negotiation, and licensing, see Plugins.

Registry build selection

A binary registry entry provides binary_urls. The installer prefers a matching OS, architecture, and Python tag, then falls back to less specific keys or a default url. Check the active plugin catalog for currently published builds; an entry is not guaranteed to exist for every platform.

Example target tags include linux-x86_64-py3.14 and windows-amd64-py3.14. A build for one Python ABI may not import under another Python version.

Package layout

Publish a ZIP that extracts into a single folder named after the importable package:

myPlugin.zip
  myPlugin/
    __init__.py
    config.json
    compiled_module.so

The plugin folder needs a config.json declaring metadata, menu callbacks, and any API or capability constraints. The loader reads it before import and skips incompatible plugins. After a successful import, callback names must resolve on the package module. Registry metadata selects a platform ZIP; it does not replace the plugin-local config.

Before publishing

  1. Build separately for each supported OS, architecture, and Python ABI.
  2. Check that the ZIP contains exactly the expected plugin directory, required runtime libraries, __init__.py, and valid config.json.
  3. Keep the plugin_version in the config consistent with the registry entry’s version.
  4. Test a clean install via Plugins → Browse Plugins…, restart, and inspect reveda.log for import or compatibility errors.
  5. Confirm actions appear in the intended editor windows and commercial actions request activation when required.

A failed import often means a mismatched ABI or missing shared library. A missing menu action may indicate an incorrect apply window class or an unexported callback. An incompatible plugin_api or missing requires_core capability prevents import entirely; read the logged reason before rebuilding.