badges/shields · error · NotFound
${app} not found in bucket "${bucket}"
Error message
${app} not found in bucket "${bucket}" What it means
Thrown when the bucket itself resolved fine but the requested app manifest (bucket/<app>.json) could not be fetched from the bucket's GitHub repository — the underlying fetch returned NotFound, which is re-wrapped with this more specific message. It means the app name is not present in that bucket.
Source
Thrown at services/scoop/scoop-base.js:71
bucketUrl = `https://github.com/${user}/${repo}`
} catch (e) {
throw new NotFound({ prettyMessage: `bucket "${bucket}" not found` })
}
}
const {
groups: { user, repo },
} = gitHubRepoRegExp.exec(bucketUrl)
try {
return await fetchJsonFromRepo(this, {
schema,
user,
repo,
branch: 'master',
filename: `bucket/${app}.json`,
})
} catch (error) {
if (error instanceof NotFound) {
throw new NotFound({
prettyMessage: `${app} not found in bucket "${bucket}"`,
})
}
throw error
}
}
}
export const description =
'[Scoop](https://scoop.sh/) is a command-line installer for Windows'
View on GitHub (pinned to 766fd8bc89)
Solutions
- Confirm the app exists in the chosen bucket (check the bucket's bucket/ directory on GitHub for <app>.json)
- Try the canonical bucket for that app (e.g. main vs extras)
- Check the app name spelling/case exactly matches the manifest filename without the .json extension
- If the bucket moved the manifest, update the badge URL to the new app name
Example fix
// before https://img.shields.io/scoop/v/googlechrome/Extras // after (correct manifest name in extras bucket) https://img.shields.io/scoop/v/googlechrome/ScoopInstaller/Extras
Defensive patterns
Strategy: validation
Validate before calling
// Verify the app manifest exists in the bucket repo before requesting the badge
async function appInBucket(user, repo, app) {
const res = await fetch(`https://raw.githubusercontent.com/${user}/${repo}/master/bucket/${app}.json`, { method: 'HEAD' })
return res.ok
}
if (!(await appInBucket('ScoopInstaller', 'Extras', 'googlechrome'))) throw new Error('app not in bucket') Try / catch
try {
const badge = await fetchBadgeUrl(scoopBadgeUrl)
} catch (e) {
if (/not found in bucket/.test(e.message)) {
console.warn('App manifest missing: check bucket/<app>.json exists in that bucket')
} else throw e
} Prevention
- Confirm the manifest filename matches the app name (case-sensitive) before using the badge
- Check which bucket actually hosts the app after Scoop app migrations
- HEAD-check the raw GitHub manifest URL when generating badges dynamically
- Note the service reads the master branch; buckets restructuring away from bucket/*.json will 404
When it happens
Trigger: Requesting a badge for an `app` whose `bucket/<app>.json` manifest does not exist in the specified bucket — app name typo, wrong case, app living in a different bucket (e.g. 'extras' vs 'main'), or the manifest being removed/renamed upstream.
Common situations: An app was moved between Scoop buckets; the app name in `scoop install <bucket>/<app>` differs from the manifest file name; the bucket repository uses a non-default branch or restructured its bucket/ directory so the fetch 404s.
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 badges/shields@766fd8bc89 (2026-08-30).
Data as JSON: /api/errors/9a3836e776813d88.
Report an issue: GitHub.