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
- Use a known version or tag, e.g. `yarn policies set-version 1.22.19` or `latest`.
- If you want a release candidate, enable the RC-allowing flag so pre-releases are included.
- Double-check the version exists at the yarn releases feed before pinning.
- 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
- Prefer the special tags (latest, berry, nightly) or a concrete existing version.
- Enable RC inclusion when targeting pre-release versions.
- Verify the version exists in the releases feed before pinning.
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.