dagger/dagger · error
unknown sdk config keys found %v
Error message
unknown sdk config keys found %v
What it means
Thrown by goSDK.moduleDependencyConfigSelectors in core/sdk/go_sdk.go:660 when the module's dagger.json "sdk" config object contains keys the Go SDK does not recognize. The rawConfig is decoded with mapstructure with strict unused-key detection; any key not defined in goSDKConfig causes this error. It exists to catch typos and stale config after version changes.
Source
Thrown at core/sdk/go_sdk.go:660
}
func (sdk *goSDK) moduleDependencyConfigSelectors(ctx context.Context) ([]dagql.Selector, []dagql.Selector, error) {
var config goSDKConfig
var mapstructureMetadata mapstructure.Metadata
decoder, err := mapstructure.NewDecoder(&mapstructure.DecoderConfig{
Metadata: &mapstructureMetadata,
Result: &config,
})
if err != nil {
return nil, nil, err
}
if err := decoder.Decode(sdk.rawConfig); err != nil {
return nil, nil, err
}
if len(mapstructureMetadata.Unused) > 0 {
return nil, nil, fmt.Errorf("unknown sdk config keys found %v", mapstructureMetadata.Unused)
}
selectors := getSDKConfigSelectors(ctx, config)
bk, err := sdk.root.Engine(ctx)
if err != nil {
return nil, nil, err
}
gitConfigSelectors, err := gitConfigSelectors(ctx, bk)
if err != nil {
return nil, nil, err
}
selectors = append(selectors, gitConfigSelectors...)
// TODO(rajatjindal): verify with Erik as to why this
// cause failures if we also mount this in Runtime.
// Issue we run into is that when we try to run sdk checksView on GitHub (pinned to 82ba2681db)
Solutions
- Read the listed unused key names from the error and fix or remove them in dagger.json's sdk object.
- Keep only supported Go SDK keys (e.g. "source", "version"); check docs for your engine version.
- Run `dagger develop` after editing dagger.json to validate config.
- If a key was valid before an upgrade, consult the Dagger changelog for renamed/removed sdk options.
Example fix
// dagger.json before (typo)
"sdk": { "source": "go", "version": "v0.9.9", "modulPath": "example.com/mymod" }
// after: remove unknown key
"sdk": { "source": "go", "version": "v0.9.9" } Defensive patterns
Strategy: validation
Validate before calling
// pre-validate dagger.json sdk block
var sdkCfg map[string]any
if err := json.Unmarshal(daggerJSON.SDK, &sdkCfg); err != nil { return err }
allowed := map[string]bool{"source": true, "version": true}
for k := range sdkCfg {
if !allowed[k] { return fmt.Errorf("unsupported go sdk config key: %s", k) }
} Try / catch
// catch and point at the offending key listed in the error
if strings.Contains(err.Error(), "unknown sdk config keys found") {
return fmt.Errorf("fix dagger.json sdk block per error's key list: %w", err)
} Prevention
- Only put keys documented for the go sdk in the sdk object
- Never copy python/node sdk options into a go sdk block
- Run dagger develop immediately after editing dagger.json
- Check the Dagger changelog when upgrading for dropped sdk keys
When it happens
Trigger: dagger.json contains sdk config like {"source": "go", "<unknown>": ...} — e.g. a typo, a key from another SDK (python's "venv"-style options), or a key removed in a newer Dagger version.
Common situations: Hand-editing dagger.json with typos (e.g. "generaate"), copying python-sdk config options into a go sdk block, or upgrading Dagger where a previously valid sdk option was dropped.
Related errors
- no sdk ref provided
- key %q cannot be stored in user-level config; only modules.<
- metadata prune: maximum estimated bytes must be positive
- metadata prune: target estimated bytes must be positive and
- session ID is required
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/a2fde1c206f0ecbb.
Report an issue: GitHub.