New 'native' installer: Bun/Zig hype train delivers 2010 anti-patterns: no version control, rollbacks, or professional package management

Status Fixed / completed
Reported on v2.1.15
Maintainer reply ✓ Yes — ant-kurt
Activity 10 comments · opened Jan 22, 2026 · closed Aug 17, 2026
💡 Likely answer: A maintainer (ant-kurt, collaborator) responded on this thread — see the highlighted reply below.

Summary

The new "native" Bun-based installer sacrifices professional tooling requirements (version control, rollbacks, reproducibility) for eliminating Node.js dependency. Claude Code in 2026 lacks proper package management integration, making it unsuitable for professional software engineering environments. The current "official" installer (curl | bash) provides less stability, control, and reproducibility than the deprecated npm method it replaced.

Problem Description

As a professional software engineer, I need:

  • Version pinning for stability (critical given frequent regressions)
  • Rollback capability when new versions break functionality
  • Reproducible installations for team standardization
  • Offline/air-gapped support for corporate environments
  • Integration with system package managers for proper dependency management

The current native installer provides none of these capabilities adequately.

Comparison: Package Management Methods

| Feature | Traditional Package Manager (Expected) | Previous: npm/pnpm | Current: Native Binary |
|---------|-------------------------------------------|------------------------|---------------------------|
| Installation | dnf install claude-code<br>apt install claude-code | pnpm install -g @anthropic-ai/claude-code | curl -fsSL https://claude.ai/install.sh \| bash |
| Repository | Official RPM/DEB repos with GPG signing | npmjs.com registry | Google Cloud Storage bucket |
| Dependency Management | ✅ System package manager handles everything | ⚠️ Node.js 18+ required | ❌ Self-contained (no visibility) |
| Version Pinning | ✅ dnf install claude-code-2.1.10 | ✅ pnpm install -g @anthropic-ai/claude-code@2.1.10 | ❌ Must use installer script with version arg |
| Rollback | ✅ dnf downgrade claude-code | ✅ pnpm install -g @anthropic-ai/claude-code@2.1.10 | ❌ Must manually re-run installer with old version |
| List Available Versions | ✅ dnf list --showduplicates claude-code | ✅ npm view @anthropic-ai/claude-code versions | ❌ No discovery mechanism |
| Lock to Specific Version | ✅ dnf versionlock add claude-code | ✅ Don't run update command | ⚠️ Set DISABLE_AUTOUPDATER=1 (still checks on startup) |
| Update Control | ✅ Admin controls via dnf update | ✅ Manual pnpm update -g | ❌ Auto-updates in background on startup |
| Disable Auto-Updates | ✅ Default (manual only) | ✅ Default (manual only) | ⚠️ Must set env var, still checks on startup |
| Verify Installation | ✅ rpm -V claude-code or debsums | ⚠️ npm ls -g @anthropic-ai/claude-code | ⚠️ claude doctor (limited info) |
| Security Signatures | ✅ GPG-signed packages | ⚠️ npm package signatures | ⚠️ SHA256 checksums only |
| Audit Trail | ✅ System logs, rpm/dpkg database | ⚠️ npm logs | ❌ Opaque background updates |
| Conflicts Detection | ✅ Automatic dependency resolution | ⚠️ npm handles Node.js deps | ❌ None (self-contained) |
| System Integration | ✅ Full integration with OS | ⚠️ Node.js ecosystem only | ❌ Standalone user binary |
| Multi-User | ✅ System-wide or per-user | ⚠️ Typically per-user with -g | ❌ Per-user only |
| Reproducible Builds | ✅ Lock files, version specs | ✅ package.json with exact version | ❌ "latest" or "stable" channel only |
| CI/CD Integration | ✅ Standard package lists | ✅ package.json dependencies | ⚠️ Must hardcode version in install script |
| Offline Installation | ✅ Download .rpm/.deb, install offline | ✅ Download tarball, install offline | ❌ Requires internet for install script |
| Corporate Proxy | ✅ Standard OS proxy settings | ✅ npm proxy config | ⚠️ Depends on curl proxy settings |
| Air-Gapped Environments | ✅ Mirror repos internally | ✅ Mirror npm registry | ❌ Very difficult |

