spec.language

May 25, 2026 · View on GitHub

Which target language(s) the generator should produce. At least one language must be configured (minProperties: 1).

spec:
  language:
    go:
      module: github.com/company/customer-support-agent
      version: "1.26"
      vendor:
        deps:
          - github.com/google/uuid@v1.6.0
        devdeps:
          - github.com/stretchr/testify@v1.9.0

Supported languages

KeyConfig object
goGoConfig
typescriptTypeScriptConfig
rustRustConfig

Configure exactly one. The schema permits more than one language key, but current consumers (e.g. adl-cli) generate code for a single language at a time and will reject manifests with more than one.

go {#go-config}

FieldTypeRequiredDescription
modulestringGo module path (e.g. github.com/company/agent).
versionstringGo toolchain version (e.g. "1.26").
vendorobjectExtra packages - see VendorConfig.

typescript {#typescript-config}

FieldTypeRequiredDescription
packageNamestringnpm package name (kebab-case or scoped: @org/name).
nodeVersionstringNode major version (e.g. "20").
vendorobjectExtra packages - see VendorConfig.

rust {#rust-config}

FieldTypeRequiredDescription
packageNamestringCargo crate name.
versionstringCrate version (e.g. "0.1.0").
editionstringRust edition (e.g. "2021").
featuresstring[]Cargo feature list to enable by default in the generated crate.
vendorobjectExtra packages - see VendorConfig.

vendor {#vendor-config}

Every language config accepts an optional vendor block to declare extra packages on top of whatever the generator pulls in by default. Useful for testing libraries, linters, mock generators, or any runtime package the scaffolding doesn't ship by default.

vendor:
  deps:
    - <package>@<version>
  devdeps:
    - <package>@<version>
FieldTypeDescription
depsstring[]Runtime/production dependencies.
devdepsstring[]Development- and test-only dependencies.

Each entry is a string of the form <package>@<version> using the target language's native package and version syntax. The schema only validates the shape - language-native semantics (semver ranges, scoped npm packages, Go module paths, etc.) are intentionally not constrained further.

LanguageExample entry
Gogithub.com/google/uuid@v1.6.0
TypeScriptzod@3.23.0
TypeScript (scoped)"@types/node@20.11.0"
Rusttokio@1.36.0

Consumers (e.g. adl-cli) translate these into the language's lockfile or manifest format (go.mod, package.json, Cargo.toml).

If you need a package that isn't tied to a specific language - deno, kubectl, terraform - use spec.development.deps instead.