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

  1. Open settings.json, fix the JSON syntax problem described in the wrapped message (line/col are included)
  2. Validate the file with a strict JSON parser before retrying
  3. 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

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


AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01). Data as JSON: /api/errors/55cf716944182031. Report an issue: GitHub.