jdx/mise · error

Unknown setting: {}

Error message

Unknown setting: {}

What it means

`mise settings get KEY` rejects keys that are neither present in the settings table nor known to mise. is_known_setting() checks the key against SETTINGS_META (generated from settings.toml); an unknown key means the name is not a valid mise setting — usually a typo, or a setting from a different mise version.

Source

Thrown at src/cli/settings/get.rs:44

                .unwrap_or_default();
            Settings::partial_as_dict(&partial)?
        } else {
            Settings::get().as_dict()?
        };
        let mut value = toml::Value::Table(settings);
        let mut key = Some(self.setting.as_str());
        while let Some(k) = key {
            let k = k
                .split_once('.')
                .map(|(a, b)| (a, Some(b)))
                .unwrap_or((k, None));
            if let Some(v) = value.as_table().and_then(|t| t.get(k.0)) {
                key = k.1;
                value = v.clone()
            } else if is_known_setting(&self.setting) {
                bail!("Setting [{}] is not set", self.setting);
            } else {
                bail!("Unknown setting: {}", self.setting);
            }
        }
        match value {
            toml::Value::String(s) => miseprintln!("{s}"),
            value => miseprintln!("{value}"),
        }

        Ok(())
    }
}

fn is_known_setting(key: &str) -> bool {
    if SETTINGS_META.contains_key(key) {
        return true;
    }
    let prefix = format!("{key}.");
    SETTINGS_META.keys().any(|k| k.starts_with(&prefix))
}

View on GitHub (pinned to 6f52dcdf99)

Solutions

  1. List valid keys and copy the exact name: `mise settings ls`
  2. Check the current settings reference (docs/settings.toml in the repo) for your mise version
  3. Update scripts that reference renamed settings after upgrading mise

Example fix

# before
mise settings get all_compat   # Unknown setting: all_compat

# after
mise settings ls                 # find the real name
mise settings set legacy_version_file true
Defensive patterns

Strategy: type-guard

Validate before calling

# validate the key against mise's own list before querying
mise settings ls 2>/dev/null | awk '{print $1}' | grep -qx "$key" \
  || { echo "unknown setting: $key" >&2; mise settings ls >&2; exit 2; }
mise settings get "$key"

Type guard

is_known_setting() { mise settings ls 2>/dev/null | awk '{print $1}' | grep -qx "$1"; }

Try / catch

On 'Unknown setting', diff your key against `mise settings ls` output programmatically and suggest the closest match instead of retrying blindly.

Prevention

When it happens

Trigger: Running `mise settings get id.not_a_real_setting`, or referencing a setting that was renamed/removed in the current mise version.

Common situations: Typos and wrong key casing; copying config snippets from docs written for another mise version; settings renamed across major versions leaving stale scripts behind.

Related errors


AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22). Data as JSON: /api/errors/e228a6d27ff801cf. Report an issue: GitHub.