badges/shields · error · NotFound

not found in 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.

Solutions

  1. Confirm the app exists in the chosen bucket (check the bucket's bucket/ directory on GitHub for <app>.json)
  2. Try the canonical bucket for that app (e.g. main vs extras)
  3. Check the app name spelling/case exactly matches the manifest filename without the .json extension
  4. 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

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.

Appendix: 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)