How to Update Claude Code (and Fix It Not Updating)

18 min read

See how to update Claude Code on Windows for each install method, the VS Code extension and the desktop app, and how to roll back or fix an update that won't apply.

Renaissance-style study of an orrery and geometric instruments on a scholar's table, a red thread tracing an orbit

A Windows machine can run at least three separate copies of Claude Code at once: the standalone CLI that answers when you type claude, the copy the VS Code extension bundles for its chat panel, and the copy the Claude desktop app downloads for its Code tab. Each copy updates by its own route, and claude update moves the standalone CLI alone. So how to update Claude Code depends on which copy you mean.

Name the copy before you update it, and read the version back from that same copy once it has restarted. A claude --version typed into VS Code’s terminal reports the standalone CLI while the chat panel beside it runs the extension’s bundled CLI, so a check against the wrong copy makes a finished update look like a failed one.

I build this site with the Claude Code extension in VS Code on Windows 11, with Git Bash and PowerShell as shells and a standalone CLI installed beside it. Every command below was checked against Anthropic’s documentation and Microsoft’s and npm’s docs on 16 October 2026; when they change, Anthropic’s setup page is the source to follow.

How to Update Claude Code

Run claude update in a terminal to upgrade Claude Code to the newest release on your channel, then confirm it with claude --version. Native and npm installs also update in the background, switching at the next start. WinGet, Homebrew and Linux package installs need their own upgrade command; the VS Code extension and desktop app update their own copies.

Copy and install methodUpdates on its own?Update it nowRead its version
Standalone CLI from the PowerShell or CMD installerYes: it checks on startup and periodically while running, installs in the background and switches at the next startclaude updateclaude --version
Standalone CLI from WinGetNo, unless you set CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE=1winget upgrade Anthropic.ClaudeCode, with Claude Code closedclaude --version
Standalone CLI from npmYes, while the npm global folder is writableclaude update, or npm install -g @anthropic-ai/claude-code@latestclaude --version
Standalone CLI from Homebrew (macOS)No, unless you set CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE=1brew upgrade claude-code, or brew upgrade claude-code@latest if you installed that caskclaude --version
Standalone CLI from apt, dnf or apk (Linux)No: updates arrive through your normal system upgradeThe upgrade command in Anthropic’s Linux package stepsclaude --version
The VS Code extension’s bundled CLIYes, through VS Code’s extension auto-update, 12 hours after the extension update is published, by defaultThe Update button on Claude Code in the Extensions viewThe extension’s version in the Extensions view, or /status in the chat panel
The desktop app’s copy, in the Code tabYes: the app downloads and updates it, and the app auto-updates on launchHelp > Check for Updates, then start a new session/status in a local session, the Claude Code row
A fourth copy on Windows: a Linux install inside WSL 2Yes for a native or npm install, as above; an apt, dnf or apk install follows the Linux rowclaude update inside the distributionclaude --version inside the distribution

Sources: Anthropic’s setup page, its VS Code guide and its Code tab version notes, plus Microsoft’s extension auto-update docs.

A WSL distribution keeps its own install and settings apart from Windows, which my comparison of WSL and native Windows setups maps file by file.

Three cards for the three copies of Claude Code on one Windows machine: claude update reaches the standalone CLI, which native and npm installs update in the background while WinGet needs winget upgrade; the VS Code extension's bundled CLI updates with VS Code extension updates after a 12-hour default delay and runs after Restart Extensions; the desktop app's copy updates through Help, Check for Updates and runs in a new session; a note adds that a WSL install is a fourth copy with its own updater

What the Claude Code Update Command Prints

claude update applies an update “immediately without waiting for the next background check” and ends with one of these lines, per the setup page’s manual update section:

OutputWhat it meansNext step
Successfully updated from <old version> to version <new version>A newer version installedStart a new session to run it
Claude Code is up to date (<version>)You run the newest version on your release channelIf you expected a newer one, check the channel
Claude is up to date!The wording for installs managed by Homebrew, WinGet or apkOn WinGet, run winget upgrade Anthropic.ClaudeCode as well: before v2.1.277, claude update could report up to date there when its version lookup failed

