Skip to main content

Marketplaces

A marketplace is a marketplace.json file that lists plugins and where to get them. A team can host one so that each member installs the same plugins. For example, claude plugin marketplace add owner/repo adds a marketplace from a GitHub repo.

A marketplace is a .claude-plugin/marketplace.json file hosted in git or on a web server. Add or remove one with claude plugin marketplace add and remove. Clones live in ~/.claude/plugins/marketplaces/<name>. Administrators can allow or block sources with settings.

Top-Level Keysโ€‹

File: .claude-plugin/marketplace.json. An unknown key is ignored, and validate warns about it. Source: Marketplace Reference and Host and Maintain a Marketplace.

KeyStatusWhat It DoesHow It Works
nameDocumentedSets the marketplace id.Letters, digits, ., _, -. Many names are reserved: official names, inline, builtin, skills-dir, synced, npm, github, the claudeai- prefix, and JavaScript member names.
ownerDocumentedNames the maintainer.name is required. email and url are optional.
pluginsDocumentedLists the plugin entries.An invalid entry becomes a stub with source unsupported. The other entries still load.
$schema, description, versionDocumentedInfo about the marketplace.metadata.description and metadata.version work as alternates.
metadata.pluginRootDocumentedSets the base folder for bare source names.Needs Claude Code 2.1.239 or later. The folder must be inside the marketplace.
forceRemoveDeletedPluginsDocumentedUninstalls plugins that you removed from the list.Boolean.
allowCrossMarketplaceDependenciesOnDocumentedNames marketplaces that plugin dependencies may come from.An array of marketplace names.
renamesDocumentedMaps an old plugin name to a new name or null.An append-only map.

Plugin Entry Keysโ€‹

An entry also accepts every plugin.json key except the directory listing fields.

KeyStatusWhat It DoesHow It Works
name, sourceDocumentedGive the id and the place to fetch from. Both are required.The entry name is what users type before @.
category, tagsDocumentedCatalog data.Free text.
strictDocumentedSays who owns the manifest.Default true. With false and a plugin.json present, component keys in the entry cause a conflicting manifests error.
headers, headersHelperDocumentedAdd headers to an archive download.Needs 2.1.238 or later. headersHelper needs strict: false. Only for archive sources.
defaultEnabled, displayName, dependencies, metadataDocumentedWork as in the manifest.Entry values override the manifest for display and defaultEnabled.
relevanceDocumentedSays when to suggest the plugin.topic (64 characters) and signals: cli, hosts, filesRead, manifestDeps (file and pattern), cwd. Each list has a limit of 10 or 20 items. Needs the setting pluginSuggestionMarketplaces.
๐Ÿงชย experimentalDocumentedHolds component declarations.validate warns when it is not an object.

Plugin Sourcesโ€‹

The source of an entry tells Claude Code where to fetch the plugin.

SourceStatusFieldsHow It Works
Relative path stringDocumentedA folder in the marketplace.Starts with ./, no .., no backslash. A bare name works only under metadata.pluginRoot.
githubDocumentedrepo, ref, shasha is 40 lowercase hex characters.
urlDocumentedurl, ref, shaA git URL.
git-subdirDocumentedurl, path, ref, shaUses a sparse, partial clone.
npmDocumentedpackage, version, registryInstall scripts never run. Git, file, and alias specs are refused.
archiveDocumentedurl, sha256An HTTPS zip file. Needs 2.1.224 or later.
commandDocumentedcommand, timeout, modeThe command prints one absolute path (500 characters at most). timeout is 1 to 600 seconds, default 60. mode is copy or link. A copy is limited to 256 MiB or 20,000 entries. link does not work on Windows. Off with disableCommandPluginSources.
unsupportedUndocumentedNoneA placeholder that the parser makes. An author cannot write it.

Marketplace Sourcesโ€‹

These sources go in extraKnownMarketplaces, strictKnownMarketplaces, and blockedMarketplaces.

SourceStatusFieldsHow It Works
githubDocumentedrepo, ref, path, sparsePathsThe form owner/* works only in policy lists.
gitDocumentedurl, ref, path, sparsePathsskipLfs is accepted and ignored.
urlDocumentedurl, headers, headersHelperFetches only the JSON file, so plugin entries cannot use relative sources.
file, directoryDocumentedpathRead in place.
settingsDocumentedname, plugins, ownerAn inline catalog in extraKnownMarketplaces. Entries need remote sources.
npmDocumentedpackagePolicy lists parse it, but loading fails with "NPM marketplace sources not yet implemented".
skills-dir, hostPattern, pathPatternDocumentedPolicy-only valuesskills-dir keeps skills-directory plugins loading under an allowlist. The patterns are regular expressions.

Settings Keysโ€‹

Source: Manage Claude Code Plugins for Your Organization and Settings Reference. The full key list is on Hooks, Plugins, and Skills Settings.

KeyStatusWhat It DoesHow It Works
extraKnownMarketplacesDocumentedDeclares marketplaces.A map of name to { "source": ... }. Project values apply after you trust the folder.
additionalMarketplacesDocumentedAlias of extraKnownMarketplaces.If both are set, Claude Code ignores the alias and warns.
strictKnownMarketplacesDocumentedAllowlist of marketplace sources.Checked before download. It does not register anything. Managed settings.
allowedMarketplacesDocumentedAlias of strictKnownMarketplaces.Managed only.
blockedMarketplacesDocumentedBlocklist of marketplace sources.Checked before download. Managed settings.
pluginSuggestionMarketplacesDocumentedLists marketplaces that may suggest plugins.Without it, no marketplace suggestion shows.
disableCommandPluginSourcesDocumentedTurns off command plugin sources.Managed settings.

Exampleโ€‹

.claude-plugin/marketplace.json
{
"name": "team-tools",
"owner": { "name": "Platform Team", "email": "platform@example.com" },
"metadata": { "pluginRoot": "./plugins" },
"plugins": [
{ "name": "lint-helper", "source": "lint-helper" },
{
"name": "deploy-tools",
"source": { "source": "github", "repo": "example/deploy-tools", "ref": "v1.2.0" },
"category": "ops"
}
]
}
Settings: let a project suggest this marketplace
{
"extraKnownMarketplaces": {
"team-tools": { "source": { "source": "github", "repo": "example/team-tools" } }
}
}

How It Worksโ€‹

Policy lists are checked before any download. If a marketplace fails to refresh, Claude Code keeps the old checkout only when CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE is 1.