withastro/astro · info · Error
No problem! Find our official integrations at…
Error message
No problem! Find our official integrations at https://astro.build/integrations
What it means
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.
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`
Example fix
# before: typo, then declined the third-party fallback astro add vuee # "@astrojs/vuee is not an official Astro package." -> answered n # after astro add vue
Defensive patterns
Strategy: validation
Validate before calling
import { execSync } from 'node:child_process';
function existsOnRegistry(pkg) {
try {
execSync(`npm view ${pkg} name`, { stdio: ['pipe', 'pipe', 'ignore'] });
return true;
} catch {
return false;
}
}
// before spawning `astro add <name>`
if (!existsOnRegistry(`@astrojs/${name}`) && !existsOnRegistry(name)) {
throw new Error(`unknown integration: ${name}`);
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Unable to fetch . Does the package exist?
- doesn't appear to be an integration or an adapter. Find our…
- Couldn't parse tsconfig.json or jsconfig.json
- Invalid package name
- Unknown error parsing tsconfig.json or jsconfig.json. Could…
AI-assisted analysis of withastro/astro@e294953aa8 (2026-08-18).
Data as JSON: /api/errors/8a0188b024957eda.
Report an issue: GitHub.
Appendix: source
Thrown at packages/astro/src/cli/add/index.ts:873
const parsed = parseIntegrationName(integration);
if (!parsed) {
throw new Error(`${bold(integration)} does not appear to be a valid package name!`);
}
let { scope, name, tag } = parsed;
let pkgJson;
let pkgType: 'first-party' | 'third-party';
if (scope && scope !== '@astrojs') {
pkgType = 'third-party';
} else {
const firstPartyPkgCheck = await fetchPackageJson('@astrojs', name, tag);
if (firstPartyPkgCheck instanceof Error) {
if (firstPartyPkgCheck.message) {
spinner.message(yellow(firstPartyPkgCheck.message));
}
spinner.message(yellow(`${bold(integration)} is not an official Astro package.`));
if (!(await askToContinue({ flags, logger }))) {
throw new Error(
`No problem! Find our official integrations at ${cyan(
'https://astro.build/integrations',
)}`,
);
}
spinner.message('Resolving with third party packages...');
pkgType = 'third-party';
} else {
pkgType = 'first-party';
pkgJson = firstPartyPkgCheck as any;
}
}
if (pkgType === 'third-party') {
const thirdPartyPkgCheck = await fetchPackageJson(scope, name, tag);
if (thirdPartyPkgCheck instanceof Error) {
if (thirdPartyPkgCheck.message) {
spinner.message(yellow(thirdPartyPkgCheck.message));
}View on GitHub (pinned to e294953aa8)