The Claude Code changelog adds that since v2.1.166, claude update names the target version before it downloads, and since v2.1.153, claude doctor shows the result of your last update attempt.

Advertisement

Which Claude Code Copy Are You Running?

The place you typed the command decides it:

  • A terminal outside VS Code, or VS Code’s integrated terminal: the standalone CLI found on your PATH, since Anthropic’s VS Code guide says the extension “does not add claude to your PATH”.
  • The VS Code chat panel: the extension’s bundled CLI.
  • The Code tab in Claude Desktop, in a local session: the desktop app’s copy, since the Code tab “runs its own copy of Claude Code, which has its own version number”.
  • A WSL terminal: the install inside that distribution.

To see which standalone installs exist, run these in PowerShell. where.exe, Get-Command, Test-Path and the npm list come from Anthropic’s install troubleshooting page (its conflicting installations check and its binary check), the winget list filter from Microsoft’s list reference, and claude doctor from Anthropic’s setup page:

# every claude on your PATH
where.exe claude

# the one PowerShell starts
Get-Command claude | Select-Object Source

# True means the native installer's copy is present
Test-Path "$env:USERPROFILE\.local\bin\claude.exe"

# lists an npm global install, if there is one
npm -g ls @anthropic-ai/claude-code

# WinGet's entry for Claude Code, if WinGet lists one
winget list --id Anthropic.ClaudeCode

# install health and the last update attempt
claude doctor

If where.exe lists claude in more than one folder, more than one copy is on your PATH. Two lines from the same npm folder, claude and claude.cmd, are one npm install, since npm writes more than one launcher file for each command. A Claude.exe under WindowsApps belongs to an older Claude Desktop (see the error table below). For more than one install, the troubleshooting page says to keep one and recommends the native install at %USERPROFILE%\.local\bin\claude.exe, with a removal command for each extra. Inside a session, the /doctor checkup also looks for “duplicate or leftover installs” and reports whether a newer version is available on your release channel (what /doctor checks). The rest of the built-in commands are in my Claude Code commands cheat sheet.

How to Update Claude Code on Windows

Use the block for the install method where.exe claude pointed to, and finish with claude --version in a new terminal window.

Native Installer

The PowerShell and CMD installers set up a copy that updates itself. To update it now:

claude update
claude --version

Close your other Claude Code sessions first: since v2.1.154 the in-use error tells you “to close other sessions and retry”, and since v2.1.169 the auto-updater “stops retrying within a session once claude.exe is held by another process”.

WinGet Package

winget upgrade Anthropic.ClaudeCode
claude --version

Exit every terminal session running claude before you start: Anthropic’s setup page warns that “On WinGet the upgrade may fail while Claude Code is running because Windows locks the executable.” To have Claude Code run the upgrade for you, add the opt-in variable to the env block of ~/.claude/settings.json:

{
  "env": {
    "CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE": "1"
  }
}

Claude Code “then runs the upgrade in the background when a new version is available and shows a restart prompt on success”. If the locked file blocks it, Claude Code shows the manual command instead.

Global npm Package

npm install -g @anthropic-ai/claude-code@latest
claude --version
  • Skip npm update -g, which “respects the semver range from the original install and may not move you to the newest release”.
  • If PowerShell prints running scripts is disabled on this system, run npm.cmd in place of npm, since the execution policy covers the .ps1 launchers and not the .cmd ones (execution policy fix).
  • The package asks for Node.js 22 or later, but an older Node only prints an EBADENGINE warning, because the native binary “doesn’t use your Node.js at runtime”.
  • Anthropic labels the native installer “Recommended”, and its troubleshooting page points npm users with npm-specific permission errors to it.

Update Claude Code in VS Code

The chat panel runs the copy bundled inside the extension, and Anthropic’s VS Code guide ties the two numbers together: “The extension’s version number is the Claude Code version it bundles.” Updating the chat panel means updating the extension, and VS Code applies its own rules to that, per Microsoft’s extension docs:

  • VS Code “checks for extension updates and installs them automatically”, then asks you to restart the extension host with Restart Extensions.
  • It waits before installing: the extensions.autoUpdateDelay setting defaults to 12 hours, 0 installs updates as soon as they are published, and the Update button “bypasses the delay”.
  • An extension installed from a VSIX file has auto update “disabled by default”.
  • Administrators can set extensions.autoUpdate and extensions.autoUpdateDelay through enterprise policies.

