{"record":{"id":"8a0188b024957eda","repo":"withastro/astro","slug":"no-problem-find-our-official-integrations-at-http","errorCode":null,"errorMessage":"No problem! Find our official integrations at https://astro.build/integrations","messagePattern":"No problem! Find our official integrations at https://astro\\.build/integrations","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"info","filePath":"packages/astro/src/cli/add/index.ts","lineNumber":873,"sourceCode":"\t\t\t\tconst parsed = parseIntegrationName(integration);\n\t\t\t\tif (!parsed) {\n\t\t\t\t\tthrow new Error(`${bold(integration)} does not appear to be a valid package name!`);\n\t\t\t\t}\n\t\t\t\tlet { scope, name, tag } = parsed;\n\t\t\t\tlet pkgJson;\n\t\t\t\tlet pkgType: 'first-party' | 'third-party';\n\n\t\t\t\tif (scope && scope !== '@astrojs') {\n\t\t\t\t\tpkgType = 'third-party';\n\t\t\t\t} else {\n\t\t\t\t\tconst firstPartyPkgCheck = await fetchPackageJson('@astrojs', name, tag);\n\t\t\t\t\tif (firstPartyPkgCheck instanceof Error) {\n\t\t\t\t\t\tif (firstPartyPkgCheck.message) {\n\t\t\t\t\t\t\tspinner.message(yellow(firstPartyPkgCheck.message));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspinner.message(yellow(`${bold(integration)} is not an official Astro package.`));\n\t\t\t\t\t\tif (!(await askToContinue({ flags, logger }))) {\n\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t`No problem! Find our official integrations at ${cyan(\n\t\t\t\t\t\t\t\t\t'https://astro.build/integrations',\n\t\t\t\t\t\t\t\t)}`,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tspinner.message('Resolving with third party packages...');\n\t\t\t\t\t\tpkgType = 'third-party';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tpkgType = 'first-party';\n\t\t\t\t\t\tpkgJson = firstPartyPkgCheck as any;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (pkgType === 'third-party') {\n\t\t\t\t\tconst thirdPartyPkgCheck = await fetchPackageJson(scope, name, tag);\n\t\t\t\t\tif (thirdPartyPkgCheck instanceof Error) {\n\t\t\t\t\t\tif (thirdPartyPkgCheck.message) {\n\t\t\t\t\t\t\tspinner.message(yellow(thirdPartyPkgCheck.message));\n\t\t\t\t\t\t}","sourceCodeStart":855,"sourceCodeEnd":891,"githubUrl":"https://github.com/withastro/astro/blob/e294953aa8aadd98d5be92e60a03037b05dbdfd4/packages/astro/src/cli/add/index.ts#L855-L891","documentation":"Thrown by `astro add` when the requested integration could not be resolved as an official `@astrojs` package and the user answered 'no' to the prompt to continue with a third-party package. The CLI fetched `@astrojs/<name>` from the configured npm registry via fetchPackageJson, got an Error back, warned, and asked via askToContinue. It is a friendly abort, not a crash: nothing is installed and the command exits with this message.","triggerScenarios":"Running `astro add <name>` without a scope where `@astrojs/<name>` does not exist on the registry, then declining the third-party fallback prompt. Only reachable when the first-party registry check fails AND the session is interactive enough to ask.","commonSituations":"Typo in the integration name (e.g. `astro add vuee`), assuming a community integration is official, a package that was renamed or removed from the @astrojs scope, or a private/corporate registry that does not proxy registry.npmjs.org so every @astrojs lookup fails.","solutions":["Find the exact official name at https://astro.build/integrations and re-run `astro add <correct-name>`","If the integration is legitimately third-party, answer 'y' at the prompt or pass the scoped name directly: `astro add @scope/name`","If you are behind a private registry, verify it can serve @astrojs packages: `npm config get registry` then `npm view @astrojs/<name> version`"],"exampleFix":"# before: typo, then declined the third-party fallback\nastro add vuee   # \"@astrojs/vuee is not an official Astro package.\" -> answered n\n\n# after\nastro add vue","handlingStrategy":"validation","validationCode":"import { execSync } from 'node:child_process';\n\nfunction existsOnRegistry(pkg) {\n  try {\n    execSync(`npm view ${pkg} name`, { stdio: ['pipe', 'pipe', 'ignore'] });\n    return true;\n  } catch {\n    return false;\n  }\n}\n\n// before spawning `astro add <name>`\nif (!existsOnRegistry(`@astrojs/${name}`) && !existsOnRegistry(name)) {\n  throw new Error(`unknown integration: ${name}`);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep a whitelist of known integration names in your setup scripts instead of free-text input","Prefer fully-scoped names (`astro add @scope/name`) so Astro skips the first-party guessing step","Verify registry reachability once per environment (`npm view @astrojs/react version`) before scripting astro add"],"tags":["cli","astro-add","interactive-prompt","package-registry","integrations"],"backgroundTag":"package-not-found-in-registry","analyzedSha":"e294953aa8aadd98d5be92e60a03037b05dbdfd4","analyzedAt":"2026-08-18T18:48:03.901Z","contentChangedAt":"2026-08-18T18:48:03.901Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}