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 checks

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Read the listed unused key names from the error and fix or remove them in dagger.json's sdk object.
  2. Keep only supported Go SDK keys (e.g. "source", "version"); check docs for your engine version.
  3. Run `dagger develop` after editing dagger.json to validate config.
  4. 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

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


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/a2fde1c206f0ecbb. Report an issue: GitHub.