[BUG] 2.1.113 crashes with SIGILL "illegal hardware instruction" on Ivy Bridge (AVX2-less) Intel Macs — regression from 2.1.112
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?
Claude Code 2.1.113 crashes at startup with zsh: illegal hardware instruction on an Intel CPU that lacks AVX2 support. The binary aborts (SIGILL) before producing any output — claude --version doesn't even print a version number.
The same machine, same shell session, same Node version runs 2.1.112 without any issue. Downgrading back to 2.1.112 via npm install -g @anthropic-ai/claude-code@2.1.112 immediately fixes the crash. Reinstalling 2.1.113 immediately brings it back. The regression is cleanly reproducible between these two versions.
The CPU (Intel Core i5-3470S, Ivy Bridge, 2012) supports AVX but not AVX2 / BMI2 / FMA. This suggests 2.1.113 introduced AVX2 (or newer) instructions in a startup code path — most likely through an updated bundled runtime (Bun) or a recompiled native dependency.
What Should Happen?
2.1.113 should launch on x86-64 CPUs without AVX2, the same way 2.1.112 did. At minimum, the baseline build (or the bundled Bun build) should avoid AVX2/BMI2/FMA in any code path reached before the CLI prints --version, so that users on older Intel hardware can continue to run Claude Code as they did on the immediately previous release.
Error Messages/Logs
$ claude --version
zsh: illegal hardware instruction claude --version
Steps to Reproduce
On an Intel Mac whose CPU lacks AVX2 (confirm with sysctl hw.optional.avx2_0 → returns 0):
- Install 2.1.112 and confirm it works:
npm install -g @anthropic-ai/claude-code@2.1.112
hash -r
claude --version
→ prints "2.1.112 (Claude Code)" ✅
- Uninstall and install 2.1.113:
npm -g uninstall @anthropic-ai/claude-code
npm install -g @anthropic-ai/claude-code@2.1.113
hash -r
claude --version
→ "zsh: illegal hardware instruction claude --version" ❌ (SIGILL at startup)
- Reinstall 2.1.112 — crash goes away.
- Reinstall 2.1.113 — crash comes back.
The install is via npm install -g under nvm, but per the docs the npm package pulls in the same native binary (@anthropic-ai/claude-code-darwin-x64) as the standalone installer, so this is not nvm-specific.
Claude Model
None
Is this a regression?
Yes, this worked in a previous version
Last Working Version
2.1.112
Claude Code Version
2.1.113 (crashes with SIGILL, so the version string is only obtainable from the npm install output, not from claude --version)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Hardware
- iMac 27" late 2012
- CPU: Intel Core i5-3470S @ 2.90 GHz (Ivy Bridge, released Q2 2012)
sysctl -n machdep.cpu.brand_string→ Intel(R) Core(TM) i5-3470S CPU @ 2.90GHzsysctl hw.optional.avx1_0→ 1sysctl hw.optional.avx2_0→ 0- AVX-512: not present (
hw.optional.avx512f_0is unknown oid)
Binary layout
which claude→ /Users/sky/.nvm/versions/node/v22.22.0/bin/claude- Symlink target → ../lib/node_modules/@anthropic-ai/claude-code/bin/claude.exe
file→ Mach-O 64-bit executable x86_64
So this is definitely the bundled native binary being exercised, not anything routed through Node.
Likely cause
Between 2.1.112 and 2.1.113, either the bundled Bun runtime was bumped to a version whose JavaScriptCore JIT emits AVX2 instructions unconditionally, or a native optional dependency (sharp / tree-sitter / similar) was recompiled with a more aggressive -march target. Rebuilding with -march=x86-64-v2 (or equivalent RUSTFLAGS="-C target-cpu=x86-64" for Rust deps) would restore compatibility.
Related issues
Same class of bug as #5864, #10408, #19967, #21018, #41575 — but this report isolates the exact regression window (2.1.112 → 2.1.113) with a clean back-and-forth reproduction on the same machine, which should make bisection easier.
19 Comments
Found 3 possible duplicate issues:
This issue will be automatically closed as a duplicate in 3 days.
🤖 Generated with Claude Code
Adding hard data from testing every version between 2.1.107 and 2.1.114 on a MacBook Pro Mid-2012 (i7-3520M, Ivy Bridge — has AVX1 but no AVX2/BMI2):
| Version |
cli.jsin npm tarball | Runs under Node.js ||---------|------------------------|--------------------|
| 2.1.108 | Yes | Yes |
| 2.1.109 | Yes | Yes |
| 2.1.110 | Yes | Yes |
| 2.1.111 | Yes | Yes |
| 2.1.112 | Yes | Yes |
| 2.1.113 | No | SIGILL |
| 2.1.114 | No | SIGILL |
2.1.112 is the last usable version. The
cli.js→ Bun-only transition happened at 2.1.113.For anyone on similar hardware, a working setup: install the tarball to a versioned directory and exec
cli.jsvia a Node.js wrapper:Symlink
claude-code-currentto the active version directory — rollback is oneln -sfnaway.(Closing my duplicate #50684 in favour of this one.)
Root cause analysis — it's a packaging change, not a Bun regression
Dug into the npm tarballs for both sides of the cutoff. The crash isn't caused by a Bun version bump — it's caused by removing the Node.js code path entirely.
2.1.112 tarball (last working):
2.1.113+ tarball (broken on pre-Haswell):
The
cli-wrapper.cjsheader says _"users can runnode cli-wrapper.cjsdirectly and pay the Node-process overhead"_ — but it doesn't run JS-on-Node. It justspawnSync()s the platform binary:So there is no fallback path. If the native binary SIGILLs, the user is stuck.
The
@anthropic-ai/claude-code-darwin-x64binary is a 196MB Mach-O with AVX2-dependent code paths (confirmed viastrings | grep AVX2). It's a Bun single-file executable with the JS application baked in — not extractable for Node.js.What this means for a fix
This isn't a "rebuild Bun with
-march=x86-64-v2" situation (though that would also work). The simplest fix is continuing to shipcli.jsin the tarball — it was there for every version up to 2.1.112 and ran perfectly on all hardware. Thecli-wrapper.cjsfallback could detect SIGILL from the native binary and execcli.jsunder Node instead.Working setup for anyone stuck
Works perfectly on MacBook Pro Mid-2012 (i7-3520M, Ivy Bridge) running macOS Sequoia 15.7.6. Performance is indistinguishable from the native binary path.
Thanks @johan-- for the two back-to-back deep dives — the version-by-version matrix and the tarball diff together make this a watertight bisection.
Consolidating the diagnosis for maintainers, since this thread now carries the full picture (including closed duplicate #50684):
Regression window: 2.1.112 → 2.1.113 (confirmed on two independent Ivy Bridge machines: i5-3470S iMac 2012 and i7-3520M MBP 2012).
Root cause: Not a Bun bump. The npm tarball stopped shipping
cli.jsat 2.1.113 and now only shipscli-wrapper.cjs, whichspawnSyncs the native Bun single-file binary. That binary contains AVX2-dependent code paths (confirmed viastrings | grep AVX2) and SIGILLs on any pre-Haswell x86-64 CPU. There is no Node.js fallback anymore.Impact: Every Intel Mac older than mid-2013 is now permanently capped at 2.1.112 — 2012 iMacs, MacBook Pros, Mac Minis, Mac Pros, plus the broader OCLP user base keeping these machines on modern macOS. Not a huge cohort, but non-zero, and the previous two years of Claude Code releases all ran fine on this hardware.
Suggested fixes (either one resolves it):
cli.jsin the npm tarball as a Node.js fallback — exactly what 2.1.112 and earlier shipped.cli-wrapper.cjscould detect SIGILL from the native binary and re-exec under Node. Lowest-friction option since the code path existed two releases ago.-march=x86-64-v2or equivalent Bun/Zig flags) to avoid AVX2/BMI2/FMA in hot paths.Option 1 is probably cleaner — it preserves the native-binary fast path for modern CPUs while keeping a universal fallback for everyone else, at the cost of ~13 MB in the tarball.
Happy to test pre-release builds on the affected hardware if that's useful.
Good to hear that it was useful — Claude did a lot of the heavy lifting on the tarball diff and version sweep.
On the two options: Option 1 gets my vote for what it's worth. The hardware in this regression window isn't exotic — Ivy Bridge shipped in millions of Macs from 2012–2013, and the ones still in active use are mostly running Sequoia via OCLP, which means they're otherwise fully current. Silently dropping them off the release train for a packaging-level reason (rather than a genuine architectural one) feels like the kind of thing that'll quietly erode trust with a long tail of users who have no way to see it coming. 13 MB in the tarball is a cheap price for keeping that path open.
More than willing to test pre-release builds on the affected hardware as well.
I wouldn't say "most" - OCLP is a pain in the ear. none of my half dozen cheese graters are running sequoia. mind you, we'll never have true data for this - but it seems like 10.15 support for a node.js app is pretty approachable.........
not sure it needs to even been in the tarball - the various and many "native" binary's arent, right? the post-installer is supposed to install them (I have ran it, but haven't looked at it) and just silently-to-npm fails. that failure could be handled and pull the fallback version instead of native binary, from the same source...
Claude Code 2.1.113 has switched to a native executable (after npm deprecation was announced in January), which drops support for some platforms. Unfortunately we don't have plans to support pre-AVX2 Macs going forward. You can pin to the last JS bundle release https://www.npmjs.com/package/@anthropic-ai/claude-code/v/2.1.112 to continue using Claude Code for now.
This is unfortunate, especially given this : https://www.anthropic.com/engineering/april-23-postmortem
@ant-kurt - Could you suggest workarounds for the 3 issues mentioned in the article for users stuck with 2.1.112?
I pulled my MM 2012's out of mothballs for this and anthropic just pulled the rug from underneath because nobody can buy a MM 2026. Tell me it isn't what it looks like. I just subbed for Claude Max today btw - codex running fine on my 2012 macmini - nothing works better than proving regretful decisions.
@brian-kaler - exactly. I use my Macbook Pro 2012 for remote work (1-2 weeks at a time, ad-hoc periods) - it still beats a new Mac Air. I cannot understand their decision, but it now forces one to look at alternative suppliers.
btw - I use Claude Code for pure software engineering work, not vibe-coding or running agents 24/7 on Mac Minis.
I ended up just using a docker container to run claude-code on my 2012 mac mini with AVX1, as the linux version works just fine. I set up an alias to run the container with a bind mount to my current directory on my mac as the working directory for claude-code in the container.
docker? what is that supposed to mean. If its in docker wouldn't it still output illegal instruction?
No, because it is running essentially in a linux VM, and it appears that claude-code for linux does not require AVX2, or it at least has an AVX1 fallback path.
+1
That's a clever workaround for the AVX1 limitation. Did you notice any significant performance drop running it inside Docker compared to native execution? I'm facing the same issue and I'm stuck on version 2.1.98, this limitation is really putting me in a tight spot now.
I ran into the same issue with OpenCode on a MacBook Pro mid-2012 (Ivy Bridge, no AVX2 support). After some digging, the root cause was that Bun stopped compiling with AVX1 support on macOS (it still maintains it for Linux). Machines older than Haswell (2013) only have AVX1 and will crash with an illegal instruction error.
I was able to work around it for OpenCode by recompiling Bun from source with its existing baseline mode (-march=nehalem) enabled for macOS. The tricky part was a chicken-and-egg problem: building Bun normally requires Bun itself for code generation, but the official binary won't run on the target machine. The fix uses Docker to generate the JS artifacts on a Linux x86-64 environment first, then compiles natively with Zig and Clang. There's also a small WebKit config patch to stop the build from trying to download baseline artifacts that don't exist on macOS (macOS just reuses standard WebKit regardless of CPU baseline). I documented the full process here: https://github.com/orainlabs/bun/blob/macos-legacy-baseline/docs/building-on-legacy-macos.md
From there, rebuilding OpenCode from source with the patched Bun worked fine.
Unfortunately none of this is applicable to Claude Code since the source isn't public. I get that Anthropic isn't going to maintain a legacy build for pre-2013 hardware, but it would at least be nice to get a clear error message; something like "AVX2 required, not supported on this CPU", instead of a silent crash.
Getting this same issue on 2.1.145 on an Intel Atom N450 system running Linux.
Adding new evidence for this thread: a per-platform comparison of the Bun variants Anthropic ships in
2.1.175, which suggests the fix is a one-line packaging change already adopted on the other two platforms.Inspecting each
@anthropic-ai/claude-code-{platform}-x64@2.1.175tarball withstrings <binary> | grep "Bun v1.3.14":| Platform package | Embedded Bun signature | Variant |
|---|---|---|
|
claude-code-darwin-x64|Bun v1.3.14 (2a41ca97) macOS x64| normal (requires AVX2) ||
claude-code-linux-x64|Bun v1.3.14 (2a41ca97) Linux x64 (baseline)| baseline ||
claude-code-win32-x64|Bun v1.3.14 (2a41ca97) Windows x64 (baseline)| baseline |Only
darwin-x64is missing the(baseline)marker. The current darwin-x64 binary even references the baseline download URL (bun-darwin-x64-baseline.zip) inside its own asset table, confirming the variant exists upstream and is officially supported by Bun.Concretely confirmed on the same hardware (Mac Pro 2013, Xeon E5-1650 v2, Ivy Bridge, no AVX2): latest Claude Code runs under Windows and Linux on this machine, but SIGILLs on macOS. Pure packaging asymmetry, not a hardware limitation.
Suggested fix: switch the build for
@anthropic-ai/claude-code-darwin-x64frombun-darwin-x64tobun-darwin-x64-baseline, matching the policy already applied to the Linux and Windows builds. No code changes required — a single change to the release pipeline.I had opened #67973 with this same analysis before noticing it duplicates this thread — closing that one and consolidating here.
https://github.com/relecand/claude-desktop-avx-fix/tree/codex-fix-claude-sdk-cli-resolution
Fixes the Claude desktop app on older Intel Macs that lack AVX2 support.