{"record":{"id":"835801a4a1f93dcb","repo":"shadcn-ui/ui","slug":"not-configured-835801","errorCode":"NOT_CONFIGURED","errorMessage":"Unknown registry \"${registryName}\". Make sure it is defined under \"registries\" in your components.json or package.json file:\\n{\\n  \"registries\": {\\n    \"${registryName}\": \"[URL_TO_REGISTRY]\"\\n  }\\n}","messagePattern":"Unknown registry \"(.+?)\"\\. Make sure it is defined under \"registries\" in your components\\.json or package\\.json file:\\\\n(.+?)\\\\n\\}","errorType":"exception","errorClass":"RegistryNotConfiguredError","httpStatus":null,"severity":"error","filePath":"packages/shadcn/src/registry/resolver.ts","lineNumber":193,"sourceCode":"    // Add source tracking\n    const itemWithSource: z.infer<typeof registryItemWithSourceSchema> = {\n      ...item,\n      _source: sourceName,\n    }\n    payload.push(itemWithSource)\n\n    if (item.registryDependencies) {\n      // Resolve namespace syntax and set headers for dependencies\n      let resolvedDependencies = item.registryDependencies\n\n      // Check for namespaced dependencies when no registries are configured\n      if (!config?.registries) {\n        const namespacedDeps = item.registryDependencies.filter((dep: string) =>\n          dep.startsWith(\"@\")\n        )\n        if (namespacedDeps.length > 0) {\n          const { registry } = parseRegistryAndItemFromString(namespacedDeps[0])\n          throw new RegistryNotConfiguredError(registry)\n        }\n      } else {\n        resolvedDependencies = resolveRegistryItemsFromRegistries(\n          item.registryDependencies,\n          config\n        )\n      }\n\n      const { items, registryNames } = await resolveDependenciesRecursively(\n        resolvedDependencies,\n        config,\n        options,\n        new Set(uniqueNames)\n      )\n      allDependencyItems.push(...items)\n      allDependencyRegistryNames.push(...registryNames)\n    }\n  }","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/shadcn-ui/ui/blob/efac5987074af84ece57c367c6dd83387b967022/packages/shadcn/src/registry/resolver.ts#L175-L211","documentation":"Thrown by resolveRegistryTree when a fetched registry item declares registryDependencies that contain `@namespaced` strings, but the project config has NO `registries` field at all. shadcn refuses to silently drop or guess namespaced deps, so it surfaces RegistryNotConfiguredError naming the first offending namespace. Distinct from error 105: that fires when registries IS set but a specific namespace is missing.","triggerScenarios":"`npx shadcn add https://third-party/block.json` (or a GitHub block) whose JSON has `registryDependencies: [\"@private/foo\"]`, while the user's components.json has no `registries` block.","commonSituations":"Installing a community block whose deps assume a private/authenticated registry the consumer hasn't wired up; following a tutorial whose add command assumes a pre-configured namespace; adding a block designed for a monorepo that has registries configured at the workspace root.","solutions":["Add a `registries` block to components.json (or the `registries` field in package.json) mapping the namespace to its URL template (see error message for the exact shape).","If you don't have access to that registry, ask the block author to inline the dependency or publish it publicly.","Add the dependency item directly by URL/GitHub address instead of via the namespace."],"exampleFix":"// before — components.json with no registries\n{\n  \"style\": \"new-york\",\n  \"tailwind\": { ... },\n  \"aliases\": { ... }\n}\n\n// after — registries block added\n{\n  \"style\": \"new-york\",\n  \"tailwind\": { ... },\n  \"aliases\": { ... },\n  \"registries\": {\n    \"@private\": \"https://private.dev/r/{name}.json\"\n  }\n}","handlingStrategy":"validation","validationCode":"function registryDepsResolvable(item: { registryDependencies?: string[] }, config: Config) {\n  if (!item.registryDependencies) return true;\n  const namespaced = item.registryDependencies.filter((d) => d.startsWith(\"@\"));\n  if (namespaced.length === 0) return true;\n  return !!config?.registries;\n}","typeGuard":"function hasRegistriesConfigured(config: Config): boolean {\n  return !!config?.registries && Object.keys(config.registries).length > 0;\n}","tryCatchPattern":"import { RegistryNotConfiguredError } from \"@/src/registry/errors\";\n\ntry {\n  await resolveRegistryTree(names, config, opts);\n} catch (e) {\n  if (e instanceof RegistryNotConfiguredError) {\n    // e.registryName tells you which namespace to add to config.registries\n  }\n  throw e;\n}","preventionTips":["Before installing a third-party block, scan its registryDependencies for `@`-prefixed entries and pre-add those namespaces to components.json.","Document, in the block author's README, every namespace the block requires."],"tags":["registry","config","namespace","dependencies"],"backgroundTag":null,"analyzedSha":"efac5987074af84ece57c367c6dd83387b967022","analyzedAt":"2026-08-12T05:00:50.218Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}