yarnpkg/yarn · error · Error

Release not found: ${range}

Error message

Release not found: ${range}

What it means

`yarn policies set-version <range>` fetches the list of yarn releases and finds one whose version satisfies the given semver range (policies.js:138-141). If none satisfies, it throws a plain `Error("Release not found: <range>")`. This is a runtime Error, not a MessageError, so it escapes without yarn's reporter formatting.

Source

Thrown at src/cli/commands/policies.js:144

    } else {
      let releases = [];

      try {
        releases = await fetchReleases(config, {
          includePrereleases: allowRc,
        });
      } catch (e) {
        reporter.error(e.message);
        return;
      }

      const release = releases.find(release => {
        // $FlowFixMe
        return semver.satisfies(release.version, range);
      });

      if (!release) {
        throw new Error(`Release not found: ${range}`);
      }

      const asset = getBundleAsset(release);
      invariant(asset, 'The bundle asset should exist');

      bundleUrl = asset.browser_download_url;
      bundleVersion = release.version.version;
    }

    reporter.log(`Downloading ${chalk.green(bundleUrl)}...`);

    const bundle = await fetchBundle(config, bundleUrl);

    const yarnPath = path.resolve(config.lockfileFolder, `.yarn/releases/yarn-${bundleVersion}.cjs`);
    reporter.log(`Saving it into ${chalk.magenta(yarnPath)}...`);
    await fs.mkdirp(path.dirname(yarnPath));
    await fs.writeFile(yarnPath, bundle);
    await fs.chmod(yarnPath, 0o755);

View on GitHub (pinned to c2dda503f3)

Solutions

  1. Use a known version or tag, e.g. `yarn policies set-version 1.22.19` or `latest`.
  2. If you want a release candidate, enable the RC-allowing flag so pre-releases are included.
  3. Double-check the version exists at the yarn releases feed before pinning.
  4. If it failed mid-network-error, note the prior try/catch at policies.js:129-136 reports fetch errors separately; re-run once connectivity is stable.

Example fix

# before
$ yarn policies set-version 99.0.0   # Release not found: 99.0.0
# after
$ yarn policies set-version 1.22.19
Defensive patterns

Strategy: validation

Validate before calling

const semver = require('semver');
async function pickRelease(fetchReleases, range, {allowRc} = {}) {
  const releases = await fetchReleases({includePrereleases: !!allowRc});
  const release = releases.find(r => semver.satisfies(r.version, range));
  if (!release) throw new Error(`Release not found: ${range}`);
  return release;
}

Try / catch

try {
  await runYarn(['policies', 'set-version', range]);
} catch (e) {
  if (/Release not found/.test(e.message)) {
    console.error(`No yarn release matches '${range}'. Use 'latest' or a real version.`);
    return;
  }
  throw e;
}

Prevention

When it happens

Trigger: Running `yarn policies set-version 99.0.0`, a typo'd tag, or a range that matches no published yarn release; requesting a pre-release without the allow-RC flag (so pre-releases are excluded from the fetched list).

Common situations: Asking for a version that doesn't exist; using a tag other than the special-cased ones (latest/nightly/berry/v2) that resolves to nothing; offline/partial release list due to a network hiccup.

Related errors


AI-assisted analysis of yarnpkg/yarn@c2dda503f3 (2026-08-13). Data as JSON: /api/errors/13010ea24988efa9. Report an issue: GitHub.