Professional Engineering Requirements (2026 Standard)

| Requirement | Traditional Package Manager | Previous: npm/pnpm | Current: Native Binary |
|-------------|----------------------------------|------------------------|---------------------------|
| Deterministic installations | ✅ Same command = same result | ✅ Package registry ensures consistency | ⚠️ Depends on install script stability |
| Version control | ✅ Pin, rollback, upgrade explicitly | ✅ Full version control via npm | ❌ Limited, requires env vars |
| Dependency management | ✅ Clear, auditable dependencies | ⚠️ Node.js dependency visible | ❌ Self-contained, no visibility |
| Security verification | ✅ GPG signatures standard | ⚠️ npm package signatures | ❌ SHA256 checksums only |
| Offline capability | ✅ Full offline install from cache | ✅ Offline install possible | ❌ Requires internet |
| Integration | ✅ Standard OS package management | ⚠️ npm ecosystem only | ❌ Standalone binary |
| Auditability | ✅ Full system logs and database | ⚠️ npm logs available | ❌ Opaque updates |
| Reproducibility | ✅ Declare versions in manifests | ✅ package.json specifications | ❌ Channel-based only |

Real-World Impact: Regression Handling

Scenario: Version 2.1.15 has a regression, need to rollback to 2.1.10

Traditional Package Manager:

rpm -q claude-code              # See current version
dnf downgrade claude-code-2.1.10  # Rollback
dnf versionlock add claude-code   # Lock it

Previous npm/pnpm:

claude --version                              # See current version
pnpm install -g @anthropic-ai/claude-code@2.1.10  # Rollback
claude --version                              # Verify

Current Native Binary:

claude --version                            # See current version
curl -fsSL https://claude.ai/install.sh | bash -s 2.1.10  # Re-download and re-run installer
export DISABLE_AUTOUPDATER=1                # Pray it doesn't auto-update on next startup
# Add to shell rc permanently

Real-World Impact: Team Standardization

Traditional:

# Ansible/requirements.txt
claude-code = 2.1.10

Previous npm:

{
  "devDependencies": {
    "@anthropic-ai/claude-code": "2.1.10"
  }
}

Current Native:

# ??? No declarative way to specify
# - Document "run curl | bash -s 2.1.10"
# - Each dev must remember version
# - No integration with dependency management

Real-World Impact: CI/CD Pipeline

Traditional:

RUN dnf install -y claude-code-2.1.10

Previous npm:

RUN pnpm install -g @anthropic-ai/claude-code@2.1.10

Current Native:

RUN curl -fsSL https://claude.ai/install.sh | bash -s 2.1.10
# Hope the install script doesn't change behavior
# Hope Google Cloud Storage doesn't go down
# Hope version 2.1.10 stays available forever

Requested Solution

Provide proper Linux package management:

  1. Official RPM repository for Fedora/RHEL/CentOS
  2. Official DEB repository for Debian/Ubuntu
  3. GPG-signed packages for security verification
  4. Version retention for rollback capability
  5. Standard package manager integration (dnf install claude-code)

Until then, please do not deprecate the npm package, as it provides significantly better version control and professional tooling integration than the native installer.

Alternative/Interim Solution

