Blog

How to update Claude Code to the latest version in 2026

Markdown

How to check the Claude Code version, update it with the claude update command, install the latest build via Homebrew or WinGet, and what to do if it won’t update.

Read full article

Claude Code changes almost every day. You open the latest changelog and find new commands, fixed bugs, and speed improvements. Meanwhile, your terminal is running a build from two weeks ago, and half of those improvements simply don’t work. Claude doesn’t tell you, either: it starts as usual, and you’re left wondering why other people have a feature that you don’t.

I’ll walk through how to check your version, update to the latest one, and what to do if the update won’t install. The commands are quoted verbatim from the official Claude Code documentation and were checked in early September 2026. At that time, the latest published version was 2.1.261, but your number will be different. There’s no point chasing a particular number—the important thing is simply to be on a recent build.

Information about working with Ailoot is available in the documentation.

How do you quickly update Claude Code to the latest version?

The key point

The short answer is this. If you installed Claude Code with the native installer, it updates itself in the background, so you don’t need to do anything manually. To update right now without waiting for the background check, type claude update in the terminal. If you installed it through Homebrew, WinGet, or a Linux package manager, there are no automatic updates: each has its own command, such as brew upgrade claude-code. You can always check whether you have the latest version by running claude --version.

I’ll explain each case in detail below, but if you’re short on time, here are three commands that cover almost every situation.

claude --version   # which version is installed now
claude update      # update immediately (native installation)
claude doctor      # check the installation and updates

The first shows your version, the second updates it, and the third diagnoses problems if something goes wrong. Below, I’ll explain when to use each one and why claude update doesn’t work for some people.

How do you check which version of Claude Code is currently installed?

The key point

Type claude --version in the terminal. The command prints a version number in a format like 2.1.211 (Claude Code) and doesn’t start anything. This is the quickest way to tell whether you’re behind the latest build. If you want more detailed diagnostics—the health of the installation, configuration errors, and warnings—there’s a separate command, claude doctor, which also works without starting a session.

Before updating, it’s worth knowing what version you’re updating from. The command is simple:

claude --version

You’ll get a line like 2.1.211 (Claude Code). That’s your current version. Compare the first two numbers with the latest number in the changelog—if yours is much lower, it’s time to update.

If you want a broader picture, run claude doctor. It only checks things and doesn’t change anything: it doesn’t start a session, but it does show the installation status, errors in the settings file, and warnings with ready-to-use suggestions about what to fix. It also shows the result of the last automatic update attempt—useful when you suspect the background update silently failed to install.

Does Claude Code update itself?

The key point

If you installed Claude Code with the native installer (the familiar curl command with the install.sh script, or install.ps1 on Windows), then yes—it updates itself. Claude Code checks for updates when it starts and from time to time while it’s running, downloads the new version in the background, and applies it the next time you start it. You only need to restart your session occasionally. But installations through Homebrew, WinGet, and Linux package managers don’t update themselves; they need a manual command.

It all depends on how you installed Claude Code. The native installation—the one Anthropic recommends and the website script installs—can update itself, and the documentation says so explicitly.

Native installations update automatically in the background to keep you on the latest version.

— Claude Code Docs, Advanced setup, official documentation

Here’s how it works: Claude Code checks for updates at startup and periodically while it’s running. If it finds a new version, it downloads and installs it in the background, then applies it the next time you launch it. Just close and reopen your session every couple of days, and you’ll be up to date again.

You can check how the last background attempt went with the same claude doctor command. It will show you if the update failed to install for some reason.

But if you installed Claude Code through a package manager—Homebrew on a MacBook, WinGet on Windows, apt or dnf on Linux—there’s no background update. Those installations are updated with your usual upgrade command; there’s a separate section about that below.

A recent version of Claude Code is a foundation, but it won’t carry you on its own. Consistent results come not from the tool’s version but from the way you work with it.

How do you update Claude Code manually with a single command?

The key point

Type claude update. The command applies the update immediately without waiting for the background check. If a new version is found, you’ll see a message confirming a successful update from the old version to the new one. If you’re already on the latest version, you’ll get the line Claude Code is up to date with the current number. The command works with both native installations and package managers, but Homebrew and WinGet return a slightly different response.

You don’t have to wait for the background check to notice a new version. There’s a command that updates it right now:

claude update

There are two possible outcomes. If an update is found and installed, Claude Code will report a line like Successfully updated from <old version> to version <new version>. If you’re already on the latest build, you’ll get Claude Code is up to date (<version>)—that means there’s nothing to update.

There’s a wrinkle with this command when using package managers. If Claude Code was installed through Homebrew, WinGet, or apk, claude update gives a shorter response—Claude is up to date!—and doesn’t always fetch the new build itself. For these installations, it’s more reliable to use the package manager’s own upgrade command, described below.

How do you update Claude Code installed through Homebrew or WinGet?

