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

  1. Find the exact official name at https://astro.build/integrations and re-run `astro add <correct-name>`
  2. If the integration is legitimately third-party, answer 'y' at the prompt or pass the scoped name directly: `astro add @scope/name`
  3. 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

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


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)