[BUG] npm install now ships Bun binary (v2.1.126) — npm workaround for non-AVX VPS is dead, no upgrade path
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
As of version 2.1.x, npm install -g @anthropic-ai/claude-code ships a Bun ELF binary (claude.exe) instead of a Node.js-based entry point. This means the npm installation path — the documented workaround for non-AVX environments — no longer works.
I am a paying subscriber using Claude Code professionally for server administration and development across multiple dedicated servers and VPS instances (OpenStack, Proxmox KVM). I was forced to downgrade to version 2.0.62, which is the last version that actually runs on Node.js. I am now frozen on an outdated version with no upgrade path.
This affects all common virtualized environments: OpenStack, Proxmox KVM, Docker, LXC — any platform where AVX is not exposed to guests, which is the default for the vast majority of VPS providers and hypervisors worldwide.
Previous issues (#19904, #19967, #19981, #20611) all recommended npm install as the workaround. That workaround is now dead.
Bun itself publishes baseline builds without AVX dependency. The fix is straightforward.
What Should Happen?
One of the following:
npm install -g @anthropic-ai/claude-codeshould install a version that runs on Node.js (as it did up to v2.0.62), OR- The shipped Bun binary should be a baseline build without AVX dependency (Bun officially provides these), OR
- Runtime CPU detection should select the appropriate binary automatically
Users on virtualized infrastructure should not be locked out of updates. "Upgrade your CPU" is not actionable for VPS customers.
Error Messages/Logs
============================================================
Bun v1.3.14 (0a466a11) Linux x64 (baseline)
Linux Kernel v6.1.0 | glibc v2.36
Args: "claude" "--resume"
Features: jsc no_avx2 no_avx standalone_executable claude_code
Builtins: "bun:main"
Elapsed: 7956ms | User: 6200ms | Sys: 1758ms
RSS: 4.56GB | Peak: 4.03GB | Commit: 4.56GB
CPU lacks AVX support. Please consider upgrading to a newer CPU.
panic(main thread): Segmentation fault at address 0x3063D000000
oh no: Bun has crashed. This indicates a bug in Bun, not your code.
Steps to Reproduce
- Use any Linux VPS or VM where AVX is not available (OpenStack, Proxmox with default kvm64 CPU type, Docker, LXC — this is the default for most virtualized environments)
- Install Node.js 18+ via nvm
- Run:
npm install -g @anthropic-ai/claude-code(installs v2.1.126) - Verify the binary:
file $(which claude)→ shows ELF binary (Bun), not a Node.js script - Run:
claude --version→ Segmentation fault / SIGILL
Workaround: npm install -g @anthropic-ai/claude-code@2.0.62 — last version using Node.js runtime. But this locks the user out of all updates.
Claude Model
Opus
Is this a regression?
No, this never worked
Last Working Version
2.0.62
Claude Code Version
2.1.126 (crashes) / 2.0.62 (works)
Platform
Anthropic API
Operating System
Ubuntu/Debian Linux
Terminal/Shell
Other
Additional Information
Impact: I use Claude Code daily across multiple production servers for Laravel development, server administration, email infrastructure, and database operations. Being locked to v2.0.62 means I am paying for a product I cannot fully use.
Key facts:
- This is not exotic hardware. The majority of VPS instances worldwide do not expose AVX.
- OpenStack, Proxmox (default kvm64), Docker, LXC — all affected by default.
- Bun publishes official baseline builds without AVX: https://github.com/oven-sh/bun/releases
- Tested on Debian 12, Debian 13, Ubuntu 22.04, Ubuntu 24.04 — same result everywhere.
- The npm package at v2.1.126 contains
bin/claude.exewhich is a Bun ELF binary, not a Node.js entry point. - DISABLE_AUTOUPDATER=1 is required to prevent auto-update back to the broken version.
Related issues: #19904, #19967, #19981, #20611, #18423
Showing cached comments. Read the full discussion on GitHub ↗
16 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
This is NOT a duplicate. The linked issues (#51976, #50384, #33153) describe the original AVX/Bun crash. My issue documents a NEW regression: as of v2.1.x, the npm installation path — which was the recommended workaround in ALL those issues — now ALSO ships a Bun ELF binary. The documented workaround is dead and there is no upgrade path for non-AVX environments.
Additionally, downgrading to the last Node.js-based version (2.0.62-2.0.76) no longer works because these versions are incompatible with the current API.
This is a escalation of the original problem, not a duplicate.
Same issue. We're not able to expose AVX for security reasons on our VMs. We're forced to use a much older model with reduced functionality until this is fixed.
I open ticket to get help. Only AI mail comes back and nothing happens.
Why closed
Why is this closed... it is not resolved and I have the same issue.
Same issue here. My use case is to build a Docker container with Claude Code pinned to a specific version, which devs can use for remote development:
v2.1.112 works. Curiously, upgrading a v2.1.112 install to v2.1.140 also seems to work on non-AVX CPU.
Same issue here.
I made a new discovery. Installing and running Claude Code natively (using the recommended
curl -fsSL https://claude.ai/install.sh | bash) seems to work on non-AVX system, as long as AES instructions are available. The error message given by bun is misleading. The issue in my case was that the VM I was using hadqemu64as a CPU type, which lacks all modern instructions. Switching it tox86-64-v2-AESorhostresolved the issue.And it is possible to install a specific native version by appending the version to the install command:
curl -fsSL https://claude.ai/install.sh | bash 2.1.153installs v2.1.153.same
The break is precisely at 2.1.113, not a gradual regression — and the package internals confirm there is no JS fallback left.
What changed:
2.1.112:bin = { "claude": "cli.js" }— ships the full bundled-JS app. This is the last version that runs on non-AVX CPUs.2.1.113:bin = { "claude": "bin/claude.exe" }, and the per-platform optionalDependencies switched from@img/sharp-*to@anthropic-ai/claude-code-<platform>. Per the 2.1.113 changelog: "Changed the CLI to spawn a native Claude Code binary (via a per-platform optional dependency) instead of bundled JavaScript."cli.jsis gone from 2.1.113+. Unpacking the wrapper package (~148K) shows only three files of interest:bin/claude.exe— a shell stub that just prints "Error: claude native binary not installed"cli-wrapper.cjs— labeled a "fallback launcher" but contains no app; it onlyspawnSyncs the native binaryinstall.cjs— postinstall that links the per-platform native binarySo the "optional dependency" wording only controls delivery of the native binary — it does not preserve a JavaScript runtime path. Every code path on 2.1.113+ ends at the native binary, and a comment in both
cli-wrapper.cjsandinstall.cjsconfirms the requirement: "the x64 build needs AVX, which Rosetta doesn't emulate."Net: there is no env var or flag to force the old JS app on 2.1.113+, because that code is no longer published in the npm package. The only real fix is shipping a baseline/non-AVX
claude-code-linux-x64build. Confirmed on a no-AVX host:2.1.112is a hard ceiling.Suggestion: Ship both AVX + baseline builds with runtime auto-detection
First, thank you for Claude Code — it's genuinely transformed how we build and ship software. This is a feature request more than a bug report, and we think it could unlock a significant new segment of users.
The opportunity:
A large portion of VPS and virtualized environments (Proxmox KVM with default
kvm64, OpenStack, Docker, LXC) don't expose AVX to guests by default. These are incredibly common setups for developers who want to run Claude Code autonomously on a server — arguably one of the most exciting use cases for Claude Code.The good news — Bun already solved this upstream:
Bun officially publishes and maintains baseline builds without AVX dependency:
bun-linux-x64→ current (AVX required)bun-linux-x64-baseline→ no AVX requiredProposed approach — ship both, auto-detect at install:
\
\\js\// postinstall.cjs
if (cpuHasAVX()) {
installBinary('claude-code-linux-x64') // current behavior, unchanged
} else {
installBinary('claude-code-linux-x64-baseline') // baseline, no AVX
}
\
\Why this is a zero-tradeoff win:
Current workaround and its limits:
Pinning to
2.1.112works today but it's a dead end — users are frozen with no upgrade path as features and models evolve.Since Bun already maintains these baseline builds officially, the implementation cost is a CI pipeline addition rather than a new engineering effort. We'd love to see this on the roadmap — it would open Claude Code's autonomous server workflow to a huge number of developers who are genuinely excited to use it that way.
Happy to help test or provide environment details if useful!
I'm too stuck with 2.1.112 on a VPS, they're not going to support AVX on such environments. Looking forward to any workaround, hoping in a fix on Anthropic's side
Please save our old CPUs. They still have plenty of life left. 🙏
Adding another confirmation — this time from a bare-metal, non-AVX physical CPU (not a VM/VPS), with a full descending bisect of every published npm release.
Environment
6.4.0-150600.23.103-defaultx86_64AMD Athlon II X4 645 Processorv22.23.110.9.8@anthropic-ai/claude-codeReproduction and exact compatibility boundary
I pulled the complete published version list directly from the npm registry (467 releases) and tested versions in descending semantic-version order using an isolated npm prefix. The 2.1.112 → 2.1.113 boundary is exact:
| Version |
native_status|bin_target| Nodecli.jsentry? ||---|---|---|---|
|
2.1.112| WORKS (exit 0) |cli.js| yes ||
2.1.113| SIGILL (exit 132) |bin/claude.exe| no (NO_NODE_ENTRY) ||
2.1.114…2.1.215| SIGILL (exit 132) |bin/claude.exe| no |Totals across the bisect:
2.1.112)So the regression isn't just "Bun requires AVX" —
2.1.113also removes the Node.jscli.jsfallback that2.1.112still ships. On this machine there is no way to invoke any release >2.1.112through Node.Working output on
2.1.112(both invocation methods):Failing output on every newer release, even for
--version:The crash happens before authentication, project loading, or any normal CLI operation.
Workaround that did not help
Still terminates with
Illegal instruction (core dumped)— so disabling the JSC JIT does not recover non-AVX compatibility on the bundled Bun binary.Adding another data point — macOS on bare-metal Intel, confirming the boundary is AVX2 (not AVX1) and that the regression is not Linux-specific.
Environment
@anthropic-ai/claude-codeExact boundary
Same 2.1.112 → 2.1.113 cliff as the Linux reports above. Since this CPU has AVX1 but not AVX2, the Bun baseline swap needs to target AVX2, not AVX — otherwise every pre-Haswell Intel Mac (all pre-mid-2013 models) stays broken alongside the Linux VPS cases.