moduleMetadata only reaches the webpack plugin. On Turbopack builds it has no effect — #23372 added a build-time warning and documented it as webpack-only rather than leaving it a silent no-op.
The Turbopack loader (moduleMetadataInjectionLoader) already does the injection, but hardcodes the applicationKey payload. To close the gap: merge arbitrary metadata alongside the applicationKey tag, resolve the ModuleMetadataCallback form (releaseName is already resolved in getFinalConfigObject.ts and needs threading through), and widen the loader gate to applicationKey || moduleMetadata. Then drop the warning and the JSDoc note.
Touches the default bundler path for Next.js 16+, so it wants e2e coverage.
moduleMetadataonly reaches the webpack plugin. On Turbopack builds it has no effect — #23372 added a build-time warning and documented it as webpack-only rather than leaving it a silent no-op.The Turbopack loader (
moduleMetadataInjectionLoader) already does the injection, but hardcodes theapplicationKeypayload. To close the gap: merge arbitrary metadata alongside theapplicationKeytag, resolve theModuleMetadataCallbackform (releaseNameis already resolved ingetFinalConfigObject.tsand needs threading through), and widen the loader gate toapplicationKey || moduleMetadata. Then drop the warning and the JSDoc note.Touches the default bundler path for Next.js 16+, so it wants e2e coverage.