wavetermdev/waveterm · error

invalid config key: %s

Error message

invalid config key: %s

What it means

SetBaseConfigValue rejects config keys that are not present in the known config key type registry: getConfigKeyType returns nil and the function returns 'invalid config key: %s'. Wave only accepts keys declared in its meta-constant schema.

Source

Thrown at pkg/wconfig/settingsconfig.go:856

	}
	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)
				}
				val = convertedVal
				rtype = reflect.TypeOf(val)
			}
			if rtype != ctype {
				if ctype == reflect.PointerTo(rtype) {
					m[configKey] = &val
				} else {
					return fmt.Errorf("invalid value type for %s: %T", configKey, val)

View on GitHub (pinned to a4447c1563)

Solutions

  1. Check the exact key name against the generated settings meta constants (wconfig) or docs
  2. Verify the key's domain prefix is correct (app:, term:, editor:, etc.)
  3. If the key exists in a newer Wave version, upgrade the dependency/app

Example fix

// before
wconfig.SetBaseConfigValue(waveobj.MetaMapType{"term:fontsz": 14})
// after
wconfig.SetBaseConfigValue(waveobj.MetaMapType{"term:fontsize": 14})
Defensive patterns

Strategy: validation

Validate before calling

// check against generated valid keys before setting
validKeys := wconfig.GetAllConfigKeys() // or generated map
if _, ok := validKeys[key]; !ok {
    return fmt.Errorf("unknown config key %q", key)
}

Try / catch

if err := wconfig.SetBaseConfigValue(m); err != nil {
    if strings.Contains(err.Error(), "invalid config key") {
        return fmt.Errorf("check key spelling/prefix against docs: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: Calling SetBaseConfigValue with a MetaMapType containing a key not in the settings schema — misspelled keys, wrong prefix ('app:' vs 'term:'), or keys introduced in newer/older Wave versions.

Common situations: Typos like 'term:fontsize' vs the real key name; copying config from documentation for a different version; invented keys that were never registered.

Related errors


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