CodeVetter · Repo Unpack · Extension points
redwoodjs/redwood
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.
- CLI plugins are configured under experimental.cli.plugins, expose plugin.commands, and are registered directly for @redwoodjs or beneath third-party namespaces.
- createServer accepts configureApiServer, Fastify options, and discovery globs; the generic API plugin executes the custom configuration callback before loading functions.
- GraphQL applications extend execution through extraPlugins, custom context, directives, schemaOptions, and subscriptions; createGraphQLYoga inserts extra plugins into its ordered chain.
- 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.
- Authentication accepts a Decoder or ordered Decoder array and an application getCurrentUser callback, allowing provider verification and application identity lookup to be composed.
- GraphQLHooksProvider is the Cell-compatible client seam, while RedwoodApolloProvider accepts custom cache, cacheConfig, HTTP configuration, fragments, and an ApolloLink or link factory.
- Router accepts custom paramTypes and useAuth; route Sets supply wrapper components, and PrivateSets add AuthenticatedRoute around the wrapper chain.
- JobManager accepts adapter, queue, logger, and worker configurations; createJob defines perform behavior, while name/path are supplied by the build process.
- FileSystemStorage subclasses BaseStorageAdapter and overrides save/read/remove; PrismaAdapter subclasses the jobs BaseAdapter and implements persistence operations.
- Mailer configuration supplies named handler and renderer registries with defaults and per-send overrides; Mailer.send delegates rendering and delivery through those interfaces.
- 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.