Plugin dependencies changedplugins/dependencies
Nearest release: v2.1.299, published an hour before upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Upstream edited this page at 14 Oct 2026 01:58 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 23 Oct 2026 19:07 UTC.
Upstream edited
Recorded here
Lines+17added
Lines−17removed
From line
10
where the diff opens
First seen
25 Sep 2026
this site's first read of the page
Recorded edits7to this page, all time
The whole hunk
from line 10, old and new numbered
/
from line 10
1010>
1111> These cases are covered on other pages:
1212>
13> * **Installing a plugin that has dependencies**: see [Manage installed plugins](/docs/en/plugins/install.md#manage-installed-plugins)
14> * **Reading a dependency error**: see [Dependency errors](/docs/en/plugins/troubleshooting.md#dependency-errors)
15> * **Declaring the npm and Bun packages that your plugin's own code needs**: see [Node.js package dependencies](/docs/en/plugins/loading.md#node-js-package-dependencies)
13> * **Installing a plugin that has dependencies**: see [Manage installed plugins](https://code.claude.com/docs/en/plugins/install.md#manage-installed-plugins)
14> * **Reading a dependency error**: see [Dependency errors](https://code.claude.com/docs/en/plugins/troubleshooting.md#dependency-errors)
15> * **Declaring the npm and Bun packages that your plugin's own code needs**: see [Node.js package dependencies](https://code.claude.com/docs/en/plugins/loading.md#node-js-package-dependencies)
1616
1717To add a constraint, start at [Declare a dependency with a version constraint](#declare-a-dependency-with-a-version-constraint). If you maintain a plugin that others depend on, [tag your releases](#tag-plugin-releases-for-version-resolution) so their constraints can resolve.
1818
from line 69
6969}
7070```
7171
72To add a plugin to the standard set later, publish a new `backend-standard` version with the extra dependency. When the marketplace doesn't [auto-update by default](/docs/en/plugins/loading.md#which-marketplaces-and-plugins-auto-update), engineers either turn on auto-update for the marketplace or update manually:
72To add a plugin to the standard set later, publish a new `backend-standard` version with the extra dependency. When the marketplace doesn't [auto-update by default](https://code.claude.com/docs/en/plugins/loading.md#which-marketplaces-and-plugins-auto-update), engineers either turn on auto-update for the marketplace or update manually:
7373
7474* **Turn on auto-update for the marketplace**: the next auto-update moves the bundle to the new version and installs any dependencies it adds.
7575* **Update manually**: run `claude plugin update backend-standard` in a shell, then `/reload-plugins` in an open session to install the newly added dependencies.
7676
77For the engineer-side steps, see [Keep plugins updated](/docs/en/plugins/install.md#keep-plugins-updated).
77For the engineer-side steps, see [Keep plugins updated](https://code.claude.com/docs/en/plugins/install.md#keep-plugins-updated).
7878
79To deploy a bundle to everyone in an organization, an administrator adds it to `enabledPlugins` in managed settings. See [Pre-install and require plugins](/docs/en/plugins/org.md#pre-install-and-require-plugins).
79To deploy a bundle to everyone in an organization, an administrator adds it to `enabledPlugins` in managed settings. See [Pre-install and require plugins](https://code.claude.com/docs/en/plugins/org.md#pre-install-and-require-plugins).
8080
8181### Depend on a plugin from another marketplace
8282
from line 109
109109
110110### Test a plugin and its dependency locally
111111
112If you're developing a plugin and the plugin it depends on at the same time, start Claude Code from your shell and load both with [`--plugin-dir`](/docs/en/plugins/cli-reference#flags-that-load-a-plugin-for-one-session):
112If you're developing a plugin and the plugin it depends on at the same time, start Claude Code from your shell and load both with [`--plugin-dir`](https://code.claude.com/docs/en/plugins/cli-reference#flags-that-load-a-plugin-for-one-session):
113113
114114```bash theme={null}
115115claude --plugin-dir ./my-dependency --plugin-dir ./my-plugin
from line 129
129129
130130## Release a plugin that others depend on
131131
132If you maintain a plugin that other plugins depend on with a version constraint, tag its releases so those constraints can resolve. A constraint resolves against git tags on the repository that hosts the plugin. Tag the repository that the plugin's [plugin source](/docs/en/plugins/marketplace-reference.md#plugin-sources) in `marketplace.json` points at:
132If you maintain a plugin that other plugins depend on with a version constraint, tag its releases so those constraints can resolve. A constraint resolves against git tags on the repository that hosts the plugin. Tag the repository that the plugin's [plugin source](https://code.claude.com/docs/en/plugins/marketplace-reference.md#plugin-sources) in `marketplace.json` points at:
133133
134134* **`github`, `url`, or `git-subdir` source**: the plugin's own repository, so the plugin's author creates the tags
135135* **Relative path such as `./plugins/secrets-vault`**: the marketplace repository, so the marketplace maintainer creates the tags
from line 138
138138
139139Tag each release as `<plugin-name>--v<version>`, where `<version>` matches the `version` field in that commit's `plugin.json`. The plugin-name prefix lets one marketplace repository host several plugins with independent version histories.
140140
141Create the tag from the plugin directory, with an `origin` remote configured to receive the pushed tag, using [`claude plugin tag`](/docs/en/plugins/cli-reference#plugin-tag):
141Create the tag from the plugin directory, with an `origin` remote configured to receive the pushed tag, using [`claude plugin tag`](https://code.claude.com/docs/en/plugins/cli-reference#plugin-tag):
142142
143143```bash theme={null}
144144claude plugin tag --push
from line 155
155155
156156Pass `--dry-run` to see the plan without creating anything.
157157
158The [`claude plugin tag` reference](/docs/en/plugins/cli-reference#plugin-tag) lists the remaining flags.
158The [`claude plugin tag` reference](https://code.claude.com/docs/en/plugins/cli-reference#plugin-tag) lists the remaining flags.
159159
160160You can also run `git tag secrets-vault--v2.1.0` directly, as long as you keep the `version` in `plugin.json` and in the marketplace entry in sync yourself.
161161
162162### Constrain a dependency that has a non-git source
163163
164Tag-based resolution applies only to git-backed sources. For a dependency with an `npm`, `archive`, or `command` [plugin source](/docs/en/plugins/marketplace-reference.md#plugin-sources), the constraint doesn't control which version is fetched. It's still checked when the plugin loads, and the dependent plugin is disabled if the installed version doesn't satisfy it.
164Tag-based resolution applies only to git-backed sources. For a dependency with an `npm`, `archive`, or `command` [plugin source](https://code.claude.com/docs/en/plugins/marketplace-reference.md#plugin-sources), the constraint doesn't control which version is fetched. It's still checked when the plugin loads, and the dependent plugin is disabled if the installed version doesn't satisfy it.
165165
166166For `npm`, `archive`, and `command` sources, the version checked is the `version` in the dependency's `plugin.json`. Set one there before you constrain that dependency, because a `plugin.json` that sets no version satisfies no constraint.
167167
168Claude Code never installs a dependency with a `command` source itself, so users [install it first](/docs/en/plugins/marketplace-reference.md#command-plugin-source). It also never runs a dependency's [`headersHelper`](/docs/en/plugins/host-marketplace#authenticate-archive-downloads), so users also install a dependency whose marketplace entry sets one before they install your plugin.
168Claude Code never installs a dependency with a `command` source itself, so users [install it first](https://code.claude.com/docs/en/plugins/marketplace-reference.md#command-plugin-source). It also never runs a dependency's [`headersHelper`](https://code.claude.com/docs/en/plugins/host-marketplace#authenticate-archive-downloads), so users also install a dependency whose marketplace entry sets one before they install your plugin.
169169
170170Besides `claude plugin install`, these operations also install any missing declared dependency, and the `command` and `headersHelper` limits apply to them too:
171171
from line 193
193193
194194Constraint checks use the tag's version rather than the `version` in `plugin.json`, even if `plugin.json` at that commit lags behind.
195195
196If you force-move a tag to a different commit, the next install fetches that commit's content instead of reusing a stale cached copy. See [Versions and updates](/docs/en/plugins/loading.md#versions-and-updates) for how a plugin's version becomes its cache key.
196If you force-move a tag to a different commit, the next install fetches that commit's content instead of reusing a stale cached copy. See [Versions and updates](https://code.claude.com/docs/en/plugins/loading.md#versions-and-updates) for how a plugin's version becomes its cache key.
197197
198198### Combine constraints from several plugins
199199
from line 211
211211
212212### Dependencies when your plugin loads from claude.ai
213213
214When a user turns your plugin on for their claude.ai account, Claude Code loads it as `<name>@synced`, [with no marketplace](/docs/en/plugins/loading.md#synced-plugins). For that copy of your plugin, Claude Code counts a dependency entry that names a marketplace as met when the user has either of these:
214When a user turns your plugin on for their claude.ai account, Claude Code loads it as `<name>@synced`, [with no marketplace](https://code.claude.com/docs/en/plugins/loading.md#synced-plugins). For that copy of your plugin, Claude Code counts a dependency entry that names a marketplace as met when the user has either of these:
215215
216216* **The dependency from its marketplace**: installed from the marketplace your entry names, and enabled. Claude Code checks a `version` range in your entry against the installed copy's version.
217217* **A claude.ai plugin of the same name**: enabled from their claude.ai account. Claude Code checks a `version` range in your entry against that plugin's `version`, and a plugin that states no `version` passes the check.
from line 222
222222
223223## See also
224224
225* [`claude plugin prune`](/docs/en/plugins/cli-reference#plugin-prune): remove auto-installed dependencies no plugin needs anymore
226* [Host a marketplace](/docs/en/plugins/host-marketplace.md): release channels and recommending other plugins
225* [`claude plugin prune`](https://code.claude.com/docs/en/plugins/cli-reference#plugin-prune): remove auto-installed dependencies no plugin needs anymore
226* [Host a marketplace](https://code.claude.com/docs/en/plugins/host-marketplace.md): release channels and recommending other plugins
227227
No line in this hunk matches that.