jdx/mise · error

Unknown setting

Error message

Unknown setting: {}

What it means

`mise settings get <key>` validates the requested key against the known settings metadata (`is_known_setting`). If the dotted path cannot be resolved AND the name is not a recognized setting, mise reports the key as unknown. This catches typos and settings that were removed or renamed in the mise version in use.

Solutions

  1. List valid keys with `mise settings ls` and pick the correct name.
  2. Check `mise settings get --help` / docs for your mise version — the key may be renamed or version-gated.
  3. Upgrade mise if the setting exists only in newer releases.

Example fix

// before
mise settings get node_compyle
// Unknown setting: node_compyle

// after
mise settings ls   # find correct key
mise settings get node_compile
Defensive patterns

Strategy: validation

Validate before calling

mise settings ls | grep -qx "${key}" || { echo "unknown setting: ${key}" >&2; exit 2; }

Try / catch

value=$(mise settings get "$key") || { echo "invalid key $key — run mise settings ls" >&2; exit 2; }

Prevention

When it happens

Trigger: Running `mise settings get <name>` where <name> (or a path segment) is not in the settings registry — typo'd keys, deprecated/renamed settings, or keys from a newer mise version than the installed one.

Common situations: Copying a settings key from docs for a different mise version; typos like `node.compile` vs `node_compile`; referencing a plugin-specific setting that no longer exists.

Understand the failure class

Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/e228a6d27ff801cf. Report an issue: GitHub.

Appendix: source

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

                .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 533346cc37)