angular/angular-cli · error
Could not find the implementation for builder
Error message
Could not find the implementation for builder
What it means
A manifest entry for a builder must specify an 'implementation' path (the JS module implementing the builder). resolveBuilder throws when the entry lacks one, so no builder function could be loaded.
Source
Thrown at packages/angular_devkit/architect/node/node-modules-architect-host.ts:193
// Attempt to locate an entry for the specified builder by name
const builder = buildersManifest.builders?.[builderName];
if (!builder) {
throw new Error(`Cannot find builder ${JSON.stringify(builderStr)}.`);
}
// Resolve alias reference if entry is a string
if (typeof builder === 'string') {
return this.resolveBuilder(
builder,
path.dirname(packageJsonPath),
(seenBuilders ?? new Set()).add(builderStr),
);
}
// Determine builder implementation path (relative within package only)
const implementationPath = builder.implementation && path.normalize(builder.implementation);
if (!implementationPath) {
throw new Error('Could not find the implementation for builder ' + builderStr);
}
if (path.isAbsolute(implementationPath) || implementationPath.startsWith('..')) {
throw new Error(
`Package "${packageName}" has an invalid builder implementation path: "${builderName}" --> "${builder.implementation}"`,
);
}
// Determine builder option schema path (relative within package only)
let schemaPath = builder.schema;
if (!schemaPath) {
throw new Error('Could not find the schema for builder ' + builderStr);
}
if (path.isAbsolute(schemaPath) || path.normalize(schemaPath).startsWith('..')) {
throw new Error(
`Package "${packageName}" has an invalid builder schema path: "${builderName}" --> "${builder.schema}"`,
);
}
View on GitHub (pinned to bb72145f9a)
Solutions
- Add the 'implementation' field pointing to the builder's JS module in the builders.json entry.
- Publish a corrected version of the builder package.
- Use a different builder that is fully defined.
Example fix
// before (builders.json)
"my-builder": {"schema": "./schema.json"}
// after
"my-builder": {"implementation": "./my-builder.impl", "schema": "./schema.json"} Defensive patterns
Strategy: validation
Validate before calling
const entry = require(`${packageName}/builders.json`).builders?.[builderName];
if (typeof entry === 'object' && !entry.implementation) throw new Error(`Builder "${packageName}:${builderName}" is missing an implementation path.`); Type guard
const hasImplementation = (b) => typeof b === 'object' && b !== null && typeof b.implementation === 'string' && b.implementation.length > 0;
Try / catch
try { await host.resolveBuilder(builderStr); } catch (e) { if (String(e.message).includes('Could not find the implementation for builder')) { /* fix the manifest entry's 'implementation' field */ } else throw e; } Prevention
- Validate builder manifests against the BuilderSchema in CI.
- Include implementation, schema, and description in every manifest entry.
- Test `ng builder` discovery locally before publishing.
When it happens
Trigger: A builders.json entry like {"schema": "./schema.json"} with no 'implementation' key, and code resolves that builder.
Common situations: Authoring a custom builder and forgetting the implementation field; a manifest entry left partially written; string alias chains resolving to an incomplete object entry.
Related errors
- Angular app manifest is not set. Please ensure you are using
- Angular app engine manifest is not set. Please ensure you ar
- Circular builder alias references detected:
- No builder name specified.
- Package ${JSON.stringify(packageName)} has no builders defin
AI-assisted analysis of angular/angular-cli@bb72145f9a (2026-08-30).
Data as JSON: /api/errors/628880ad5a98548f.
Report an issue: GitHub.