wavetermdev/waveterm · error
error reading config file: %v
Error message
error reading config file: %v
What it means
SetBaseConfigValue first reads ~/.waveterm/settings.json via ReadWaveHomeConfigFile; if that read produced any ConfigError entries, the first one is wrapped as 'error reading config file: %v' and returned before any merge happens. The underlying cause is almost always a JSON syntax error in the settings file.
Source
Thrown at pkg/wconfig/settingsconfig.go:848
}
return nil, fmt.Errorf("invalid number for int64: %s", num)
}
if reflect.Float64 == ctype.Kind() {
if fval, err := num.Float64(); err == nil {
return fval, nil
}
return nil, fmt.Errorf("invalid number for float64: %s", num)
}
if reflect.String == ctype.Kind() {
return num.String(), nil
}
return nil, fmt.Errorf("cannot convert number to %s", ctype)
}
func SetBaseConfigValue(toMerge waveobj.MetaMapType) error {
m, cerrs := ReadWaveHomeConfigFile(SettingsFile)
if len(cerrs) > 0 {
return fmt.Errorf("error reading config file: %v", cerrs[0])
}
if m == nil {
m = make(waveobj.MetaMapType)
}
for configKey, val := range toMerge {
ctype := getConfigKeyType(configKey)
if ctype == nil {
return fmt.Errorf("invalid config key: %s", configKey)
}
if val == nil {
delete(m, configKey)
} else {
rtype := reflect.TypeOf(val)
if rtype == reflect.TypeOf(dummyNumber) {
convertedVal, err := convertJsonNumber(val.(json.Number), ctype)
if err != nil {
return fmt.Errorf("cannot convert %s: %v", configKey, err)
}View on GitHub (pinned to a4447c1563)
Solutions
- Open settings.json, fix the JSON syntax problem described in the wrapped message (line/col are included)
- Validate the file with a strict JSON parser before retrying
- Restore settings.json from backup or delete it to regenerate defaults, then re-run the update
Example fix
// before: settings.json contains a trailing comma, SetBaseConfigValue fails
// after: sanitize first
if err := validateJSONFile(settingsPath); err != nil {
return fmt.Errorf("fix settings.json first: %w", err)
}
err := wconfig.SetBaseConfigValue(toMerge) Defensive patterns
Strategy: validation
Validate before calling
data, _ := os.ReadFile(settingsPath)
if !json.Valid(data) {
return fmt.Errorf("settings.json is not valid JSON; fix it before calling SetBaseConfigValue")
} Try / catch
if err := wconfig.SetBaseConfigValue(toMerge); err != nil {
if strings.Contains(err.Error(), "error reading config file") {
// settings.json on disk is broken; prompt user to fix or restore
return fmt.Errorf("repair settings.json first: %w", err)
}
return err
} Prevention
- Keep settings.json valid JSON at all times; validate on save
- Don't hand-edit settings while automated writers may run
- Keep a known-good backup of settings.json for quick restore
When it happens
Trigger: Calling SetBaseConfigValue when settings.json fails to parse (syntax error, trailing comma) or otherwise reports config errors during read.
Common situations: Programmatically updating settings while the user has hand-broken the file; a crashed edit leaving partial JSON on disk.
Related errors
- error setting telemetry value: %w
- json syntax error at line %d, col %d: probably an extra trai
- json syntax error at line %d, col %d: %v
- invalid config key: %s
- cannot convert %s: %v
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/55cf716944182031.
Report an issue: GitHub.