To update the chat panel’s copy now:

  1. Open the Extensions view with Ctrl+Shift+X and search for Claude Code, or run the Show Extension Updates command from the Command Palette.
  2. Select Update on Claude Code.
  3. Select Restart Extensions when VS Code asks.
  4. Type /status in the chat panel and read the version (it needs v2.1.280 or later), or read it in the Extensions view.

The extension update leaves the terminal’s claude where it was; run claude update there too. Which features only the extension or only the CLI offers is covered in Claude Code in VS Code vs the terminal.

Update the Desktop App’s Copy

In a local session, the Code tab runs a copy that the desktop app “downloads and updates”, so it “can differ from the claude command in your terminal” (desktop version check). On Windows:

  1. Open Help > Check for Updates.
  2. Start a new session in the Code tab.
  3. Type /status and read the Claude Code row.

The same docs say the app “auto-updates on launch” on macOS and Windows, and that it can restart on its own to install an update it has downloaded.

Claude Code Not Updating: Causes and Fixes

Match the symptom to a row. Every cause and fix below comes from Anthropic’s setup page, its install troubleshooting page, its changelog, or Microsoft’s VS Code docs, as of 16 October 2026.

The Update Ran but the Version Did Not Change

SymptomCauseFix
The “Update installed” notice appeared, or /status in an open session still shows the old numberBackground updates “take effect the next time you start Claude Code”Exit every Claude Code session, start a new one and check again
You never saw the “Update installed” restart noticeBefore v2.1.235 the prompt footer could miss it after a background update; before v2.1.299 the fullscreen notice could sit behind the idle “/clear to save tokens” hintRun claude doctor for the last update attempt, then restart
A copy you seldom open is far behindClaude Code checks “on startup and periodically while running”, so a closed copy runs no checksclaude update, or start that copy and restart it once the update lands
Your version trails the newest changelog entry by about a weekThe stable channel serves a version “typically about one week old”In /config, set Auto-update channel to latest if you want each release as it ships
You switched to stable and the version stayed putChoosing to stay on your version during the switch “sets minimumVersion to that version”Nothing: updates install again once stable passes that version
claude doctor shows disabled (set by env: DISABLE_AUTOUPDATER)The variable stops the background checkRun claude update by hand, or delete the variable from the env block
claude update is blocked as wellDISABLE_UPDATES blocks “all update paths, including manual updates”Delete it, unless your company set it to keep you on its version
A WinGet install never changesWinGet installs “do not auto-update” by defaultwinget upgrade Anthropic.ClaudeCode, or the opt-in variable above
Claude Code announces an update that WinGet cannot findA known issue: Claude Code “may notify you of updates before the new version is available in these package managers”Wait and run the upgrade again later
npm update -g finished and nothing movedIt keeps to the version range of your original installnpm install -g @anthropic-ai/claude-code@latest
A one-time startup notice says the npm install can’t auto-updateThe npm global folder isn’t writableclaude doctor lists the fixes, or move to the native installer
An old version still runs after a reinstallAnother claude sits on your PATH, or the terminal opened before the PATH change; one inside VS Code “takes its PATH from the editor”where.exe claude and keep one install (two lines from the same npm folder are one install); add %USERPROFILE%\.local\bin to your User PATH if it is missing, then reopen the terminal or VS Code
Updates stop at one version on a work laptopManaged settings can set requiredMaximumVersion, and “Background auto-updates and claude update skip versions above the ceiling”Ask IT which versions are approved
The chat panel runs an older version than your terminalVS Code waits 12 hours by default before it installs a published extension update, auto-update may be off, or the extension came from a VSIX fileSelect Update on Claude Code in the Extensions view, then Restart Extensions

Sources: the setup page’s sections on auto-updates, the release channel, the minimum version and disabling auto-updates; the changelog entries for v2.1.235 and v2.1.299; the troubleshooting page’s PATH checks; the version ceiling entry in the settings reference; and Microsoft’s extension auto-update docs.

The Update Stopped With an Error