If full package management is not feasible:

  1. Keep npm package maintained (don't deprecate it)
  2. Improve native installer to support:
  • Version listing/discovery
  • Proper version locking (not just env vars)
  • Offline installation
  • Corporate proxy/mirror support
  1. Add --no-auto-update flag that permanently disables auto-update without environment variables

Environment

  • OS: Fedora 43 (Linux 6.17.12)
  • Current Installation: pnpm global (2.1.15)
  • Previous Setup: Had systemd timer for controlled updates (~/.config/systemd/user/claude-code-update.timer)

Personal Note

I am a professional software engineer and Claude Max subscriber (€100+/month). This is not whining - I have 6 other open tickets documenting serious issues:

  • #19720 - Memory leak with extremely long lines
  • #19699 - Infinite loop repeating failing commands
  • #19477 - Silently skips tasks based on unverified assumptions
  • #19457 - Permission confirmations block productivity
  • #15264 - EPERM error when killing background shells
  • #10250 - OAuth/MCP reconnection failures

The pattern is clear: Claude Code is being pushed to production use (hence deprecating npm, pushing auto-updates) while lacking the stability and tooling that professional environments require.

I have canceled my Max subscription because a tool that:

  • Cannot be version-controlled reliably
  • Forces auto-updates despite frequent regressions
  • Lacks basic package management in 2026
  • Cannot be used in air-gapped/corporate environments

...is not worth €100+/month, regardless of the underlying model quality.

Expected Behavior

In 2026, professional developer tools should provide:

  • Standard OS package management (rpm/deb repositories)
  • Version pinning and rollback capabilities
  • Reproducible installations for teams
  • Corporate/air-gapped environment support

Actual Behavior

  • No package repositories
  • Deprecated the more controllable npm method
  • "Official" installation via curl | bash
  • Auto-updates that cannot be reliably disabled
  • No practical version control for production use

---

This is a fundamental infrastructure issue that affects professional adoption of Claude Code.

View original on GitHub ↗

9 Comments

github-actions[bot] · 7 months ago

Found 3 possible duplicate issues:

  1. https://github.com/anthropics/claude-code/issues/13243
  2. https://github.com/anthropics/claude-code/issues/20012
  3. https://github.com/anthropics/claude-code/issues/13090

This issue will be automatically closed as a duplicate in 3 days.

  • If your issue is a duplicate, please close it and 👍 the existing issue instead
  • To prevent auto-closure, add a comment or 👎 this comment

🤖 Generated with Claude Code

ant-kurt collaborator · 7 months ago

@jhinrichsen thanks for the well-thought-out feedback.

Historically, Claude Code required installation of both npm (for distribution) and node (for runtime). We want to move everyone to our native executable; in tandem, we have been trying to shift away from npm as we do not believe it is the best way to distribute that executable.

Where we stand today:

  • The @anthropic-ai/claude-code npm package is continuing to be published (for now), containing the node build (for now)
  • Claude Code native executable can be installed via curl | bash, homebrew, pacman, nix, and winget
  • Some developers are comfortable with curl | bash installing to ~/.local and performing auto-updates. Some are not.
  • For distribution methods other than npm and curl | bash, we are currently deferring to the package manager for updates, e.g. a homebrew-installed Claude Code will not auto-update, and will instead recommend the appropriate homebrew command

Potential changes:

  • We are considering a few options for the future of the npm package. One is replacing the contents of the @anthropic-ai/claude-code npm package with the native build, allowing developers to continue using npm as a distribution mechanism.
  • Add distribution via dnf, apt, apk

We're continuing to discuss this internally. What we would appreciate from you, and the rest of the community, is:

  • Continue providing feedback on what distribution scenarios are pain points today
  • Keep using the native executable if possible - otherwise use node (and set env var DISABLE_INSTALLATION_CHECKS in settings.json if the warnings are bothering you) and please share what blockers you ran into
  • Is your preference to install Claude Code via npm, a traditional package manager, or curl?
  • Be on the lookout for more updates shared via the CHANGELOG
maxritter · 7 months ago

@ant-kurt Thanks for giving us this DISABLE_INSTALLATION_CHECKS to continue using npm. The native binary is just a pain to use, takes forever to download and install and performance is much worse than npm version, at least on my Macbook M3 Pro arm64 arch. I will stay on npm until native installation has caught up ;)

semyonf · 7 months ago

@maxritter native version even has its own nasty bugs, like this one https://github.com/anthropics/claude-code/issues/14165

maxritter · 7 months ago

@semyonf Yes no reason to use it, npm is much better

palimondo · 7 months ago