The key point

Package managers don’t update Claude Code automatically, so you have to run the upgrade command yourself. On a MacBook with Homebrew, that’s brew upgrade claude-code. On Windows with WinGet, it’s winget upgrade Anthropic.ClaudeCode. On Linux with apt, dnf, or apk, the update comes with the regular system upgrade. If you want Claude Code to run the upgrade itself with Homebrew and WinGet, set the CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE environment variable to one.

If you installed Claude Code through a package manager instead of the website script, you’re responsible for updating it. Here are the commands for each system.

On macOS with Homebrew:

brew upgrade claude-code

There are two options with Homebrew. It installs Claude Code in two variants. The claude-code variant tracks the stable channel—a version about a week old that skips releases with major issues. The claude-code@latest variant gets the newest version as soon as it’s released. Update the one you installed: if you have claude-code@latest, the command will be brew upgrade claude-code@latest.

On Windows with WinGet:

winget upgrade Anthropic.ClaudeCode

With WinGet, the upgrade sometimes fails while Claude Code is running because Windows has the executable file in use. Claude Code will simply show you the manual command; close it and run the upgrade again.

On Linux with apt, dnf, or apk, there’s no separate command to learn—the latest version arrives with the regular system update because Claude Code publishes signed repositories.

How it was installedUpdate command
Native installerupdates itself, or claude update
Homebrew (macOS)brew upgrade claude-code
WinGet (Windows)winget upgrade Anthropic.ClaudeCode
apt / dnf / apk (Linux)regular system upgrade

If you don’t want to keep this in mind, there’s the CLAUDE_CODE_PACKAGE_MANAGER_AUTO_UPDATE environment variable. Set it to 1, and Claude Code will run the upgrade in the background with Homebrew and WinGet, then suggest restarting after a successful update. The documentation includes a caveat: Claude Code sometimes notifies you about a new version before it has actually appeared in the package manager. If the upgrade doesn’t find an update, wait a little and try again.

By the way, if you’re still choosing how to install Claude Code, there’s a detailed guide in a separate article about installing Claude Code—including why the native installer is more convenient than package managers.

Why won’t Claude Code update, and what should you do?

The key point

There are usually three possible causes. First, you have multiple Claude Code installations, and they conflict: the command updates one, but another one launches. Second, the global npm folder isn’t writable, so the background update silently fails to install. Third, you may have replaced the launcher with your own script. Start troubleshooting with claude doctor and the which -a claude command; they show exactly where the problem is.

Sometimes you update over and over, but claude --version stubbornly keeps showing the old number. I’ll go through the main causes, starting with the most common.

The first thing to check is whether you have multiple Claude Code installations at once. This can happen if you first installed it through npm and then reinstalled it natively. The command updates one copy, but the terminal launches another, so the version appears not to change. Check how many copies you have:

which -a claude

Claude Code may be in three places: ~/.local/bin/claude is the native installer, ~/.claude/local/ is the old local npm installation from early versions, and the global npm package is shown by the npm -g ls @anthropic-ai/claude-code command. If you find more than one, keep just one—preferably the native installation. Remove extras like this:

npm uninstall -g @anthropic-ai/claude-code
rm -rf ~/.claude/local

The second common cause is a global npm folder that isn’t writable. If you installed Claude Code globally with npm and it doesn’t have permission to write to its folder, the background update won’t install. Claude Code shows a one-time notification at startup, and claude doctor lists exactly what to fix. That’s another reason to prefer the native installation: it writes to your home folder and doesn’t require those permissions.

The third situation is that you once replaced the ~/.local/bin/claude launcher with your own script or symlink. Starting with version 2.1.207, automatic updates leave such a launcher alone: new versions are still installed in the ~/.local/share/claude/versions/ folder, but your script decides which one to launch. Do not delete your only launcher and then call claude update by name. First preserve the custom launcher and, for a symlink, its target in a separate unused backup location. Move the custom launcher out of its original path only after that copy is verified. Restore the native launcher using the official installer, which does not depend on an existing claude command:

# macOS, Linux or WSL: official native installer
curl -fsSL https://claude.ai/install.sh | bash

After the installer finishes, open a new terminal and verify the result:

claude --version
claude doctor

The first command must print a version number. Inspect the doctor output for launcher or PATH warnings before continuing; do not remove the preserved launcher until the replacement works.

Another symptom is that claude update or claude doctor hangs immediately after the Checking for updates line. On older versions (before 2.1.214), this sometimes happened when one of the shell configuration files, such as ~/.zshrc, was a directory instead of a file. Recent builds now skip over this, so updating to the latest version also fixes the bug.

How do you choose an update channel: latest or stable?

The key point

