index.json and the packages next to it, served from any web server or read from a folder. There is no server software to run. The index lists publishers and their public keys, the plugins with their package digests, and revocations.
Build an index
Put your signed packages in a folder and letindex write index.json for them:
--publisher, --name and --key, index:
- registers (or updates) the publisher
acmewith that key’s public key; - lists every
.oipluginin the folder as that publisher’s plugins, checking each package’s signature, manifest and component; - keeps that publisher’s earlier versions that older IDEs still need, and drops plugins no longer in the folder;
- keeps the other publishers, their plugins and the revocations already in the index.
index lists every package in the folder, each checked against the publishers the index already has. A package from a publisher the index doesn’t know is refused.
index refuses to rewrite an index in a newer format than the tool writes; update openidea-plugin first.
Merge another index
merge replaces every publisher in your index except --keep with the publishers, plugins and revocations of the other index (a path or URL), and makes their download links absolute. This is how OpenIDEA’s own release index takes in the community registry. Use it to offer the official and community plugins next to your own. --out FILE writes the result elsewhere.
Point the IDE at it
In Settings › Plugins, open the gear menu and choose Plugin Repository…. Enter the Marketplace index URL (https://…/index.json or a folder path); leave it empty to go back to the default repository. The Available tab then lists your index.
The IDE reads one index. If you want users to keep seeing the official plugins, merge the official index into yours.
Release builds of OpenIDEA pin the official publisher’s key. Plugins named
openidea.* must be signed with it, or
with a key it endorsed, whatever keys your index lists for openidea.Index format
openidea-plugin has no command for revocations: add entries to revoked, or set "revoked": true on a key, by editing index.json. index and merge keep them.
Compatibility of the format
- Fields are only ever added. An IDE ignores fields it doesn’t know.
formatstays1unless older IDEs can’t read a change. An IDE reading a newer format still applies its revocations andmoved, lists no plugins, and asks the user to update.
Moving a marketplace
An index with"moved": "<url>" sends the IDE to the index at that URL (relative or absolute). An https index can only move to another https URL. This lets a marketplace change hosts while released IDEs keep the address they were configured with.
What the IDE does with it
- It reads the index daily and keeps the last copy it read.
- Installing downloads the package, checks it against the index entry’s digest and the publisher’s key, then shows the permission dialog.
- Revoked plugins and plugins signed with revoked keys are disabled where they are installed, with the reason, also after a restart before their code could run.