Hey, Anthropic! Please take this issue to heart. This stressful morning, I have displayed a lack of proper judgement on my part, and followed the orange prompt that told me to run claude install. Now I don't have a working Clade Code on my Mac, and my flight leaves in 6 hours… As a $200 Max subscriber, I have trusted that you would not sabotage my work like this. My bad, I guess? You cannot vibe code your way to trust, but you sure as hell can burn goodwill at inference speed, if you don't learn, understand and internalize professional requirements that are expected in relationships with paying customers!
!image
Fixed by reinstalling via npm:
!image

patmaddox · 6 months ago

Hi @ant-kurt, I have been a paying Claude Max subscriber since July 2025. I use Claude Code all day, every day in my work on FreeBSD. The npm install works great.

The move to exclusively supporting bun-based installs will put us in a tough situation, because my understanding is that bun depends on new Linux kernel features and so will not be ported to FreeBSD any time soon.

I hope you will keep in mind how to continue supporting Claude Code on FreeBSD.

MattStarfield · 6 months ago

Real-world impact: Auto-update kills persistent Claude Code sessions

Adding my experience to this thread. I run multiple Claude Code sessions in tmux windows via HAPImatic (Anthropic's official remote access tool) on a Raspberry Pi 5. This setup allows me to access Claude Code from any device via web browser.

What happened today:

All 7 of my running Claude Code sessions were simultaneously "aborted" when the auto-updater silently replaced the binary from 2.1.29 → 2.1.30. No warning, no graceful shutdown, just instant termination of active work.

Evidence from my system:

~/.local/share/claude/versions/
  2.1.30  →  Feb 3 15:28  (installed without consent)
  2.1.29  →  Feb 2 14:51  (was running fine)
  2.1.22  →  Jan 28

The symlink at ~/.local/bin/claude was repointed mid-session, killing all processes using the old binary.

Why this is particularly painful:

  1. I was coerced away from npm installation by Anthropic's messaging that the native installer was "recommended"
  2. I was not informed this would mean forced auto-updates that kill running sessions
  3. There is no setting to disable this - I checked the schema, autoUpdatesChannel only accepts "latest" or "stable", there's no "disabled" or "manual" option
  4. The documented workarounds (DISABLE_AUTOUPDATER=1, autoUpdaterStatus: "disabled") apparently don't work per issues #13213 and #14985

What I need (and I suspect many others do too):

  • Update on next session start, not while sessions are running
  • Or at minimum, a reliable way to disable auto-updates so I can update manually with npm update -g

I've now switched back to npm installation to regain control, but this should not be necessary. Professional tools should not kill active work without consent.

ThatDragonOverThere · 5 months ago

Auto-updater silently reinstalled Bun binary, undid crash workaround, re-broke my system

Adding a concrete case study to this thread.

Background: 49 documented Bun crashes in 33 days on Windows (#21576), including 5 full computer lockups requiring hard reboots. On Feb 26 I switched to npm install -g @anthropic-ai/claude-codezero crashes for 4 consecutive days on Node.js. Definitive proof that the Bun runtime is the sole crash source.

What happened: Overnight on Mar 3, the auto-updater silently re-downloaded the Bun binary to ~/.local/bin/claude.exe. Since .local/bin is earlier on PATH than the npm directory, my system started resolving to the Bun binary without my knowledge. Crashes immediately returned. The auto-updater also downgraded me from v2.1.62 (npm) to v2.1.61 (native).

I only discovered this because the crashes came back. which claude confirmed it was resolving to .local/bin again instead of the npm version.

The core problem, echoing @MattStarfield and @palimondo: autoUpdatesChannel only accepts "latest" or "stable". Setting it to "disabled" produces a validation error. There is no way to opt out.

When users are forced to work around a platform-breaking bug by switching runtimes, the auto-updater should not silently undo that workaround. The updater is actively hostile to users trying to keep their systems stable.

Ask: Add a "disabled" or "manual" option for autoUpdatesChannel, or an env var like CLAUDE_NO_AUTO_UPDATE=1 that actually works. Users who pay for Max should have the right to control what runs on their machines.

Showing cached comments. Read the full discussion on GitHub ↗