# Extension points — redwoodjs/redwood

> Canonical page: https://codevetter.com/unpack/redwood/extension-points

# Extension points — redwoodjs/redwood

Scanned commit a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd (2025-12-13). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The framework exposes explicit extension seams across commands, transport, schema assembly, authentication, jobs, storage, and mail. Most customization is expressed through configuration objects, exported functions, registries, or adapter classes. Build-time transforms provide some runtime metadata, so extensions must respect the compiler/runtime contract. Plugin ordering and package export conditions are especially consequential boundaries.
- New built-in CLI commands plug into the imports and yargs .command registrations in index.js; PLUGIN_CACHE_BUILTIN is a separate list that must remain aligned. — [packages/cli/src/index.js#L202-227](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/cli/src/index.js#L202-L227) [packages/cli/src/lib/plugin.js#L43-74](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/cli/src/lib/plugin.js#L43-L74)
- CLI plugins are configured under experimental.cli.plugins, expose plugin.commands, and are registered directly for @redwoodjs or beneath third-party namespaces. — [packages/cli/src/plugin.js#L44-71](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/cli/src/plugin.js#L44-L71) [packages/cli/src/plugin.js#L241-253](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/cli/src/plugin.js#L241-L253) [packages/cli/src/plugin.js#L299-320](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/cli/src/plugin.js#L299-L320)
- createServer accepts configureApiServer, Fastify options, and discovery globs; the generic API plugin executes the custom configuration callback before loading functions. — [packages/api-server/src/createServer.ts#L66-74](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/api-server/src/createServer.ts#L66-L74) [packages/api-server/src/createServer.ts#L117-125](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/api-server/src/createServer.ts#L117-L125) [packages/api-server/src/plugins/api.ts#L60-70](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/api-server/src/plugins/api.ts#L60-L70)
- GraphQL applications extend execution through extraPlugins, custom context, directives, schemaOptions, and subscriptions; createGraphQLYoga inserts extra plugins into its ordered chain. — [packages/graphql-server/src/createGraphQLYoga.ts#L32-55](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/createGraphQLYoga.ts#L32-L55) [packages/graphql-server/src/createGraphQLYoga.ts#L120-157](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/createGraphQLYoga.ts#L120-L157)
- Named service exports implement Query/Mutation/Subscription fields, while other object types use an exported object named after the GraphQL type; explicit SDL resolvers take precedence over inferred service functions. — [packages/graphql-server/src/makeMergedSchema.ts#L91-124](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/makeMergedSchema.ts#L91-L124) [packages/graphql-server/src/makeMergedSchema.ts#L228-244](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/makeMergedSchema.ts#L228-L244)
- Authentication accepts a Decoder or ordered Decoder array and an application getCurrentUser callback, allowing provider verification and application identity lookup to be composed. — [packages/api/src/auth/index.ts#L93-100](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/api/src/auth/index.ts#L93-L100) [packages/api/src/auth/index.ts#L151-174](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/api/src/auth/index.ts#L151-L174) [packages/graphql-server/src/plugins/useRedwoodAuthContext.ts#L34-46](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/plugins/useRedwoodAuthContext.ts#L34-L46)
- GraphQLHooksProvider is the Cell-compatible client seam, while RedwoodApolloProvider accepts custom cache, cacheConfig, HTTP configuration, fragments, and an ApolloLink or link factory. — [packages/web/src/components/cell/createCell.tsx#L5-8](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/web/src/components/cell/createCell.tsx#L5-L8) [packages/web/src/apollo/index.tsx#L90-136](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/web/src/apollo/index.tsx#L90-L136) [packages/web/src/apollo/index.tsx#L350-395](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/web/src/apollo/index.tsx#L350-L395)
- Router accepts custom paramTypes and useAuth; route Sets supply wrapper components, and PrivateSets add AuthenticatedRoute around the wrapper chain. — [packages/router/src/router.tsx#L27-42](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/router/src/router.tsx#L27-L42) [packages/router/src/router.tsx#L218-251](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/router/src/router.tsx#L218-L251)
- JobManager accepts adapter, queue, logger, and worker configurations; createJob defines perform behavior, while name/path are supplied by the build process. — [packages/jobs/src/core/JobManager.ts#L35-47](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/jobs/src/core/JobManager.ts#L35-L47) [packages/jobs/src/core/JobManager.ts#L70-98](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/jobs/src/core/JobManager.ts#L70-L98)
- FileSystemStorage subclasses BaseStorageAdapter and overrides save/read/remove; PrismaAdapter subclasses the jobs BaseAdapter and implements persistence operations. — [packages/storage/src/adapters/FileSystemStorage/FileSystemStorage.ts#L9-45](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/storage/src/adapters/FileSystemStorage/FileSystemStorage.ts#L9-L45) [packages/jobs/src/adapters/PrismaAdapter/PrismaAdapter.ts#L72-95](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/jobs/src/adapters/PrismaAdapter/PrismaAdapter.ts#L72-L95) [packages/jobs/src/adapters/PrismaAdapter/PrismaAdapter.ts#L255-269](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/jobs/src/adapters/PrismaAdapter/PrismaAdapter.ts#L255-L269)
- Mailer configuration supplies named handler and renderer registries with defaults and per-send overrides; Mailer.send delegates rendering and delivery through those interfaces. — [packages/mailer/core/src/mailer.ts#L58-63](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/mailer/core/src/mailer.ts#L58-L63) [packages/mailer/core/src/mailer.ts#L192-247](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/mailer/core/src/mailer.ts#L192-L247)
- Trusted document integration accepts a hash-to-operation store and a configurable allowArbitraryOperations policy, with a built-in exception for the precise Redwood current-user query. — [packages/graphql-server/src/plugins/useRedwoodTrustedDocuments.ts#L17-28](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/plugins/useRedwoodTrustedDocuments.ts#L17-L28) [packages/graphql-server/src/plugins/useRedwoodTrustedDocuments.ts#L43-54](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/plugins/useRedwoodTrustedDocuments.ts#L43-L54) [packages/graphql-server/src/plugins/useRedwoodTrustedDocuments.ts#L57-84](https://github.com/redwoodjs/redwood/blob/a7852fb92d0e4ac2bcce1d9a755717ba6cf53ffd/packages/graphql-server/src/plugins/useRedwoodTrustedDocuments.ts#L57-L84)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
