Follow Discord
Sweep 22 Oct 2026 · 21:04Z Build v2.1.309 528 read Stable v2.1.308 Latest v2.1.309 Next v2.1.309 Feeds RSS JSON llms.txt llms-full.txt Unofficial

Claude Code v2.1.281 ·

Plugin marketplaces no longer report a failed refresh as fresh, and can fall back to a stale cache

When a marketplace refresh falls back to the old copy, its last-updated time stays put, and stale catalog caches can now be used

Group of 2 You'll notice Internal Changes
JSON All of v2.1.281
You'll noticeTier: how much it should matter to you
2Useful: my rating, 1 to 5
2Signal: worth watching, 1 to 5
PluginsArea: what it touches
Internal ChangesKind: in v2.1.281,
ImprovementsSection of the release

Unclear The finding does not say which lookups use allowStale or what the new reserved-name special case does.

What

A plugin marketplace is a catalog of plugins that Claude Code keeps as a local git copy (a clone) and refreshes from time to time. This release changes what happens when a refresh cannot reach the remote.

  • The git marketplace refresh now returns { kind: "current" } when the clone is already up to date. It returns { kind: "kept-stale" } when the remote is unreachable and CLAUDE_CODE_PLUGIN_KEEP_MARKETPLACE_ON_FAILURE keeps the old clone. Both cases used to return nothing.
  • The marketplace load result now carries a keptStaleClone flag for the second case. The catalog-publish path always sets it to false.
  • When keptStaleClone is set, lastUpdated is not moved to now, the post-load step is skipped, and the plugin list is not reloaded. For the official marketplace, only installLocation is updated, and only if that path changed. Re-adding such a marketplace keeps its previous lastUpdated time.
  • The event for a failed cloud fetch that falls back to git is now also recorded when the result was a stale clone. The refresh also records whether it was triggered in the background or by an update.
  • Marketplace and plugin lookups take a new reason argument: install, update, load or other.
  • The plugin catalog cache reader gains an allowStale option that skips the "Plugin catalog cache is stale (>24 h old)" rejection. Before, a stale cache was always rejected.
  • A reserved-name check has a new special case, and two placeholder functions that only return nothing in this build were added.

Why

The "last updated" time for a marketplace now reflects its last successful refresh, so it no longer looks up to date after a git refresh that actually failed. Plugins can also keep working from an older cached catalog when the network is unavailable.

How sure we are
Something disagreesSomething we can check disagrees with this entry, or the writer said they could not settle it.
The writer flagged doubtThe finding does not say which lookups use `allowStale` or what the new reserved-name special case does.

See this entry in the whole of v2.1.281 →

Feedback