AdguardTeam/AdGuardHome · error
generating config file: %w
Error message
generating config file: %w
What it means
Writing the config file object failed at the YAML encoding stage: yaml.Encoder could not serialize the configuration into bytes. Encoding errors usually reflect unmarshalable or incompatible field types after schema changes.
Source
Thrown at internal/home/config.go:917
dns.UpstreamTimeout = timeutil.Duration(s.UpstreamTimeout())
}
if globalContext.dhcpServer != nil {
globalContext.dhcpServer.WriteDiskConfig(config.DHCP)
}
config.Clients.Persistent = globalContext.clients.forConfig()
confPath = configFilePath(ctx, l, workDir, confPath)
l.DebugContext(ctx, "writing config file", "path", confPath)
buf := &bytes.Buffer{}
enc := yaml.NewEncoder(buf)
enc.SetIndent(2)
err = enc.Encode(config)
if err != nil {
return fmt.Errorf("generating config file: %w", err)
}
err = maybe.WriteFile(confPath, buf.Bytes(), aghos.DefaultPermFile)
if err != nil {
return fmt.Errorf("writing config file: %w", err)
}
return nil
}
// validateTLSCipherIDs validates the custom TLS cipher suite IDs.
func validateTLSCipherIDs(cipherIDs []string) (err error) {
if len(cipherIDs) == 0 {
return nil
}
_, err = aghtls.ParseCiphers(cipherIDs)
if err != nil {View on GitHub (pinned to b41aefbe51)
Solutions
- Check the wrapped error for the offending field
- Recreate the config from a known-good backup instead of the corrupted state
- Upgrade to a consistent AdGuard Home version (avoid mixing binaries and data from different releases)
Defensive patterns
Strategy: fallback
Try / catch
// Fall back to last known-good config file
if err := persistConfig(cfg); err != nil { cfg = loadBackup() } Prevention
- Don't mix binaries and data dirs across versions
- Keep config backups so a corrupt state can be replaced
When it happens
Trigger: Persisting config (e.g. after a setup/PUT /control/config or internal update) where some field of the config struct cannot be marshaled to YAML.
Common situations: Version mismatches or corrupted in-memory config after partial upgrades; exotic custom types injected by plugins; extremely rare in stock builds.
Related errors
- generating new config: %w
- writing conf: %w
- parsing config file for upgrade: %w
- unexpected type of upstream field: %T
- persistent client at index %d: unexpected type %T
AI-assisted analysis of AdguardTeam/AdGuardHome@b41aefbe51 (2026-08-27).
Data as JSON: /api/errors/2ac83c8c51f1b36e.
Report an issue: GitHub.