jdx/mise · error

locked mode requires the locked precompiled artifact

Error message

{message}
locked mode requires the locked precompiled artifact

What it means

When node precompiled archive fetch returns NotFound in locked mode and a flavor-specific message exists (e.g. for node flavors whose builds are not published), the error is raised with the flavor message plus the locked-mode requirement, explaining that locked installs cannot fall back to compiling or other artifacts.

Solutions

  1. Regenerate mise.lock with `mise lock` so it points at an existing artifact
  2. Remove the flavor requirement (use standard node) or switch to a version with published flavor builds
  3. Disable locked mode if you can accept a source compile fallback

Example fix

# before
mise install node@20.0.0  # locked, flavor build missing

# after
mise lock && mise install node@20.0.0
# or drop the flavor: mise use node@20.0.0
Defensive patterns

Strategy: fallback

Validate before calling

# verify the flavor archive exists for the platform before locked install
curl -sfIL "https://nodejs.org/dist/v20.0.0/node-v20.0.0-linux-x64.tar.gz"

Try / catch

mise install node@X || { mise lock; mise install node@X; }

Prevention

When it happens

Trigger: Running `mise install node` (or exec/use) with locked mode active, node_compile disabled by lock semantics, and the requested node flavor's precompiled archive not being found upstream.

Common situations: Using locked mode (mise.lock) with a node flavor whose official precompiled builds don't exist for the platform/version; stale lock pointing at a removed artifact.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/95c449a5d8922daf. Report an issue: GitHub.

Appendix: source

Thrown at src/plugins/core/node.rs:136

                    ExtractionFormat::TarGz,
                    &ExtractOptions {
                        strip_components: 1,
                        pr: Some(ctx.pr.as_ref()),
                        ..Default::default()
                    },
                )?;
                Ok(())
            })
            .await?
        {
            FetchOutcome::Downloaded => {
                warn_patches_not_applied();
                Ok(())
            }
            FetchOutcome::NotFound => {
                if ctx.locked {
                    if let Some(message) = node_flavor_not_found_message(opts) {
                        bail!("{message}\nlocked mode requires the locked precompiled artifact")
                    }
                    bail!(
                        "precompiled node archive not found and locked mode requires the locked precompiled artifact"
                    )
                } else if Settings::get().node_compile(CompilePurpose::Inspect) != Some(false) {
                    if let Some(message) = node_flavor_not_found_message(opts) {
                        warn!("{message}");
                    }
                    self.install_compiling(ctx, tv, opts).await
                } else {
                    if let Some(message) = node_flavor_not_found_message(opts) {
                        bail!("{message}\ncompilation is disabled")
                    }
                    bail!("precompiled node archive not found and compilation is disabled")
                }
            }
        }
    }

View on GitHub (pinned to 533346cc37)