What you seeCauseFix
The connection dropped while downloading the update (attempt 3/3: aborted)The connection closed mid-download, for example at a proxy or gateway, and the retries, “up to three attempts in total”, did not recoverRun claude update again; set HTTPS_PROXY if your network needs a proxy, or ask IT to allow downloads from downloads.claude.ai
Download timed out: exceeded the total deadlineThe download ran past 10 minutes, and Claude Code does not retry a timeoutRun it again from a faster network
'claude' is not recognized right after an updateOn Windows the update renames claude.exe aside, and the new file never moved into placeRename the newest backup back with the command below, or rerun the PowerShell installer
The update fails because claude.exe is in useAnother Claude Code session holds the fileClose the other sessions and retry
claude update hangs after Checking for updatesBefore v2.1.214, a folder at a shell-config path such as ~/.bashrc hung itUpdate by rerunning the installer, or move that folder
claude update or claude --version opens Claude Desktop insteadAn older Claude Desktop registered a Claude.exe in WindowsApps that takes PATH priority over the CLIUpdate Claude Desktop (Anthropic’s fix), then run claude update again
npm error code ENOTEMPTYnpm could not move the existing package folder aside; earlier interrupted runs can leave .claude-code-* folders next to itDelete the folder the npm error path line names and any .claude-code-* folders beside it, then reinstall
Get-ChildItem "$env:USERPROFILE\.local\bin\claude.exe.old.*" | Sort-Object Name | Select-Object -Last 1 | Rename-Item -NewName claude.exe
claude --version

That rename is the troubleshooting page’s fix for a missing claude.exe. Later releases address the same failure: v2.1.217 made failed updates “restore the preserved executable automatically”, and v2.1.281 fixed a race between sessions updating at the same moment.

Check the Current Stable and Latest Versions

Releases arrive often: Anthropic’s changelog lists 12 releases dated 1 to 14 October 2026, counted on 16 October. A fix often needs a minimum version: the version table for missing skills and the notification changes dated by release pair each change with the release that shipped it.

To see which versions the npm registry’s stable and latest tags point to right now, run npm view @anthropic-ai/claude-code dist-tags. It reads the npm registry (npm view docs) and needs Node.js, but not an npm install of Claude Code; without Node.js, run /doctor in a session instead. On 16 October 2026 it printed:

{ stable: '2.1.292', latest: '2.1.301', next: '2.1.301' }
  • The changelog dates 2.1.292, the stable tag, to 6 October 2026, so that version was ten days old that day, against the setup page’s “typically about one week old” for the stable channel.
  • The docs changelog can trail a release by hours. npm’s registry record dates 2.1.301 to 14:34 UTC on 15 October, yet the docs page’s newest entry was still 2.1.300 when I read it about five hours later, at 01:13 IST on 16 October; by 01:37 IST it listed 2.1.301, dated 15 October. The CHANGELOG.md on GitHub that the page is generated from already had 2.1.301 when I read it at 01:16 IST, so look there if claude --version shows a number the docs page lacks.

How to Roll Back to an Older Claude Code Version

Roll back when a release breaks something you need today. If the symptom is a slowdown, my triage for a slow Claude Code checks the release before any setting, and its fix for a release regression is an update to a newer version.

The commands, from the setup page’s specific version section and the CLI reference:

