{"record":{"id":"f03c77b0f9ee5236","repo":"jdx/mise","slug":"no-lockfile-url-found-for-on-platform-loc-f03c77","errorCode":null,"errorMessage":"No lockfile URL found for {} on platform {} (--locked mode)\nhint: Run `mise lock` to generate lockfile URLs, or disable locked mode","messagePattern":"No lockfile URL found for (.+?) on platform (.+?) \\(--locked mode\\)\nhint: Run `mise lock` to generate lockfile URLs, or disable locked mode","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/backend/mod.rs","lineNumber":3381,"sourceCode":"        // Exempt tool stubs from lockfile requirements since they are ephemeral\n        // Also exempt backends that don't support URL locking (e.g., Rust uses rustup)\n        // This must run before the dry-run check so that --locked --dry-run still validates\n        let settings = Settings::get();\n        if ctx.locked && settings.lockfile == Some(false) {\n            bail!(\n                \"locked mode requires lockfile to be enabled\\n\\\n                hint: Remove `lockfile = false` or set `lockfile = true`, or disable locked mode\"\n            );\n        }\n        if ctx.locked && !tv.request.source().is_tool_stub() && self.supports_lockfile_url() {\n            let platform_key = self.get_platform_key();\n            let has_lockfile_url = tv\n                .lock_platforms\n                .get(&platform_key)\n                .and_then(|p| p.url.as_ref())\n                .is_some();\n            if !has_lockfile_url {\n                bail!(\n                    \"No lockfile URL found for {} on platform {} (--locked mode)\\n\\\n                    hint: Run `mise lock` to generate lockfile URLs, or disable locked mode\",\n                    tv.style(),\n                    platform_key\n                );\n            }\n        }\n\n        // A rolling release (e.g. a `nightly` tag) keeps the same version string,\n        // so its install dir already existing does NOT mean it's up-to-date.\n        let rolling_reinstall = !ctx.force\n            && self.is_version_installed(&ctx.config, &tv, true)\n            && self.is_rolling_version_outdated(&ctx.config, &tv).await;\n\n        // Handle dry-run mode early to avoid plugin installation\n        if ctx.dry_run {\n            use crate::ui::progress_report::ProgressIcon;\n            let satisfied = !ctx.force","sourceCodeStart":3363,"sourceCodeEnd":3399,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/backend/mod.rs#L3363-L3399","documentation":"In --locked mode, a backend that supports URL locking must have a pinned URL recorded in the lockfile for the exact platform being installed (tv.lock_platforms[platform_key].url). When the lockfile has an entry structure but no URL for this platform, mise refuses to install unpinned.","triggerScenarios":"mise install --locked for a tool version whose lock_platforms entry for get_platform_key() has no url — lockfile generated before URL locking existed, on a different platform, or from an older mise version.","commonSituations":"Upgrading mise and adopting --locked on an old mise.lock; locking on macOS then installing on Linux; tool version re-resolved to one not previously locked.","solutions":["Run `mise lock` on the target platform to generate lockfile URLs","Run `mise lock` for all relevant platforms (e.g. in CI matrix) before enabling --locked","Disable --locked mode for this install"],"exampleFix":"// before\nmise install --locked go@1.22   # fails on linux-arm64: no locked URL\n// after\nmise lock go@1.22 && mise install --locked go@1.22","handlingStrategy":"validation","validationCode":"// bash: ensure a locked URL exists for the current platform before --locked install\ngrep -A2 \"$(mise exec -- uname -m)\" mise.lock | grep -q 'url =' || { echo 'run: mise lock'; exit 1; }","typeGuard":null,"tryCatchPattern":"// bash\nmise install --locked tool || case $? in\n  *) mise lock tool && mise install --locked tool ;; esac","preventionTips":["Generate lockfiles on every platform in your support matrix (CI job per OS/arch)","Re-run `mise lock` after mise upgrades that change lockfile format","Commit mise.lock so all machines share pinned URLs"],"tags":["lockfile","locked-mode","platform","install"],"backgroundTag":"missing-lockfile-entry","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}