dagger/dagger · error

parse rendered as-sdk for %q: %w

Error message

parse rendered as-sdk for %q: %w

What it means

After stripping existing as-sdk sections, rewriteModuleAsSDKSections renders each module's as-sdk block into fresh TOML text and parses it back with tomledit before merging. If the internally-rendered TOML cannot be parsed, the error is wrapped as "parse rendered as-sdk for %q". This indicates generated TOML (from ModuleEntry.AsSDK) is invalid — usually a bug or corrupted module metadata, not user TOML.

Source

Thrown at core/workspace/config_document.go:417

	names := make([]string, 0, len(modules))
	for name, entry := range modules {
		// Preserve the marker even when empty: presence of AsSDK = "this
		// install is an SDK," whether or not anything is authored yet.
		if entry.AsSDK != nil {
			names = append(names, name)
		}
	}
	sort.Strings(names)

	for _, name := range names {
		var rendered strings.Builder
		writeModuleAsSDK(&rendered, "modules."+formatConfigPathSegment(name), modules[name].AsSDK)
		if rendered.Len() == 0 {
			continue
		}
		asSDKDoc, parseErr := tomledit.Parse(strings.NewReader(rendered.String()))
		if parseErr != nil {
			return nil, fmt.Errorf("parse rendered as-sdk for %q: %w", name, parseErr)
		}
		doc.Sections = append(doc.Sections, asSDKDoc.Sections...)
	}

	var buf bytes.Buffer
	var formatter tomledit.Formatter
	if err := formatter.Format(&buf, doc); err != nil {
		return nil, fmt.Errorf("format config after as-sdk rewrite: %w", err)
	}
	return buf.Bytes(), nil
}

// isModuleAsSDKHeading reports whether a section heading targets a module's
// as-sdk sub-block (e.g. [modules.go-sdk.as-sdk], [[modules.go-sdk.as-sdk.modules]]).
func isModuleAsSDKHeading(key []string) bool {
	if len(key) < 3 || key[0] != "modules" {
		return false
	}

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Check the module name in dagger.json for characters needing quoting and rename it to a bare-safe name.
  2. Clear the corrupted as-sdk state: remove the module entry and re-add it via `dagger mod use` / CLI so as-sdk is regenerated.
  3. Update the Dagger CLI to the latest version — a renderer bug producing invalid TOML may already be fixed.

Example fix

// before: unescaped quote in rendered key makes generated TOML invalid
[modules.bad]
[modules.bad.as-sdk]
"ke"y = true

// after: safe names render valid TOML
[modules.bad.as-sdk]
key = true
Defensive patterns

Strategy: validation

Validate before calling

rendered := renderAsSDKTOML(entry) // replicate what writeModuleAsSDK emits
if _, err := toml.Parse([]byte(rendered)); err != nil {
    return fmt.Errorf("module %q as-sdk state renders invalid TOML: %w", name, err)
}

Try / catch

if err := UpdateConfigBytes(...); err != nil {
    if strings.Contains(err.Error(), "parse rendered as-sdk") {
        // drop the offending module's as-sdk block from dagger.json and re-add via CLI
    }
}

Prevention

When it happens

Trigger: UpdateConfigBytes where writeModuleAsSDK renders an as-sdk block for a module and tomledit.Parse(strings.NewReader(rendered.String())) fails — e.g. a module name or nested as-sdk key/value that renders into invalid TOML (unescaped quotes or dots in segment names).

Common situations: A module whose name or as-sdk content contains characters requiring quoting that the renderer did not escape; Dagger CLI version mismatch where stored as-sdk state no longer renders validly.

Related errors


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