GoalCommandWhat to know
Move to the stable channel’s versionclaude install stableSaves stable as your channel, so later updates follow it; stable skips “releases with major regressions”
Install one exact versionclaude install 2.1.292It installs the native binary, and claude --version then prints the version you passed
The same when claude will not start& ([scriptblock]::Create((irm https://claude.ai/install.ps1))) 2.1.292Anthropic’s Windows PowerShell form; the script also accepts stable or latest
An npm installnpm install -g @anthropic-ai/claude-code@2.1.292npm’s <name>@<version> form, from the npm install docs
A WinGet installwinget uninstall Anthropic.ClaudeCode, then winget install --id Anthropic.ClaudeCode --version 2.1.292winget show Anthropic.ClaudeCode --versions lists what WinGet carries, per Microsoft’s install and show references

2.1.292 is the stable version from the check above; put the version you need in its place.

To stay on that version, turn off background updates while you wait for a fix:

{
  "env": {
    "DISABLE_AUTOUPDATER": "1"
  }
}

The setup page says native installs update in the background “to keep you on the latest version”, and this variable “only stops the background check”, so claude update still works when you are ready to move forward. Delete the line once a release fixes your problem. DISABLE_UPDATES is the stricter variable that blocks claude update and claude install too.

Reinstall Claude Code When an Update Fails

Anthropic’s uninstall steps remove the binary and leave your settings alone. Deleting configuration is a separate step, with a warning that it “will delete all your settings, allowed tools, MCP server configurations, and session history”. A clean reinstall replaces the binary only. On Windows:

  1. Back up your user settings and memory folder, %USERPROFILE%\.claude, and the global config file, %USERPROFILE%\.claude.json. How Claude Code memory is stored shows where auto memory sits inside that folder.
  2. Remove the binary for your install method, with the commands below.
  3. Open a new PowerShell window and run where.exe claude. INFO: Could not find files for the given pattern(s). means no claude is left on your PATH.
  4. Install with the PowerShell installer, open a new terminal, and run claude --version and claude doctor.
# 1. back up
Copy-Item "$env:USERPROFILE\.claude" "$env:USERPROFILE\claude-backup" -Recurse
Copy-Item "$env:USERPROFILE\.claude.json" "$env:USERPROFILE\claude-backup.json"

# 2. remove the binary of a native install
Remove-Item -Path "$env:USERPROFILE\.local\bin\claude.exe" -Force
Remove-Item -Path "$env:USERPROFILE\.local\share\claude" -Recurse -Force
# or of a WinGet install
winget uninstall Anthropic.ClaudeCode
# or of an npm install
npm uninstall -g @anthropic-ai/claude-code

# 4. reinstall
irm https://claude.ai/install.ps1 | iex

If the installer stops with The process cannot access the file, an earlier install attempt or an antivirus scan is usually holding %USERPROFILE%\.claude\downloads. Close other installer windows, delete that folder and run the installer again (Windows install fix).

To reinstall the VS Code extension as well, remove it from the Extensions view. Running claude in a VS Code terminal installs it again unless Auto-install IDE extension is off in /config (uninstall the extension), and the setup page notes that the extension and the desktop app recreate ~/.claude the next time they run.

How to Update Claude Code Without Guessing Which Copy Moved

Each copy has its own updater, so read the version back where you updated it: claude --version in a terminal, /status in the chat panel or the Code tab. A number that did not move then points to a row in the tables above rather than to a broken install.

Run where.exe claude once today and note which install answers.

Frequently Asked Questions

How do I update Claude Code on Windows?

For an install from Anthropic's PowerShell or CMD installer or from npm, run claude update, then claude --version to confirm the number; npm installs can also use npm install -g @anthropic-ai/claude-code@latest. A WinGet install needs winget upgrade Anthropic.ClaudeCode with Claude Code closed, since Windows locks the running executable.

Does Claude Code update automatically?

Native and npm installs do: Claude Code checks on startup and periodically while running, installs updates in the background and runs them from the next start. WinGet, Homebrew, apt, dnf and apk installs do not by default. The VS Code extension updates through VS Code, and the desktop app updates its own copy.

How do I update Claude Code in VS Code?

The chat panel runs the copy bundled in the extension, so update the extension: select Update on Claude Code in the Extensions view, then Restart Extensions. VS Code auto-updates extensions after a 12-hour delay by default. A claude command in the integrated terminal is the standalone CLI and needs claude update.

Why is Claude Code not updating to the latest version?

Updates apply at the next start, the stable channel serves a version typically about one week old, DISABLE_AUTOUPDATER stops background checks, and WinGet installs do not update on their own by default. Also confirm you read the version from the copy you updated: where.exe claude lists every claude on your PATH.

How do I roll back to an older Claude Code version?

Run claude install with a version number, or claude install stable for the stable channel's version. If claude will not start, pass the version to Anthropic's PowerShell installer script. Native installs keep updating in the background unless DISABLE_AUTOUPDATER is set to 1.

Advertisement
Swapnil Biswas

Written by Swapnil Biswas

Product Marketing & Growth Strategist. I write about AI, SEO, and marketing strategy from real experience - not theory.