atuinsh/atuin · error

This atuin binary ({}) is not the one the standalone install

Error message

This atuin binary ({}) is not the one the standalone installer installed to {}. Are multiple copies of atuin installed?

What it means

Atuin's self-updater only updates the binary that the standalone installer originally placed, verified via an install receipt. This error is thrown when the currently executing atuin binary is not the one recorded in that receipt, i.e. the running executable differs from the installer-managed one. It aborts the update to avoid updating (or corrupting) the wrong installation.

Source

Thrown at crates/atuin/src/command/client/update.rs:44

        // The install receipt is written by the shell/powershell installers.
        // No receipt means atuin came from a package manager, which should
        // stay in charge of upgrades.
        if updater.load_receipt().is_err() {
            bail!(
                "`atuin update` is only available when atuin was installed via the standalone installer (https://setup.atuin.sh).\n\
                 If you installed atuin with a package manager (brew, nix, pacman, cargo, ...), please update it there instead."
            );
        }

        // The receipt records the version the installer wrote; trust the
        // binary itself in case it was replaced by other means.
        let _ = updater.set_current_version(current.parse()?);

        if !updater.check_receipt_is_for_this_executable()? {
            let current_exe = std::env::current_exe()?;
            let receipt_prefix = updater.install_prefix_root()?;
            bail!(
                "This atuin binary ({}) is not the one the standalone installer installed to {}. \
                 Are multiple copies of atuin installed?",
                current_exe.display(),
                receipt_prefix,
            );
        }

        let request = match (&self.version, settings.update_channel) {
            (Some(version), _) => {
                UpdateRequest::SpecificVersion(version.trim_start_matches('v').to_string())
            }
            (None, UpdateChannel::Stable) => UpdateRequest::Latest,
            (None, UpdateChannel::Nightly) => UpdateRequest::LatestMaybePrerelease,
        };
        updater.configure_version_specifier(request);

        let channel = match settings.update_channel {
            UpdateChannel::Stable => "stable",

View on GitHub (pinned to c0c717ab04)

Solutions

  1. Run `which -a atuin` to find duplicate copies and remove all but one
  2. Reinstall with the standalone installer so the receipt matches the binary you run
  3. Invoke the installer-managed binary directly (e.g. ~/.atuin/bin/atuin update)
  4. If you manage atuin via a package manager, use that package manager to upgrade instead of `atuin update`

Example fix

// before: PATH resolves to a cargo-installed copy
atuin update
// after: run the installer-managed binary
~/.atuin/bin/atuin update
Defensive patterns

Strategy: validation

Validate before calling

which -a atuin   # ensure only one copy before running `atuin update`

Prevention

When it happens

Trigger: Running `atuin update` when the executing binary (std::env::current_exe) does not match the install prefix recorded in the installer receipt, per updater.check_receipt_is_for_this_executable().

Common situations: Installing atuin both via a package manager (apt/brew/cargo) and via the standalone install script; copying or symlink-swapping binaries; PATH resolving to an older or manually-built copy while the receipt points to ~/.atuin/bin.

Understand the failure class

Background: "is not a compatible type" / "cannot merge" errors: when a value's type doesn't match what the library requires — this error's family across 65 libraries.

Related errors


AI-assisted analysis of atuinsh/atuin@c0c717ab04 (2026-09-12). Data as JSON: /api/errors/71ef8ac29dbaaa32. Report an issue: GitHub.