<id>-<version>.oiplugin. Signing it with a publisher key lets the IDE check who published it and that it hasn’t changed since.
Create a publisher key
keygen writes a new Ed25519 key to acme.key (on macOS and Linux the file is made readable only by you), prints its public key, and refuses to overwrite an existing file. Do this once per publisher and keep the file secret: anyone who has it can publish as you.
The public key goes into the marketplace index with your publisher id. The publisher id owns the plugin id prefix: publisher acme can sign only plugins named acme.*.
Pack
pack:
- runs
openidea-plugin checkon the folder and stops if it fails; - collects the manifest and every file the manifest and its contributions reference, plus the component;
- adds
LICENSE,LICENSE.md,LICENSE.txt,NOTICE,NOTICE.md,COPYINGandREADME.mdif they exist; - with
--keyand--publisher(always both), signs the package, after checking that the plugin id starts with<publisher>.; - writes
<id>-<version>.oiplugin, or the--outpath.
openidea-plugin build first so that dist/plugin.wasm is current.
What a package contains
The signature is Ed25519 over the plugin id, the version and the digest of the package: a BLAKE3 hash of the manifest and the package files (paths and contents, in sorted order). Changing any file after signing breaks the signature.
When installing, the IDE unpacks at most 10,000 entries and 512 MiB.
Install a package
- Settings › Plugins › gear menu › Install Plugin from Package File… installs an
.oiplugin, a.zipwith the package at its root or in its only folder, or a folder’splugin.toml. A zip without aplugin.tomlthere (an IntelliJ plugin, for example) is refused. - Install Plugin from Disk… installs an unpacked package folder.
- Installing from a marketplace downloads the package and checks it against the index entry and the publisher’s key first.
Check a package
check unpacks the package as installing would and validates it.
Rotate a key
To move to a new key, have the old key vouch for the new one so installed plugins update without asking the user to confirm a new signer:endorse prints the endorsement as JSON. See Self-hosted marketplace and Policy and security.