Skip to content

feat(codegen): generate module bindings - #18

Draft
TomChv wants to merge 1 commit into
mainfrom
feat/codegen-module-mode
Draft

feat(codegen): generate module bindings#18
TomChv wants to merge 1 commit into
mainfrom
feat/codegen-module-mode

Conversation

@TomChv

@TomChv TomChv commented Aug 10, 2026

Copy link
Copy Markdown
Member

Add a module subcommand alongside client. Same generator, different
contract: the module's own types stay in client.gen.ts, only its dependencies
split into per-module files, and the bindings import the bundled library from
./core.js. The engine runtime mounts a module's sdk/ directory as
@dagger.io/dagger, so the files are emitted flat into --output for the caller
to lay down there — upstream nested them under sdk/src/api only to dig them
back out again.

The mode now drives what used to be independent config, so the two cannot
disagree: bundle imports are implied by module codegen, and the source-map
breadcrumbs rendered beside declarations resolve one level up from sdk/ rather
than the three the old nesting needed.

Drop the surface a TypeScript-only, engine-free generator never reads: the
SDKLang enum and Config.Lang, the Generator interface (one implementation, one
caller), GenerateTypeDefs (unimplemented), PostCommands and NeedRegenerate
(Go-only), and the module config fields that only ever fed the Go generator.

Design doc for the wider move included as design/module-gen.md.

Signed-off-by: Tom Chauveau tom@dagger.io


Stack created with GitHub Stacks CLIGive Feedback 💬

Add a `module` subcommand alongside `client`. Same generator, different
contract: the module's own types stay in client.gen.ts, only its dependencies
split into per-module files, and the bindings import the bundled library from
./core.js. The engine runtime mounts a module's sdk/ directory as
@dagger.io/dagger, so the files are emitted flat into --output for the caller
to lay down there — upstream nested them under sdk/src/api only to dig them
back out again.

The mode now drives what used to be independent config, so the two cannot
disagree: bundle imports are implied by module codegen, and the source-map
breadcrumbs rendered beside declarations resolve one level up from sdk/ rather
than the three the old nesting needed.

Drop the surface a TypeScript-only, engine-free generator never reads: the
SDKLang enum and Config.Lang, the Generator interface (one implementation, one
caller), GenerateTypeDefs (unimplemented), PostCommands and NeedRegenerate
(Go-only), and the module config fields that only ever fed the Go generator.

Design doc for the wider move included as design/module-gen.md.

Signed-off-by: Tom Chauveau <tom@dagger.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant