badges/shields · error · NotFound
no released version found
Error message
no released version found
What it means
The Packagist base service collects version strings from the packagist metadata and, if none survive filtering (no entries with a string `version` field), throws NotFound with this message. It represents a package that exists on Packagist but has no usable released versions listed.
Source
Thrown at services/packagist/packagist-base.js:161
* Find the object representation of the latest release.
*
* @param {object[]} versions An array of object representing a version.
* @param {boolean} includePrereleases Includes pre-release semver for the search.
*
* @returns {object} The object of the latest version.
* @throws {NotFound} Thrown if there is no item from the version array.
*/
findLatestRelease(versions, includePrereleases = false) {
// Find the latest version string, if not found, throw NotFound.
const versionStrings = versions
.filter(
version =>
typeof version.version === 'string' ||
version.version instanceof String,
)
.map(version => version.version)
if (versionStrings.length < 1) {
throw new NotFound({ prettyMessage: 'no released version found' })
}
let release = latest(versionStrings)
if (!includePrereleases) {
release = latest(versionStrings.filter(isStable)) || release
}
return versions.filter(version => version.version === release)[0]
}
}
const description = `
<a href="https://packagist.org/">Packagist</a> is a registry for PHP packages which can be installed with Composer.
`
const customServerDocumentationFragment = `
Note that only network-accessible packagist.org and other self-hosted Packagist instances are supported.
`
View on GitHub (pinned to 766fd8bc89)
Solutions
- Confirm the package has at least one tagged release on packagist.org; if you own it, tag a release (e.g. v1.0.0) and push it.
- Verify the vendor/package name in the badge URL points at the intended package.
- If the package is abandoned, remove the badge or point it at a maintained fork.
Example fix
// before composer require --dev vendor/pkg (never tagged) // after git tag v1.0.0 && git push origin v1.0.0 (then re-check the badge)
Defensive patterns
Strategy: validation
Validate before calling
// Ensure the package has tagged releases before using a version badge
const meta = await fetch(`https://repo.packagist.org/p2/${vendor}/${pkg}.json`).then(r => r.json())
const versions = (meta.packages?.[`${vendor}/${pkg}`] || []).filter(v => typeof v.version === 'string')
if (versions.length < 1) throw new Error('Package has no tagged releases') Type guard
function hasReleases(meta, name) {
const list = meta && meta.packages && meta.packages[name]
return Array.isArray(list) &&
list.some(v => typeof v.version === 'string' || v.version instanceof String)
} Try / catch
try {
const badge = await getPackagistVersion(vendor, pkg)
} catch (e) {
if (e.message === 'no released version found') {
// package exists but untagged: omit badge until a release is tagged
} else { throw e }
} Prevention
- Tag a stable release (and push the tag) before adding a version badge
- Check packagist.org shows release versions, not just branch aliases
- Watch for abandoned packages whose versions get purged upstream
When it happens
Trigger: Requesting a Packagist version/dependency badge for a package whose metadata `versions` object is empty or contains only entries lacking string version fields (length < 1 after mapping).
Common situations: Newly registered packages with no tagged releases (only dev branches), abandoned packages whose versions were purged, or branch-only/abandoned packages where packagist lists no version entries.
Related errors
AI-assisted analysis of badges/shields@766fd8bc89 (2026-08-30).
Data as JSON: /api/errors/4f8dead326e4a246.
Report an issue: GitHub.