Overview
Creating and distributing a marketplace involves:- Create 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.
- Create the 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.
/plugin marketplace update.
Walkthrough: create a local marketplace
This example creates a marketplace with one plugin: aquality-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.
1
Create the directory structure
2
Create the skill
Create a
SKILL.md file that defines what the quality-review skill does.my-marketplace/plugins/quality-review-plugin/skills/quality-review/SKILL.md
3
Create the plugin manifest
Create a
plugin.json file that describes the plugin. The manifest goes in the .claude-plugin/ directory.my-marketplace/plugins/quality-review-plugin/.claude-plugin/plugin.json
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 to choose the right approach.4
Create the marketplace file
Create the marketplace catalog that lists your plugin.
my-marketplace/.claude-plugin/marketplace.json
5
Add and install
Add the marketplace and install the plugin.
6
Try it out
Select some code in your editor and run your new skill. Plugin skills are namespaced with the plugin name.
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 a source that tells Claude Code where to fetch it from. See the full schema below for all available fields.
Marketplace schema
Required fields
Reserved names: the following marketplace names are reserved for official Anthropic use and canât be used by third-party marketplaces:
claude-code-marketplace, claude-code-plugins, claude-plugins-official, claude-plugins-community, claude-community, anthropic-marketplace, anthropic-plugins, agent-skills, anthropic-agent-skills, knowledge-work-plugins, life-sciences, claude-for-legal, claude-for-financial-services, financial-services-plugins, first-party-plugins, healthcare. Names that impersonate official marketplaces, such as official-claude-plugins or anthropic-plugins-v2, are also blocked. Reserving these names prevents a third-party marketplace from presenting itself as an Anthropic-published source.Claude Code re-checks reserved names every time it loads a marketplace, not only when you add one. A marketplace that was registered under one of these names before the name became reserved stops loading and reports that it is registered from an untrusted source. Remove that marketplace and re-add it from the official Anthropic source. A third-party marketplace affected by a newly reserved name loads again as soon as you re-add it under a different name. Before v2.1.205, first-party-plugins and healthcare werenât reserved, and a marketplace already registered under a reserved name kept loading.Owner fields
Optional fields
description and version are also accepted under metadata for backward compatibility.
Plugin entries
Each plugin entry in theplugins array describes a plugin and where to find it. You can include any field from the plugin manifest schema, such as description, version, author, commands, and hooks, plus these marketplace-specific fields: source, category, tags, strict, and relevance.
Required fields
Optional plugin fields
Standard metadata fields:
Component configuration fields:
Plugin sources
Plugin sources tell Claude Code where to fetch each individual plugin listed in your marketplace. These are set in thesource field of each plugin entry in marketplace.json.
After Claude Code clones or downloads a plugin to the local machine, it copies the plugin into the local versioned plugin cache at ~/.claude/plugins/cache.
Marketplace sources vs plugin sources: These are different concepts that control different things.
- Marketplace source: where to fetch the
marketplace.jsoncatalog itself. Set when users run/plugin marketplace addor inextraKnownMarketplacessettings. Supportsref(branch/tag) but notsha. - Plugin source: where to fetch an individual plugin listed in the marketplace. Set in the
sourcefield of each plugin entry insidemarketplace.json. Supports bothref(branch/tag) andsha(exact commit).
acme-corp/plugin-catalog (marketplace source) can list a plugin fetched from acme-corp/code-formatter (plugin source). The marketplace source and plugin source point to different repositories and are pinned independently.github, url, and git-subdir. When both ref and sha are set on any of them, the sha is the effective pin. Claude Code fetches and checks out the pinned commit directly.
On most git hosts, including GitHub, GitLab, and Bitbucket, this means installation succeeds even if the branch or tag named by ref has since been deleted upstream, as long as the commit is still reachable from the repository. Some servers, such as AWS CodeCommit, donât support fetching commits by SHA. On those servers the ref must still exist and the pinned commit must be reachable from it.
Relative paths
For plugins in the same repository, use a path starting with./:
.claude-plugin/. In the example above, ./plugins/my-plugin points to <repo>/plugins/my-plugin, even though marketplace.json lives at <repo>/.claude-plugin/marketplace.json. Donât use ../ to reference paths outside the marketplace root.
Relative paths resolve against a local copy of the marketplace, so they work when users add your marketplace from a git source or a local directory. If users add your marketplace via a direct URL to the
marketplace.json file, relative paths wonât resolve, because only that file is downloaded. For URL-based distribution, use GitHub, npm, or git URL sources instead. See Troubleshooting for details.GitHub repositories
Git repositories
Git subdirectories
Usegit-subdir to point to a plugin that lives inside a subdirectory of a git repository. Claude Code uses a sparse, partial clone to fetch only the subdirectory, minimizing bandwidth for large monorepos.
url field also accepts a GitHub shorthand (owner/repo) or SSH URLs (git@github.com:owner/repo.git).
npm packages
Plugins distributed as npm packages are installed usingnpm install. This works with any package on the public npm registry or a private registry your team hosts.
version field:
registry field:
Advanced plugin entries
This example shows a plugin entry using many of the optional fields, including custom paths for commands, agents, hooks, and MCP servers:commandsandagents: you can specify multiple directories or individual files. Paths are relative to the plugin root.${CLAUDE_PLUGIN_ROOT}: use this variable in hook commands and MCP server configs to reference files within the pluginâs installation directory. This is necessary because plugins are copied to a cache location when installed.- See the substitution table for which config fields substitute it per server type
- For dependencies or state that should survive plugin updates, use
${CLAUDE_PLUGIN_DATA}instead
strict: false: since this is set to false, the plugin doesnât need its ownplugin.json. The marketplace entry defines everything. See Strict mode below.
skills/ directory under its source. Paths listed in the skills field add to that scan:
skills/ folder at the marketplace root (source: "./"), list specific subdirectories instead so each entry loads only its own skills:
source, the listed paths are the complete set for that entry, and other directories in the shared skills/ folder donât load. Listing ./skills/ itself, or the plugin root, keeps the full scan. If none of the listed paths exist, the default scan runs instead.
Strict mode
Thestrict field controls whether plugin.json is the authority for component definitions (skills, agents, hooks, MCP servers, output styles).
When to use each mode:
strict: true: the plugin has its ownplugin.jsonand manages its own components. The marketplace entry can add extra skills or hooks on top. This is the default and works for most plugins.strict: false: the marketplace operator wants full control. The plugin repo provides raw files, and the marketplace entry defines which of those files are exposed as skills, agents, hooks, etc. Useful when the marketplace restructures or curates a pluginâs components differently than the plugin author intended.
Host and distribute marketplaces
Host on GitHub (recommended)
GitHub is the recommended way to host and distribute a marketplace:- Create a repository: set up a new repository for your marketplace
- Add marketplace file: create
.claude-plugin/marketplace.jsonwith your plugin definitions - Share with teams: users add your marketplace with
/plugin marketplace add owner/repo
Host on other git services
Any git hosting service works, such as GitLab, Bitbucket, and self-hosted servers. Users add with the full repository URL:Private repositories
Claude Code supports installing plugins from private repositories. For manual installation and updates, Claude Code uses your existing git credential helpers, so HTTPS access viagh auth login, macOS Keychain, or git-credential-store works the same as in your terminal. SSH access works as long as the host is already in your known_hosts file and the key is loaded in ssh-agent, since Claude Code suppresses interactive SSH prompts for the host fingerprint and key passphrase. GitHub owner/repo shorthand sources clone over SSH by default; set CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1 to clone them over HTTPS instead.
Background auto-updates work differently. By default, the background refresh disables git credential helpers for its git pull, so the pull canât authenticate to private repositories over HTTPS even when a helper is configured. SSH remotes arenât affected: a key loaded in ssh-agent authenticates background pulls the same way as manual operations. When the background pull fails, Claude Code falls back to re-cloning the marketplace from scratch. The re-clone does use your stored git credentials, but it can time out on large repositories, so private-marketplace auto-updates may fail intermittently.
Two settings make private marketplaces behave predictably:
- Set
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1to keep the existing clone when the background pull fails, instead of deleting and re-cloning. Your plugins keep working from the last synced state, and manual updates with/plugin marketplace updatestill pull with your credentials. - Configure a git credential helper, for example with
gh auth setup-gitfor GitHub, so the re-clone fallback can authenticate without prompting.
GITHUB_TOKEN in your environment doesnât by itself enable background authentication. Tokens take effect only through a configured credential helper, for example the gh CLIâs helper, which reads GH_TOKEN and GITHUB_TOKEN.
To make the background pull itself authenticate over HTTPS, configure a global git URL rewrite. The rewrite embeds a token in the remote URL, so it takes effect even though the background pull disables credential helpers, and a successful pull skips the re-clone fallback. The following example rewrites the marketplace repositoryâs URL to include an access token:
The rewrite stores the token in plaintext in your gitconfig, so use a token with read-only access to the marketplace repository.
In CI/CD environments, configure a git credential helper before installing plugins from private repositories. On GitHub Actions, export a token with read access to the marketplace repository as
GH_TOKEN, then run gh auth setup-git. The default workflow token can only access the workflowâs own repository, so a private marketplace in another repository needs a personal access token or app token. A global URL rewrite configured in the pipeline also authenticates the background pull directly.Test locally before distribution
Test your marketplace locally before sharing:Require marketplaces for your team
You can configure your repository so team members are automatically prompted to install your marketplace when they trust the project folder. Add your marketplace to.claude/settings.json:
If you use a local
directory or file source with a relative path, the path resolves against your repositoryâs main checkout. When you run Claude Code from a git worktree, the path still points at the main checkout, so all worktrees share the same marketplace location. Marketplace state is stored once per user in ~/.claude/plugins/known_marketplaces.json, not per project.Pre-populate plugins for containers
For container images and CI environments, you can pre-populate a plugins directory at build time so Claude Code starts with marketplaces and plugins already available, without cloning anything at runtime. Set theCLAUDE_CODE_PLUGIN_SEED_DIR environment variable to point at this directory.
To layer multiple seed directories, separate paths with : on Unix or ; on Windows. Claude Code searches each directory in order and uses the first seed that contains a given marketplace or plugin cache.
The seed directory mirrors the structure of ~/.claude/plugins:
~/.claude/plugins directory into your image and point CLAUDE_CODE_PLUGIN_SEED_DIR at it.
To skip the copy step, set CLAUDE_CODE_PLUGIN_CACHE_DIR to your target seed path during the build so plugins install directly there:
CLAUDE_CODE_PLUGIN_SEED_DIR=/opt/claude-seed in your containerâs runtime environment so Claude Code reads from the seed on startup.
At startup, Claude Code registers marketplaces found in the seedâs known_marketplaces.json into the primary configuration, and uses plugin caches found under cache/ in place without re-cloning. This works in both interactive mode and non-interactive mode with the -p flag.
Behavior details:
- Read-only: the seed directory is never written to. Auto-updates are disabled for seed marketplaces since git pull would fail on a read-only filesystem.
- Seed entries take precedence: marketplaces declared in the seed overwrite any matching entries in the userâs configuration on each startup. To opt out of a seed plugin, use
/plugin disablerather than removing the marketplace. - Path resolution: Claude Code locates marketplace content by probing
$CLAUDE_CODE_PLUGIN_SEED_DIR/marketplaces/<name>/at runtime, not by trusting paths stored inside the seedâs JSON. This means the seed works correctly even when mounted at a different path than where it was built. - Mutation is blocked: running
/plugin marketplace removeor/plugin marketplace updateagainst a seed-managed marketplace fails with guidance to ask your administrator to update the seed image. - Composes with settings: if
extraKnownMarketplacesorenabledPluginsdeclare a marketplace that already exists in the seed, Claude Code uses the seed copy instead of cloning.
Managed marketplace restrictions
For organizations requiring strict control over plugin sources, administrators can restrict which plugin marketplaces users are allowed to add using thestrictKnownMarketplaces setting in managed settings. To also reject the CLI flags that sideload plugins, agents, and MCP servers for a single run, pair it with disableSideloadFlags. To allowlist which marketplacesâ plugins can appear as contextual install suggestions, set pluginSuggestionMarketplaces.
When strictKnownMarketplaces is configured in managed settings, the restriction behavior depends on the value:
Common configurations
Disable all marketplace additions:".*" as the pathPattern to allow any filesystem path while still controlling network sources with hostPattern.
strictKnownMarketplaces restricts what users can add, but doesnât register marketplaces on its own. To make allowed marketplaces available automatically without users running /plugin marketplace add, pair it with extraKnownMarketplaces in the same managed-settings.json. See Using both together.How restrictions work
Restrictions are checked before any network or filesystem operation. The check runs on marketplace add and on plugin install, update, refresh, and auto-update. If a marketplace was added before the policy was configured and its source no longer matches the allowlist, Claude Code refuses to install or update plugins from it. The same enforcement applies toblockedMarketplaces.
The allowlist uses exact matching for most source types. For a marketplace to be allowed, all specified fields must match exactly:
- For GitHub sources:
repois required, andreforpathmust also match if specified in the allowlist - For URL sources: the full URL must match exactly
- For
hostPatternsources: the marketplace host is matched against the regex pattern - For
pathPatternsources: the marketplaceâs filesystem path is matched against the regex pattern
.git suffix, or ssh:// versus https:// form are treated as different values. If your organizationâs marketplace can be cloned by more than one URL form, prefer a hostPattern entry over a literal URL so all forms match.
Because strictKnownMarketplaces is set in managed settings, individual users and project configurations canât override these restrictions.
For complete configuration details including all supported source types and comparison with extraKnownMarketplaces, see the strictKnownMarketplaces reference.
Version resolution and release channels
Plugin versions determine cache paths and update detection: if the resolved version matches what a user already has,/plugin update and auto-update skip the plugin.
Claude Code resolves a pluginâs version from the first of these that is set:
versionin the pluginâsplugin.jsonversionin the pluginâs marketplace entry- The git commit SHA of the pluginâs source
github, url, git-subdir, and relative paths inside a git-hosted marketplace, you can omit version entirely and every new commit is treated as a new version. This is the simplest setup for internal or actively-developed plugins.
Set up release channels
To support âstableâ and âlatestâ release channels for your plugins, you can set up two marketplaces that point to different refs or SHAs of the same repo. You can then assign the two marketplaces to different user groups through managed settings.Example
Assign channels to user groups
Assign each marketplace to the appropriate user group through managed settings. For example, the stable group receives:latest-tools instead:
Pin dependency versions
A plugin can constrain its dependencies to a semver range so that updates to a dependency donât break the dependent plugin. See Constrain plugin dependency versions for the{plugin-name}--v{version} git-tag convention, range syntax, and how multiple constraints on the same dependency are combined.
Rename or remove a plugin
A pluginâsname is its stable identifier. Users reference it in enabledPlugins, pluginConfigs, and /plugin install commands, so changing it breaks every existing install. To change the label shown in the UI without breaking installs, set displayName and keep name unchanged.
If you must change a pluginâs name, or you remove a plugin from the plugins array, add a top-level renames entry so existing users migrate instead of seeing a plugin-not-found error. Automatic migration requires Claude Code v2.1.193 or later. Map each former name to its current name, or to null if the plugin no longer exists. The following example renames formatter to code-formatter and records that legacy-linter was removed:
renames map:
- If the entry points to a new name, Claude Code loads the plugin under its new name and shows a one-line notice such as
Renamed to "code-formatter" in the "acme-tools" marketplace. It then rewrites the old key to the new key in the user, project, and local settings scopes for bothenabledPluginsandpluginConfigs, so the notice appears once. - For a
nullentry, Claude Code drops the old key and the notice reports that the plugin was removed from the marketplace. - If the renamed plugin uses a remote source such as
githubornpm, Claude Code reportsplugin-cache-missafter the rename and the user must run/plugin installonce to fetch it under the new name.
renames as append-only history: keep old entries in place even after you expect every user to have migrated. Claude Code follows chains, so if you later rename code-formatter to formatter-pro, add a second entry rather than editing the first. A user who still has the original formatter enabled then resolves through both entries to formatter-pro.
Run claude plugin validate . after editing the map; it rejects any entry whose chain forms a cycle or doesnât terminate at null or a name listed in plugins.
Managed and policy settings are read-only to Claude Code, so plugins enabled there canât be rewritten automatically. The renamed plugin still loads each session, but the rename notice recurs until an administrator updates
enabledPlugins in the managed settings file to use the new name. The same applies to plugins enabled through other read-only sources such as --add-dir.renames field and report plugin-not-found for the old name.
Validation and testing
Test your marketplace before sharing. Validate your marketplace JSON syntax:Manage marketplaces from the CLI
Claude Code provides non-interactiveclaude plugin marketplace subcommands for scripting and automation. These are equivalent to the /plugin marketplace commands available inside an interactive session.
Plugin marketplace add
Add a marketplace from a GitHub repository, git URL, remote URL, or local path.<source>: GitHubowner/reposhorthand, git URL, remote URL to amarketplace.jsonfile, or local directory path. To pin to a branch or tag, append@refto the GitHub shorthand or#refto a git URL
gitlab.example.com/team/plugins, is rejected as an invalid owner/repo shorthand and the error tells you to add https:// or use ./ for a local path. Earlier versions misread it as a GitHub repository path and fail at clone time with a GitHub not-found error.
Options:
Add a marketplace from GitHub using
owner/repo shorthand:
@ref:
marketplace.json file directly:
.claude/settings.json:
Plugin marketplace list
List all configured marketplaces.
With
--json, each entry includes name, source, and source-specific fields: repo for GitHub sources, url for git and URL sources, and path for local sources. GitHub and git sources also include a ref field when the marketplace was added with a pinned branch or tag.
Plugin marketplace remove
Remove a configured marketplace. The aliasrm is also accepted.
<name>: marketplace name to remove, as shown byclaude plugin marketplace list. This is thenamefrommarketplace.json, not the source you passed toadd
Plugin marketplace update
Refresh marketplaces from their sources to retrieve new plugins and version changes. A marketplace added with a branch or tagref updates to the latest commit of that ref, not the repositoryâs default branch.
[name]: marketplace name to update, as shown byclaude plugin marketplace list. Updates all marketplaces if omitted
remove and update fail when run against a seed-managed marketplace, which is read-only. When updating all marketplaces, seed-managed entries are skipped and other marketplaces still update. To change seed-provided plugins, ask your administrator to update the seed image. See Pre-populate plugins for containers.
Troubleshooting
Marketplace not loading
Symptoms: Canât add marketplace or see plugins from it Solutions:- Verify the marketplace URL is accessible
- Check that
.claude-plugin/marketplace.jsonexists at the specified path - Ensure JSON syntax is valid using
claude plugin validateor/plugin validate. To check skill, agent, and command frontmatter, run the command against each plugin directory - For private repositories, confirm you have access permissions
Marketplace validation errors
Runclaude plugin validate . or /plugin validate . from your marketplace directory to check for issues. When pointed at a marketplace directory, the validator checks marketplace.json for schema errors, duplicate plugin names, and source path traversal. For each entry whose source is a local path, it also validates that pluginâs own plugin.json and warns when the entryâs version doesnât match the one in plugin.json. Problems found in a pluginâs plugin.json are prefixed with the entry index, in the form plugins[2] plugin.json â.
As of Claude Code v2.1.196, the per-entry pass also:
- includes plugins whose
sourceis. - runs when
marketplace.jsonis outside a.claude-plugindirectory, resolving sources against the fileâs own directory - reports each entryâs problems even when another part of the file has schema errors
.claude-plugin/marketplace.json.
To validate an individual pluginâs plugin.json and its skill, agent, command, and hook files, run the command against the plugin directory itself, for example claude plugin validate ./plugins/my-plugin. Common errors:
Warnings (non-blocking):
Marketplace has no plugins defined: add at least one plugin to thepluginsarrayNo marketplace description provided: add a top-leveldescriptionto help users understand your marketplacePlugin name "x" is not kebab-case: the plugin name contains uppercase letters, spaces, or special characters. Rename to lowercase letters, digits, and hyphens only (for example,my-plugin). Claude Code accepts other forms, but the claude.ai marketplace sync rejects them.
Plugin installation failures
Symptoms: Marketplace appears but plugin installation fails Solutions:- Verify plugin source URLs are accessible
- Check that plugin directories contain required files
- For GitHub sources, ensure repositories are public or you have access
- Test plugin sources manually by cloning/downloading
- If the source pins both
refandsha, a deleted upstream branch or tag doesnât block installation on most git hosts, including GitHub, GitLab, and Bitbucket. On servers that donât support fetching commits by SHA, such as AWS CodeCommit, therefmust still exist and the pinned commit must be reachable from it. If the install still fails, confirm the pinned commit still exists in the repository
Private repository authentication fails
Symptoms: Authentication errors when installing plugins from private repositories Solutions: For manual installation and updates:- Verify youâre authenticated with your git provider (for example, run
gh auth statusfor GitHub) - Check that your credential helper is configured correctly:
git config --global credential.helper - Try cloning the repository manually to verify your credentials work
- By default, background refreshes disable git credential helpers for the pull, so the pull canât authenticate over HTTPS. SSH remotes with a key loaded in
ssh-agentstill authenticate. A failed pull triggers a re-clone from scratch, which uses your stored credentials but may time out on large repositories - Set
CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1to keep the existing clone when the background pull fails - Configure a git credential helper, for example
gh auth setup-git, so the re-clone fallback can authenticate - If the re-clone times out on a large repository, increase the limit with
CLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS - Configure a git URL rewrite scoped to the marketplace repository so the background pull authenticates directly
- Or update private marketplaces manually with
/plugin marketplace update <name>, which uses your credentials
Marketplace updates fail in offline environments
Symptoms: Marketplacegit pull fails in the background and Claude Code repeatedly attempts a re-clone that canât succeed.
Cause: By default, when a git pull fails, Claude Code attempts a re-clone from scratch. In offline or airgapped environments, re-cloning fails the same way, and the restore of the previous cache afterward is best-effort. The refresh runs in the background after startup, so it doesnât delay startup, but each session repeats the failed attempts and each git operation can wait out the 120-second timeout.
Solution: Set CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE=1 to skip the re-clone attempt and keep using the existing cache when the pull fails:
git pull failure and continues using the last-known-good state. For fully offline deployments where the repository will never be reachable, use CLAUDE_CODE_PLUGIN_SEED_DIR to pre-populate the plugins directory at build time instead.
Git operations time out
Symptoms: Plugin installation or marketplace updates fail with a timeout error like âGit clone timed out after 120sâ or âGit pull timed out after 120sâ. Cause: Claude Code uses a 120-second timeout for all git operations, including cloning plugin repositories and pulling marketplace updates. Large repositories or slow network connections may exceed this limit. Solution: Increase the timeout using theCLAUDE_CODE_PLUGIN_GIT_TIMEOUT_MS environment variable. The value is in milliseconds:
Plugins with relative paths fail in URL-based marketplaces
Symptoms: Added a marketplace via URL (such ashttps://example.com/marketplace.json), but plugins with relative path sources like "./plugins/my-plugin" fail to install with âpath not foundâ errors.
Cause: URL-based marketplaces only download the marketplace.json file itself. They donât download plugin files from the server. Relative paths in the marketplace entry reference files on the remote server that were not downloaded.
Solutions:
- Use external sources: Change plugin entries to use GitHub, npm, or git URL sources instead of relative paths:
- Use a Git-based marketplace: Host your marketplace in a Git repository and add it with the git URL. Git-based marketplaces clone the entire repository, making relative paths work correctly.
Files not found after installation
Symptoms: Plugin installs but references to files fail, especially files outside the plugin directory Cause: Plugins are copied to a cache directory rather than used in-place. Paths that reference files outside the pluginâs directory (such as../shared-utils) wonât work because those files arenât copied.
Solutions: See Plugin caching and file resolution for workarounds including symlinks and directory restructuring.
For additional debugging tools and common issues, see Debugging and development tools.
See also
- Discover and install prebuilt plugins - Installing plugins from existing marketplaces
- Plugins - Creating your own plugins
- Plugins reference - Complete technical specifications and schemas
- Plugin settings - Plugin configuration options
- strictKnownMarketplaces reference - Managed marketplace restrictions