Contributing a plugin

August 17, 2026 ยท View on GitHub

Create plugins/<plugin-name>/plugin.json and validate it against schemas/plugin-v1.schema.json. The folder name and descriptor name must be identical, lowercase, and kebab-cased.

The descriptor records:

  • identity, version, display copy, publisher, authors, and license;
  • repository, homepage, and an immutable npm or Git distribution;
  • compatible DSH/OpenHarness versions, profiles, and platforms;
  • controlled categories and capabilities;
  • declared network, filesystem, environment, and command permissions;
  • optional localized display copy.

Every distribution declares its actual package identifier in distribution.package; OpenHarness uses it as a strong local identity signal. For Git distributions, distribution.ref must be the exact 40-character commit SHA to install. Branch names and tags are intentionally rejected. For npm distributions, version is combined with distribution.package to form the exact package version.

Git distributions must commit their package entry point and other runtime artifacts. Catalog CI verifies the descriptor package name, DSH metadata, and entry file at the pinned SHA, and rejects install-time lifecycle scripts. A user's plugin profile should not have to authorize repository build scripts.

Before opening a pull request, run:

pnpm install
pnpm validate
pnpm test
pnpm build

Changes to existing plugin versions should update both version and the pinned distribution. Reviewers should verify that declared permissions match the code at that immutable source revision.