Directory-source marketplace: cached marketplace.json not refreshed on update, so plugin version stays stale
Directory-source marketplace: plugin version shown in the marketplace never updates (cached marketplace.json not refreshed)
Summary
For a marketplace registered with source: directory, updating the marketplace does not refresh the cached copy of the marketplace's marketplace.json. As a result, the marketplace browser keeps reporting a stale plugin version indefinitely, even after the source directory's marketplace.json has been bumped and an in-app "update" has been run (which reports success).
The installed plugin itself can still be updated to the newer version, so this is specifically a stale-metadata / cache-invalidation bug in how directory-source marketplaces are refreshed — not a problem with installing the plugin.
Environment
- Claude Code: 2.1.197
- Node: v22.19.0
- OS: Linux 6.6.87.2-microsoft-standard-WSL2 x86_64 (WSL2 on Windows)
- Marketplace source type:
directory(local path)
Repro
- Register a marketplace from a local directory:
``json``
// ~/.claude/plugins/known_marketplaces.json
"my-marketplace-local": {
"source": { "source": "directory", "path": "/path/to/marketplace" },
"installLocation": "~/.claude/plugins/marketplaces/my-marketplace-local"
}
- Install a plugin from it (e.g.
my-pluginat0.3.0). - In the source directory, bump that plugin's
versionin.claude-plugin/marketplace.json(e.g.0.3.0→0.4.0). (In our case this happened across two bumps:0.3.0→0.3.1→0.4.0.) - Run the in-app marketplace update for
my-marketplace-local.
Expected
The marketplace browser shows my-plugin at the new version (0.4.0), matching the source directory's marketplace.json.
Actual
The marketplace browser keeps showing the old version (0.3.0). The update reports success but the displayed version never changes across repeated update attempts.
Root cause (observed)
Claude Code maintains a cached copy of the marketplace manifest at:
~/.claude/plugins/marketplaces/<name>/.claude-plugin/marketplace.json
The marketplace browser reads this cached copy, but for a directory source the update flow never re-copies it from the source path. Concrete evidence from our install:
known_marketplaces.json→wave-marketplace-local.lastUpdated= 2026-06-30T22:07:50Z (an update clearly ran).- The cached
marketplaces/wave-marketplace-local/.claude-plugin/marketplace.jsonwas last modified 2026-05-20 19:55 and still contained"version": "0.3.0"for the plugin. - The source
/mnt/d/Git/wave-marketplace/.claude-plugin/marketplace.jsoncontained"version": "0.4.0". installed_plugins.jsonandcache/wave-marketplace-local/<plugin>/0.4.0/showed the plugin was installed at0.4.0.
So: the lastUpdated timestamp is bumped on update, but the cached marketplace.json (the file the listing UI reads) is never rewritten for a directory source. Contrast with github-source marketplaces, where the cached manifest is refreshed via git pull and stays current.
Workaround
Manually overwrite the cached manifest from the source, then restart Claude Code:
cp /path/to/marketplace/.claude-plugin/marketplace.json \
~/.claude/plugins/marketplaces/<name>/.claude-plugin/marketplace.json
After this the browser shows the correct version.
Suggested fix
On marketplace update for a source: directory marketplace, re-copy .claude-plugin/marketplace.json (and any other manifest assets) from the source path into the cached installLocation, the same way github sources are re-pulled. Bumping lastUpdated without rewriting the cached manifest is what produces the silent, persistent staleness.
Related issues
- #14061 —
/plugin updatedoes not invalidate plugin cache. Related but distinct: that report is agithubsource wheremarketplaces/is git-pulled correctly but the plugin cache files stay stale. This report is the inverse — adirectorysource where the plugin cache files did update to the new version, but the cachedmarketplace.jsonmanifest (and thus the displayed version) never refreshed. - #36700 — Cowork remote plugins: no path to force-update stale marketplace cache (Windows). Same "stale marketplace cache" theme in a different (cowork/remote) context.
- #71074 — Plugin cache accumulates old version directories; no pruning after update. We also observed an orphaned
cache/.../navi/0.3.0/dir left beside0.4.0/.
Notes
- The directory source is on a Windows drive mounted into WSL2 (
/mnt/d/...); unclear whether the mount is relevant, but flagging it for completeness. - The plugin installing correctly to
0.4.0while the listing showed0.3.0confirms install and listing read from different sources (live source vs. stale cached manifest).
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