Create and distribute a plugin marketplace
> ## Documentation Index > Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt > Use this file to discover all available pages before exploring further.
Overview
Documentation Index
Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt Use this file to discover all available pages before exploring further.
Create and distribute a plugin marketplace
Build and host plugin marketplaces to distribute Claude Code extensions across teams and communities.
A plugin marketplace is a catalog that lets you distribute plugins to others. Marketplaces provide centralized discovery, version tracking, automatic updates, and support for multiple source types (git repositories, local paths, and more). This guide shows you how to create your own marketplace to share plugins with your team or community.
Looking to install plugins from an existing marketplace? See Discover and install prebuilt plugins.
Overview
Creating and distributing a marketplace involves:
- Creating plugins: build one or more plugins with skills, agents, hooks, MCP servers, or LSP servers. This guide assumes you already have plugins to distribute; see Create plugins for details on how to create them.
- Creating a marketplace file: define a
marketplace.jsonthat lists your plugins and where to find them (see Create the marketplace file). - Host the marketplace: push to GitHub, GitLab, or another git host (see Host and distribute marketplaces).
- Share with users: users add your marketplace with
/plugin marketplace addand install individual plugins (see Discover and install plugins).
Once your marketplace is live, you can update it by pushing changes to your repository. Users refresh their local copy with /plugin marketplace update.
Walkthrough: create a local marketplace
This example creates a marketplace with one plugin: a /quality-review skill for code reviews. You'll create the directory structure, add a skill, create the plugin manifest and marketplace catalog, then install and test it.
```bash theme={null}
mkdir -p my-marketplace/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/.claude-plugin
mkdir -p my-marketplace/plugins/quality-review-plugin/skills/quality-review
```
Create a `SKILL.md` file that defines what the `/quality-review` skill does.
```markdown my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md theme={null}
---
description: Review code for bugs, security, and performance
disable-model-invocation: true
---
Review the code I've selected or the recent changes for:
- Potential bugs or edge cases
- Security concerns
- Performance issues
- Readability improvements
Be concise and actionable.
```
Create a `plugin.json` file that describes the plugin. The manifest goes in the `.claude-plugin/` directory.
```json my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json theme={null}
{
"name": "quality-review-plugin",
"description": "Adds a /quality-review skill for quick code reviews",
"version": "1.0.0"
}
```
Setting `version` means users only receive updates when you change this field, so bump it on every release. If you omit `version` and host this marketplace in git, every commit automatically counts as a new version. See [Version resolution](#version-resolution-and-release-channels) to choose the right approach.
Create the marketplace catalog that lists your plugin.
```json my-marketplace/.claude-plugin/marketplace.json theme={null}
{
"name": "my-plugins",
"owner": {
"name": "Your Name"
},
"plugins": [
{
"name": "quality-review-plugin",
"source": "./plugins/quality-review-plugin",
"description": "Adds a /quality-review skill for quick code reviews"
}
]
}
```
Add the marketplace and install the plugin.
```shell theme={null}
/plugin marketplace add ./my-marketplace
/plugin install quality-review-plugin@my-plugins
```
Select some code in your editor and run your new skill.
```shell theme={null}
/quality-review
```
To learn more about what plugins can do, including hooks, agents, MCP servers, and LSP servers, see Plugins.
How plugins are installed: When users install a plugin, Claude Code copies the plugin directory to a cache location. This means plugins can't reference files outside their directory using paths like ../shared-utils, because those files won't be copied.
If you need to share files across plugins, use symlinks. See Plugin caching and file resolution for details.
Create the marketplace file
Create .claude-plugin/marketplace.json in your repository root. This file defines your marketplace's name, owner information, and a list of plugins with their sources.
Each plugin entry needs at minimum a name and source (where to fetch it from). See the full schema below for all available fields.
{
"name": "company-tools",
"owner": {
"name": "DevTools Team",
"email": "devtools@example.com"
},
"plugins": [
{
"name": "code-formatter",
"source": "./plugins/formatter",
"description": "Automatic code formatting on save",
"version": "2.1.0",
"author": {
"name": "DevTools Team"
}
},
{
"name": "deployment-tools",
"source": {
"source": "github",
"repo": "company/deploy-plugin"
},
"description": "Deployment automation tools"
}
]
}
Marketplace schema
Required fields
| Field | Type | Description | Example |
|---|---|---|---|
name | string | Marketplace identifier (kebab-case, no spaces). This is public-facing: users see it when installing plugins (for example, /plugin install my-tool@your-marketplace). | "acme-tools" |
owner | object | Marketplace maintainer information (see fields below) | |
plugins | array | List of available plugins | See below |
Reserved names: The following marketplace names are reserved for official Anthropic use and cannot be used by third-party marketplaces: claude-code-marketplace, claude-code-plugins, claude-plugins-official, anthropic-marketplace, anthropic-plugins, agent-skills, knowledge-work-plugins, life-sciences. Names that impersonate official marketplaces (like official-claude-plugins or anthropic-tools-v2) are also blocked.
Owner fields
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Name of the maintainer or team |
email | string | No | Contact email for the maintainer |
Optional fields
| Field | Type | Description |
|---|---|---|
metadata.description | string | Brief marketplace description |
metadata.version | string | Marketplace version |
metadata.pluginRoot | string | Base directory prepended to relative plugin source paths (for example, "./plugins" lets you write "source": "formatter" instead of "source": "./plugins/formatter") |
allowCrossMarketplaceDependenciesOn | array | Other marketplaces that plugins in this marketplace may depend on. Dependencies from a marketplace not listed here are blocked at install. See Depend on a plugin from another marketplace. |
Plugin entries
Each plugin entry in the plugins array describes a plugin and where to find it. You can include any field from the plugin manifest schema (like description, version, author, commands, hooks, etc.), plus these marketplace-specific fields: source, category, tags, and strict.
Required fields
| Field | Type | Description |
|---|---|---|
name | string | Plugin identifier (kebab-case, no spaces). This is public-facing: users see it when installing (for example, /plugin install my-plugin@marketplace). |
source | string\ | object |
Optional plugin fields
Standard metadata fields:
| Field | Type | Description |
|---|---|---|
description | string | Brief plugin description |
version | string | Plugin version. If set (here or in plugin.json), the plugin is pinned to this string and users only receive updates when it changes. Omit to fall back to the git commit SHA. See Version resolution. |
author | object | Plugin author information (name required, email optional) |
homepage | string | Plugin homepage or documentation URL |
repository | string | Source code repository URL |
license | string | SPDX license identifier (for example, MIT, Apache-2.0) |
keywords | array | Tags for plugin discovery and categorization |
category | string | Plugin category for organization |
tags | array | Tags for searchability |
strict | boolean | Controls whether plugin.json is the authority for component definitions (default: true). See Strict mode below. |
Component configuration fields:
| Field | Type | Description |
|---|---|---|
skills | string\ | array |
commands | string\ | array |
agents | string\ | array |
hooks | string\ | object |
mcpServers | string\ | object |