Install any skill in seconds. Free to start, no credit card required.
Get Started Free →webiny/webiny-api-architect
The hub skill for all API/backend architecture in Webiny. Covers architecture overview, Services vs UseCases, feature naming and organization, feature structure templates, DI decision tree, anti-patterns, createFeature, createAbstraction, container registration, domain errors, entity patterns, naming conventions, scoping rules, and code conventions.
Passed 22 of 22 test cases with the skill, and 8 of 22 without it.
and 19 more in the full report
14 fixed8 passed either way0 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 14 test cases the skill fixed. Same model, same prompt, with and without the skill.
Write the top-level imports and feature registration exports for a feature file features/userProfile/feature.ts that imports local files abstractions.ts and UserProfileUseCase.ts.
| Checked | Without skill | With skill |
|---|---|---|
| Uses explicit .js file extensions on relative import paths | Missed | Passed |
The instructions your model reads when the skill loads.
API extensions use createFeature to register features into the DI container. Each feature is a vertical slice with abstractions, implementations, and a feature.ts registration file. The key abstractions are Services (multi-method, singleton) and UseCases (single-method orchestrators, transient). Repositories handle persistence via CMS. Features are named by business capability, files inside by technical responsibility.
This skill applies to both extension developers (working in extensions/) and core developers (working in packages/). The architecture patterns are identical — only imports and registration differ.
Extensions (extensions/) | Core (packages/) | |
|---|---|---|
| Imports | webiny/api, webiny/api/cms/model, etc. | @webiny/feature/api, @webiny/api-headless-cms/..., etc. |
| Catalog paths | Use the Import: path | Use the Source: path |
| Entry point | export default createFeature(...) in a file targeted by <Api.Extension src={...}> | createFeature registered by the package initializer |
| GraphQL schemas | export default GraphQLSchemaFactory.createImplementation(...) — registered via container.register() inside the entry point's createFeature | Same pattern, but imported from @webiny/handler-graphql |
Detect which context you're in by checking the file path: extensions/ → extension mode, packages/ → core mode.
Extension (root) ── registers ──> Features + GraphQL Schemas + Models
Feature ── registers ──> UseCase | Service | EventHandler + Repository
UseCase ── depends on ──> Service | Repository (+ EventPublisher)
Repository ── depends on ──> CMS Use Cases (GetModel, CreateEntry, etc.)
Service ── depends on ──> external APIs, other Services
execute()). Coordinates services, repositories, and events. Transient scope.test cases passed, vs 8 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.