denoland/deno · error

could not find ' ' backend binary inside

Error message

could not find '{backend}' backend binary inside {}

What it means

After ensure_downloaded() succeeds (archive fetched, SHA-256 verified against the lock, extracted into the cache), locate_backend_binary() walks the extracted tree to find the backend executable — and finds nothing. The download itself is trusted, so this means the archive's internal layout does not match what the locator expects, not a network or checksum problem.

Solutions

  1. Inspect the cache dir named in the error (tar tf / unzip -l on the cached archive) to see where the binary actually landed.
  2. Delete that cache dir and re-run to rule out a truncated extraction (disk-full, interrupted run).
  3. Update deno to a build whose locator matches the pinned laufey release layout — the pair is meant to move together.
  4. If the layout genuinely changed upstream, file an issue with the archive listing so the locator gets updated.

Example fix

# before
deno desktop
# error: could not find 'wry' backend binary inside ~/.cache/deno/desktop/laufey/v1.2.3-...

# after: inspect, then clear and re-download
unzip -l ~/.cache/deno/desktop/laufey/v1.2.3-x86_64-pc-windows-msvc/*.zip | less
rm -rf ~/.cache/deno/desktop/laufey/v1.2.3-x86_64-pc-windows-msvc
deno desktop
Defensive patterns

Strategy: retry

Validate before calling

# After a failed run, inspect the extracted tree to see if the binary exists at all
find "$(deno info | awk '/Cache directory/{print $3}')/desktop/laufey" -maxdepth 3 -type f 2>/dev/null
# or simply list the cached archive:
# unzip -l ~/.cache/deno/desktop/laufey/<ver-target>/*.zip

Try / catch

Catch the error, print the cache dir from the message, list its contents for the user, delete the dir, and retry once — a fresh verified extraction fixes truncated-output cases; if the pristine archive still lacks the binary, escalate as an upstream layout change instead of retrying again.

Prevention

When it happens

Trigger: A laufey release whose archive puts the backend binary at a new/unexpected path or names it differently; extraction silently dropped files (disk full, permissions); the backend genuinely contains no binary for this platform and the archive is a stub.

Common situations: The laufey project restructured its release archives (new top-level dir, renamed binary) while the deno pin still references the old version-compatible expectations; the cache dir was extracted onto a full disk; version skew between the pinned LAUFEY_VERSION archive layout and this deno build's locator.

Related errors


AI-assisted analysis of denoland/deno@f7822238ca (2026-08-20). Data as JSON: /api/errors/13ebf06c795bd3ec. Report an issue: GitHub.

Appendix: source

Thrown at cli/tools/desktop.rs:2115

      // id — same fix as the download path, applied every launch
      // because a fresh `cargo build` of laufey restores the linker's
      // default `Identifier=laufey`. The harmonize call is idempotent:
      // already-correct binaries are skipped.
      #[cfg(target_os = "macos")]
      if let Some(laufey_app) = laufey_app_for_binary(&binary)
        && let Err(e) = harmonize_laufey_app_identifiers(&laufey_app)
      {
        log::warn!(
          "[desktop] could not re-sign dev laufey backend: {e} \
           (notifications may not work in HMR mode)"
        );
      }
      return Ok(binary);
    }

    let dir = self.ensure_downloaded(backend, target).await?;
    locate_backend_binary(&dir, backend, target).ok_or_else(|| {
      deno_core::anyhow::anyhow!(
        "could not find '{backend}' backend binary inside {}",
        dir.display()
      )
    })
  }

  /// Locate the LAUFEY `.app` bundle for `backend` on a macOS `target`.
  async fn find_app_bundle(
    &self,
    backend: &str,
    target: &str,
  ) -> Result<PathBuf, AnyError> {
    if let Some(dev_dir) = laufey_dev_dir() {
      return locate_dev_app_bundle(&dev_dir, backend).ok_or_else(|| {
        deno_core::anyhow::anyhow!(
          "could not find '{backend}' .app bundle under {} (set via {})",
          dev_dir.display(),
          LAUFEY_DEV_DIR_ENV

View on GitHub (pinned to f7822238ca)