jdx/mise · error

precompiled node archive not found and compilation is…

Error message

precompiled node archive not found and compilation is disabled

What it means

The core node plugin tries to download a prebuilt node distribution; when the archive for the requested version/flavor/platform is not available (FetchOutcome::NotFound) it would normally fall back to compiling node from source. This error is raised when that fallback is explicitly blocked because node compilation is disabled (`node.compile=false` or the setting resolves to false). mise throws it because neither prebuilt-download nor source-compilation can satisfy the install request.

Solutions

  1. Remove the `node.compile=false` setting (or set it true) so mise can build node from source: `mise settings set node.compile true`
  2. Install a node version that has an official prebuilt binary for your platform (e.g. `mise use node@22`)
  3. Check your node mirror/flavor configuration points at a repository that actually hosts the requested archive

Example fix

// before (mise.toml / settings)
[node]
compile = false
version = "19.0.0" // no prebuilt for this platform
// after
[node]
version = "22.14.0" // prebuilt exists; compile left unset
Defensive patterns

Strategy: validation

Validate before calling

// verify a prebuilt node exists before installing, with compile disabled
const ver = "22.14.0";
const res = await fetch(`https://nodejs.org/dist/v${ver}/`);
if (!res.ok) throw new Error(`no prebuilt node ${ver}; set node.compile=true or pick another version`);

Try / catch

try {
  await $`mise install node@${ver}`;
} catch (e) {
  if (String(e).includes("compilation is disabled")) {
    await $`mise settings set node.compile true`;
    await $`mise install node@${ver}`;
  } else throw e;
}

Prevention

When it happens

Trigger: Running `mise install node@<version>` where nodejs.org (or a configured mirror/flavor URL) has no matching tarball for the platform/flavor, while `Settings::node_compile` returns Some(false) so install_compiling is skipped. Also raised when a custom node flavor is missing and compilation is disabled.

Common situations: Pinning an exotic node version that has no prebuilt binary for your OS/arch; setting `node.compile = false` in settings to speed up installs; using a partial mirror that lacks some archives; requesting an unofficial flavor (e.g. skypack/graalvm builds) not published upstream.

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/34231da51e7e53bb. Report an issue: GitHub.

Appendix: source

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

            }
            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")
                }
            }
        }
    }

    async fn install_windows(
        &self,
        ctx: &InstallContext,
        tv: &mut ToolVersion,
        opts: &BuildOpts,
    ) -> Result<()> {
        match self
            .fetch_binary(ctx, tv, opts, || self.extract_zip(opts, ctx))
            .await?
        {
            FetchOutcome::Downloaded => {
                warn_patches_not_applied();
                Ok(())

View on GitHub (pinned to 533346cc37)