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

  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.