atuinsh/atuin · error
This atuin binary ( ) is not the one the standalone…
Error message
This atuin binary ({}) is not the one the standalone installer installed to {}. Are multiple copies of atuin installed? What it means
Even when an installer receipt exists, `atuin update` verifies that the currently running executable is the one the installer placed. If the running binary path does not match the receipt's install prefix, the updater refuses, since updating the installed copy would not update (and could confuse) the copy actually running.
Solutions
- Find all copies: `which -a atuin` and remove or shadow the non-installer ones
- Run the installer-installed binary directly, or fix PATH order so it wins
- Reinstall with the standalone installer to refresh the receipt and binary together
Example fix
// before # cargo bin shadows installer copy in PATH export PATH="$HOME/.cargo/bin:$PATH" // after export PATH="$PATH:$HOME/.cargo/bin" # installer copy found first atuin update
Defensive patterns
Strategy: validation
Validate before calling
let exe = std::env::current_exe()?;
println!("running: {}", exe.display());
// confirm this matches the receipt install prefix before updating
Prevention
- Keep only one atuin installation; check with `which -a atuin`
- Avoid mixing installer and cargo/brew installs on one machine
- Fix PATH ordering so the intended binary wins
When it happens
Trigger: Running `atuin update` while executing a different atuin binary than the installer-installed one - e.g. a cargo-built copy earlier in PATH while an installer copy also exists.
Common situations: Multiple installs (brew + installer, cargo + installer), PATH shadowing, moving/renaming the installed binary, or running atuin from a build directory.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- `atuin update` is only available when atuin was installed…
- A script named ' ' already exists
- `atuin history tail` requires Atuin to be built with the…
- `atuin hook ` is not supported. Use `atuin hook install `.
- authentication canceled
AI-assisted analysis of atuinsh/atuin@900007c480 (2026-09-19).
Data as JSON: /api/errors/71ef8ac29dbaaa32.
Report an issue: GitHub.
Appendix: 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 900007c480)