From plugin-dev
Guides creation of Claude Code plugin marketplaces with marketplace.json manifests, directory structures, schema, owner metadata, and distribution strategies for teams.
npx claudepluginhub sjnims/plugin-dev --plugin plugin-devThis skill uses the workspace's default tool permissions.
A plugin marketplace is a catalog of available plugins that enables centralized discovery, version management, and distribution. This skill covers creating and maintaining marketplaces for team or community plugin distribution.
Creates isolated Git worktrees for feature branches with prioritized directory selection, gitignore safety checks, auto project setup for Node/Python/Rust/Go, and baseline verification.
Executes implementation plans in current session by dispatching fresh subagents per independent task, with two-stage reviews: spec compliance then code quality.
Dispatches parallel agents to independently tackle 2+ tasks like separate test failures or subsystems without shared state or dependencies.
A plugin marketplace is a catalog of available plugins that enables centralized discovery, version management, and distribution. This skill covers creating and maintaining marketplaces for team or community plugin distribution.
Marketplaces provide:
| Create a Plugin | Create a Marketplace |
|---|---|
| Single-purpose extension | Collection of related plugins |
| Used directly by end users | Distributes multiple plugins |
| One team or individual maintains it | Curates plugins from various sources |
Installed via /plugin install | Added via /plugin marketplace add |
Place marketplace.json in the .claude-plugin/ directory at the repository root:
marketplace-repo/
├── .claude-plugin/
│ └── marketplace.json # Required: Marketplace manifest
├── plugins/ # Optional: Local plugin directories
│ ├── plugin-one/
│ │ └── .claude-plugin/
│ │ └── plugin.json
│ └── plugin-two/
│ └── .claude-plugin/
│ └── plugin.json
└── README.md # Recommended: Marketplace documentation
The marketplace.json manifest defines the marketplace and its available plugins.
| Field | Type | Description |
|---|---|---|
name | string | Marketplace identifier (kebab-case, no spaces) |
owner | object | Marketplace maintainer information |
plugins | array | List of available plugin entries |
{
"owner": {
"name": "Team Name",
"email": "team@example.com",
"url": "https://github.com/team"
}
}
{
"metadata": {
"description": "Brief marketplace description",
"version": "1.0.0",
"pluginRoot": "./plugins"
}
}
The pluginRoot field sets the base path for relative plugin sources.
Each plugin in the plugins array requires:
| Field | Type | Description |
|---|---|---|
name | string | Plugin identifier (kebab-case, unique within marketplace) |
source | string or object | Where to fetch the plugin |
Standard metadata fields:
description - Brief plugin descriptionversion - Plugin version (semver)author - Author information objecthomepage - Documentation URLrepository - Source code URLlicense - SPDX license identifierkeywords - Tags for discoverycategory - Plugin categorytags - Additional searchability tagsComponent configuration fields:
commands - Custom paths to command files or directoriesagents - Custom paths to agent fileshooks - Hooks configuration or path to hooks filemcpServers - MCP server configurationsFor complete field reference, see references/schema-reference.md.
For plugins within the same repository:
{
"name": "my-plugin",
"source": "./plugins/my-plugin"
}
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo"
}
}
Pin to a specific ref or commit SHA for reproducible builds:
{
"name": "github-plugin",
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"ref": "v1.2.0",
"sha": "abc123def456..."
}
}
ref — Branch, tag, or commit reference (e.g., "v1.0", "main")sha — Exact commit SHA for integrity verificationFor GitLab, Bitbucket, or self-hosted git:
{
"name": "git-plugin",
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"ref": "main"
}
}
Match plugins by URL pattern:
{
"name": "internal-plugin",
"source": {
"hostPattern": "https://git.company.com/*"
}
}
The strict field controls whether plugins must have their own plugin.json:
| Mode | Behavior |
|---|---|
strict: true (default) | Plugin must include plugin.json; marketplace entry supplements it |
strict: false | plugin.json optional; marketplace entry serves as complete manifest |
Use strict: false when:
{
"name": "external-plugin",
"source": {
"source": "github",
"repo": "external/plugin"
},
"description": "Complete metadata here",
"version": "2.0.0",
"strict": false
}
Organizations can restrict which marketplaces users can install from using managed settings:
{
"strictKnownMarketplaces": true
}
When enabled, users can only install plugins from officially approved marketplaces. Additional marketplaces can be added via extraKnownMarketplaces in managed settings.
For marketplaces hosted in private repositories, set the appropriate environment variable:
GITHUB_TOKENGITLAB_TOKENBITBUCKET_TOKENSee references/distribution-patterns.md for configuration details.
Some marketplace names are reserved by Anthropic for official use. Choose distinctive names for custom marketplaces to avoid conflicts.
Marketplaces added via URL (rather than git source) have limited support for relative paths in plugin sources. Relative paths may not resolve correctly — prefer absolute source references or git-based marketplaces.
version for every plugin entrydescription for discoverabilitymetadata.version/plugin marketplace add owner/repoextraKnownMarketplaces in .claude/settings.json/plugin marketplace add ./path during developmentFor detailed distribution patterns, see references/distribution-patterns.md.
Validate marketplace structure before publishing:
# Check JSON syntax
jq . .claude-plugin/marketplace.json
# Verify required fields
jq 'has("name") and has("owner") and has("plugins")' .claude-plugin/marketplace.json
Use the plugin-validator agent with marketplace support for comprehensive validation.
{
"name": "team-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@company.com",
"url": "https://github.com/company"
},
"metadata": {
"description": "Internal development tools for the engineering team",
"version": "1.0.0"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Automatic code formatting on save",
"version": "2.1.0"
},
{
"name": "security-scanner",
"source": {
"source": "github",
"repo": "company/security-plugin"
},
"description": "Security vulnerability detection",
"version": "1.5.0",
"category": "security"
}
]
}
references/schema-reference.md - Complete field reference for marketplace.jsonreferences/distribution-patterns.md - Hosting and team distribution strategiesexamples/minimal-marketplace.md - Single plugin marketplace templateexamples/team-marketplace.md - Internal company marketplace templateexamples/community-marketplace.md - Public multi-plugin marketplace templateplugin.json details/plugin-dev:create-marketplace - Guided marketplace creation workflowThis repository (plugin-dev) is itself a marketplace. Examine .claude-plugin/marketplace.json at the repository root for a real-world example of marketplace structure and plugin organization.