# How to update Claude Code to the latest version in 2026

> 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.

Source: https://ailoot.ai/blog/en/update-claude-code/
Canonical: https://ailoot.ai/blog/en/update-claude-code/
Language: en
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-130
Revision: sha256-df98928e3721ee48abf4d16f9875eb5703f775a2a003c1fd7f5772621f347f22


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](https://ailoot.ai/docs/).



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

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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

```bash
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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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

```bash
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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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.

<figure>
<blockquote>
<p>Native installations update automatically in the background to keep you on the latest version.</p>
</blockquote>
<figcaption>— Claude Code Docs, Advanced setup, official documentation</figcaption>
</figure>

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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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

```bash
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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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:

```bash
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:

```powershell
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 installed | Update command |
|----------------------|----------------|
| Native installer | updates 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](https://ailoot.ai/blog/en/install-claude-code/)—including why the native installer is more convenient than package managers.

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

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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:

```bash
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:

```bash
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](https://code.claude.com/docs/en/setup#install-claude-code), which does not depend on an existing `claude` command:

```bash
# 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:

```bash
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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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:

```json
{
  "autoUpdatesChannel": "stable"
}
```

If you’re configuring Claude Code to suit your habits, there’s a separate guide to [customizing Claude Code](https://ailoot.ai/blog/en/claude-personalization-profile-memory/)—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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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:

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

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

```powershell
& ([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`:

```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?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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:

```json
{
  "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](https://ailoot.ai/blog/en/claude-account-suspension-appeal/).

## Where should you start?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Главное в разделе">

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.

</div>

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](https://ailoot.ai/blog/en/claude-code-alternatives/) explains how Claude Code differs from other terminal agents and when it makes sense to consider alternatives.

<div class="section" role="doc-bibliography" aria-label="Источники">

### Sources

- [Claude Code - Advanced setup, official documentation](https://docs.claude.com/en/docs/claude-code/setup) - automatic updates for native installations, the claude update command, latest and stable channels, autoUpdatesChannel and minimumVersion settings, DISABLE_AUTOUPDATER, installing a specific version
- [Claude Code - Troubleshoot installation, official documentation](https://docs.claude.com/en/docs/claude-code/troubleshoot-install) - conflicts between multiple installations, which -a claude, npm folder permissions, custom launchers, claude update hanging
- [Claude Code - CHANGELOG on GitHub](https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md) - list of versions and changes in each build; where to check the latest number

</div>







Get to know [Ailoot](https://ailoot.ai/).

## 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.


## Ailoot · The company and its project portfolio

Ailoot combines established operating experience, a large client base, stable service and ongoing KPI control.

The company and its project portfolio: millions of customers; monthly sales in the billions.

Ailoot brings that operating experience to API access for AI features in customer products, agents, applications and automations.
