{"record":{"id":"5dbfa4c6bb8bad2b","repo":"atuinsh/atuin","slug":"atuin-update-is-only-available-when-atuin-was-in","errorCode":null,"errorMessage":"`atuin update` is only available when atuin was installed via the standalone installer (https://setup.atuin.sh).\nIf you installed atuin with a package manager (brew, nix, pacman, cargo, ...), please update it there instead.","messagePattern":"`atuin update` is only available when atuin was installed via the standalone installer \\(https://setup\\.atuin\\.sh\\)\\.\nIf you installed atuin with a package manager \\(brew, nix, pacman, cargo, \\.\\.\\.\\), please update it there instead\\.","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/atuin/src/command/client/update.rs","lineNumber":31,"sourceCode":"    /// Update (or roll back) to a specific version, e.g. \"18.9.0\" or\n    /// \"18.9.0-nightly.1\", instead of the channel's latest release\n    #[arg(long, conflicts_with = \"check\")]\n    version: Option<String>,\n}\n\nimpl Cmd {\n    #[instrument(level = \"trace\", skip_all, err)]\n    pub async fn run(self, settings: &Settings) -> Result<()> {\n        let current = env!(\"CARGO_PKG_VERSION\");\n\n        let mut updater = AxoUpdater::new_for(\"atuin\");\n        updater.disable_installer_output();\n\n        // The install receipt is written by the shell/powershell installers.\n        // No receipt means atuin came from a package manager, which should\n        // stay in charge of upgrades.\n        if updater.load_receipt().is_err() {\n            bail!(\n                \"`atuin update` is only available when atuin was installed via the standalone installer (https://setup.atuin.sh).\\n\\\n                 If you installed atuin with a package manager (brew, nix, pacman, cargo, ...), please update it there instead.\"\n            );\n        }\n\n        // The receipt records the version the installer wrote; trust the\n        // binary itself in case it was replaced by other means.\n        let _ = updater.set_current_version(current.parse()?);\n\n        if !updater.check_receipt_is_for_this_executable()? {\n            let current_exe = std::env::current_exe()?;\n            let receipt_prefix = updater.install_prefix_root()?;\n            bail!(\n                \"This atuin binary ({}) is not the one the standalone installer installed to {}. \\\n                 Are multiple copies of atuin installed?\",\n                current_exe.display(),\n                receipt_prefix,\n            );","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/atuinsh/atuin/blob/900007c48045867e7f44b0f9bc55ad9dbe99ee0d/crates/atuin/src/command/client/update.rs#L13-L49","documentation":"`atuin update` only works when atuin was installed by the standalone installer, which writes an install receipt on disk. If the updater cannot load that receipt, it assumes a package-manager install (brew, nix, pacman, cargo, ...) and refuses to self-update to avoid fighting the package manager.","triggerScenarios":"Running `atuin update` when no installer receipt exists on disk - i.e. the binary came from a package manager, cargo, or a manually copied binary.","commonSituations":"Homebrew/Nix/cargo installs, distro packages, binaries downloaded manually, or a receipt deleted during cleanup.","solutions":["Update via your package manager instead (brew upgrade atuin, cargo install atuin, etc.)","Reinstall via the standalone installer (https://setup.atuin.sh) if you want `atuin update` to work","Check install method with `which atuin` to confirm which channel to update through"],"exampleFix":"// before\natuin update   # fails for brew install\n// after\nbrew upgrade atuin","handlingStrategy":"try-catch","validationCode":"// check install channel before attempting self-update\nlet out = std::process::Command::new(\"atuin\").arg(\"update\").output()?;\nif !out.status.success() && String::from_utf8_lossy(&out.stderr).contains(\"package manager\") {\n    eprintln!(\"update via your package manager instead\");\n}\n","typeGuard":null,"tryCatchPattern":"match updater.load_receipt() {\n    Err(_) => eprintln!(\"package-manager install; use brew/cargo/etc to update\"),\n    Ok(_) => { /* proceed with update */ }\n}\n","preventionTips":["Track how atuin was installed and use that channel for upgrades","Only use `atuin update` on installer-based installs"],"tags":["cli","update","unsupported-operation"],"backgroundTag":"unsupported-operation","analyzedSha":"900007c48045867e7f44b0f9bc55ad9dbe99ee0d","analyzedAt":"2026-09-19T12:52:51.491Z","contentChangedAt":"2026-09-19T12:52:51.491Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}