Claude Code has two update channels. Latest is the default channel; new features arrive as soon as they’re released. Stable is a version about a week old that skips releases with major issues. If fresh features matter more to you, stay on latest. If predictability matters more and you don’t want to catch rough builds, switch to stable. You can change this with the autoUpdatesChannel setting in the settings.json file or with the /config command.

Updating to the latest version doesn’t always mean grabbing the newest build on its first day. Claude Code lets you choose between two channels, which affects exactly what you receive when you update.

The latest channel is the default. New features arrive as soon as they’re released, which is handy if you want to try them first. The stable channel provides a version about a week old: it’s had time to settle and skips releases with major issues. It’s the choice for people who value peace of mind over speed.

The easiest way to switch channels is with the /config command inside Claude Code, under Auto-update channel. Or you can enter it manually in the settings.json settings file:

{
  "autoUpdatesChannel": "stable"
}

If you’re configuring Claude Code to suit your habits, there’s a separate guide to customizing Claude Code—it covers the settings file as a whole, not just the update channel.

How do you install a specific version or set a minimum version?

The key point

The native installer accepts both a channel name and an exact version number. To install a specific build, add its number to the end of the installation command, for example bash -s 2.1.89. You can install the stable channel instead of latest the same way. To keep updates from ever rolling you back below a certain version, set the minimumVersion setting in settings.json. This is the lower limit that neither background updates nor claude update will go below.

Sometimes you need a specific version instead of the latest one—for example, to return to a build where your workflow definitely worked. The native installer supports this: it accepts both a channel name and an exact version number. Install a specific build like this:

curl -fsSL https://claude.ai/install.sh | bash -s 2.1.89

On Windows, the equivalent in PowerShell looks a little different:

& ([scriptblock]::Create((irm https://claude.ai/install.ps1))) 2.1.89

You can install the stable channel the same way—instead of a number, write stable. The channel you choose during installation becomes the default channel for future automatic updates.

If you want protection against rolling back to an older version, set a minimum version in settings.json:

{
  "autoUpdatesChannel": "stable",
  "minimumVersion": "2.1.100"
}

This is the lower limit. Neither a background update nor claude update will install a version below the one specified. This is useful when switching to stable if you don’t want to roll back from a newer build you’re already using.

How do you disable automatic updates if they get in the way?

The key point

If you don’t need Claude Code’s background updates, disable them with the DISABLE_AUTOUPDATER variable in the env block of the settings.json file. It stops only the background check—the claude update command will still work if you want to update manually. If you need to block every update path, including manual updates, use the other variable, DISABLE_UPDATES. This is useful when distributing Claude Code to your team and you want everyone to stay on the same version.

Sometimes background updates get in the way—for example, when you want to keep your team on exactly one version. You can disable them through the settings file:

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

An important detail: DISABLE_AUTOUPDATER silences only the background check. The claude update command will keep working, so you can still update manually. If you need to block every update path at once, including manual updates, there’s a stricter variable, DISABLE_UPDATES. It’s used when distributing Claude Code through your own channel and you want people to stay exactly on the build you provided.

For regular use on your own, it’s better not to change these variables: a recent Claude Code version is almost always better than an old one, and a security fix may arrive with an update. Keeping the tool up to date is part of maintaining access and avoiding strange bugs; a separate article covers how to avoid losing your Claude account.

Where should you start?

The key point

Start by checking your version with claude --version and comparing it with the latest number in the changelog. If you installed it natively, update with claude update and restart your session. If you installed it through Homebrew or WinGet, run your package manager’s upgrade command. If the version doesn’t change, run claude doctor and which -a claude to check for conflicts from multiple installations. And choose which channel to use: latest for fresh features, stable for peace of mind.

Here’s a short plan.

  1. Check your current version: claude --version. Compare it with the latest number in the changelog.
  2. Update. Native installation—claude update. Homebrew—brew upgrade claude-code. WinGet—winget upgrade Anthropic.ClaudeCode.
  3. Restart the Claude Code session so the new version takes effect.
  4. If the version hasn’t changed, run claude doctor and which -a claude. You probably have multiple installations or an npm folder that isn’t writable.
  5. Choose the channel that suits you: latest if you want new features as soon as they arrive, or stable if predictability matters more. Change it through /config.

A recent version fixes bugs and adds new commands, but an updated tool won’t build your project for you. The guide to Claude Code alternatives explains how Claude Code differs from other terminal agents and when it makes sense to consider alternatives.

Sources

Get to know Ailoot.

More details

Questions about How to update Claude Code to the latest version in 2026

Why does claude update still launch my old custom wrapper?

The native updater leaves a custom launcher in place, so that wrapper still selects the binary. Preserve the wrapper and its target before repairing the launcher; use the documented native installer rather than deleting the only command and immediately calling it.

How do I check that launcher recovery worked?

Open a new terminal and run claude --version; it should print a version number. Then run claude doctor to inspect the installation and launcher warnings. If the command is missing, fix PATH before continuing.

All articles