Registry resolution

Resolve plugins from local workspaces, npm packages, or remote registries.

Resolution order

Control where ContractSpec loads plugins and how versions are resolved.

.contractsrc.json
{
  "plugins": [
    {
      "id": "markdown-generator",
      "package": "@contractspec/plugin.markdown-generator",
      "capabilities": ["generator"],
      "options": {
        "outputDir": "./docs/generated",
        "format": "table"
      }
    }
  ],
  "pluginRegistry": {
    "resolutionOrder": ["workspace", "npm", "remote"],
    "allowPrerelease": false,
    "sources": {
      "remote": "https://registry.contractspec.io"
    }
  }
}

Custom registry resolvers

Register resolver plugins to load plugins from private registries.

registry-resolver.ts
import type { RegistryResolverPlugin } from "@contractspec/lib.plugins";

export const PrivateRegistryResolver: RegistryResolverPlugin = {
  meta: {
    id: "private-registry",
    version: "1.0.0",
    type: "registryResolver",
    provides: ["private-registry"],
  },
  resolve: async (request) => {
    // Fetch plugin package metadata from private registry
    const result = await fetch(
      "https://registry.acme.io/" + request.package
    );
    return result.json();
  },
};