Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/dev/annotation.md
Original file line number Diff line number Diff line change
Expand Up @@ -550,7 +550,7 @@ There are now two different signature library systems: [SigKit](#sigkit-signatur

### SigKit Signature Libraries

While many signatures are [built-in](https://github.com/Vector35/binaryninja-api/issues/1551) and require no interaction to automatically match functions, you may wish to add or modify your own. First, install the [SigKit](https://github.com/Vector35/sigkit/) plugin from the [plugin manager](../guide/plugins.md#plugin-manager).
While many signatures are built-in and require no interaction to automatically match functions, you may wish to add or modify your own. First, install the [SigKit](https://github.com/Vector35/sigkit/) plugin from the [plugin manager](../guide/plugins.md#plugin-manager).

#### Running the signature matcher

Expand Down
35 changes: 29 additions & 6 deletions docs/dev/plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,22 +14,45 @@ To start, we suggest you download the [sample plugin](https://github.com/Vector3
- For small scripts, you can include all the code inside `__init__.py`, though we recommend for larger scripts that `__init__.py` just act as an initializer and calls into functions organized appropriately in other files.
- If you have python dependencies, create a [requirements.txt](https://pip.pypa.io/en/latest/cli/pip_freeze/) listing any python dependencies.

### Plugin Description Display

Binary Ninja displays plugin descriptions differently depending on the contents of the `plugin.json` file.

- If `longdescription` is **100 characters or longer**, the plugin manager displays the `longdescription`.
- If `longdescription` is **shorter than 100 characters**, the plugin manager instead displays the contents of the plugin repository's `README.md`.

To have your full `README.md` displayed, set `longdescription` to an empty string. The key must still be present -- validation fails if it is missing entirely. The `README.md` is read from the commit your latest release tag points at, so editing it only takes effect after you cut a new release.

### Images in README Files

When you include images for preview in the plugin manager, be aware that animated gifs are not fully supported. They will be rendered as static images of the first frame.

Additionally, all images should be included using FULL GitHub URLs as they will not render in the plugin manager without that.

For example:

```markdown
![](https://raw.githubusercontent.com/Vector35/6502/refs/heads/master/media/nes.png)
Comment thread
psifertex marked this conversation as resolved.
```

### Submitting to the Plugin Manager

If your plugin was created as described above, there's only two steps to get it submitted to the plugin manager!

1. First, create a release either [manually](https://binary.ninja/2019/07/04/plugin-manager-2.0.html#5-create-a-release) or using our [release helper](https://github.com/Vector35/release_helper).
1. Next, just [file an issue](https://github.com/Vector35/community-plugins/issues/new/choose) letting us know about your plugin.
1. First, cut a release. The [sample plugin](https://github.com/Vector35/sample_plugin#cutting-a-release) includes a release workflow you can copy into your own repository unmodified as long as `plugin.json` is at the repository root. Run it with `Actions` / `Release` / `Run workflow`; it bumps `version` in `plugin.json`, commits and tags that commit, and creates the release from the tag.
2. Next, just [file an issue](https://github.com/Vector35/community-plugins/issues/new/choose) letting us know about your plugin.

For future releases all you need to do is run the workflow again.

For future releases all you need to do is increment the version and create a new release.
[extensions.binary.ninja](https://extensions.binary.ninja) reads `plugin.json` from the commit the latest release tag points at, and the `version` field in that file is the only version it looks at -- tag names and release titles are never parsed. A release whose version the server already has is silently skipped, so if you cut a release manually, be sure to increment `version` in `plugin.json` yourself.

### Using Your Own Plugin Repository

The simplest way to run your own plugin repository using the new V2 plugin manager is to use the [mock server](https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/mock_extension_server.py) helper script (a copy is available offline as well in the install path, in the python exapmle scripts subfolder).
The simplest way to run your own plugin repository using the new V2 plugin manager is to use the [mock server](https://github.com/Vector35/binaryninja-api/blob/dev/python/examples/mock_extension_server.py) helper script (a copy is available offline as well in the install path, in the python example scripts subfolder).

Once you've created your test repository, use the `pluginManager.unofficialName` and `pluginManager.unofficialUrl` settings to add your third-party repository.
Once you've created your test repository, add its URL to the [`pluginManager.unofficialUrls`](../guide/settings.md#pluginManager.unofficialUrls) setting, which accepts a list of third-party repository URLs.

The [`add_repository`](https://api.binary.ninja/binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.add_repository) API can also be used to add the repository, though it [may require manual creation of the repository folder](https://github.com/Vector35/binaryninja-api/issues/2987).
The [`add_repository`](https://api.binary.ninja/binaryninja.pluginmanager-module.html#binaryninja.pluginmanager.RepositoryManager.add_repository) API can also be used to add the repository.

### Testing

Expand Down
Loading
Loading