jdx/mise · error

unsupported pkgx package info format

Error message

unsupported pkgx package info format

What it means

Each entry under mise.lock's pkgx section must be a table with a string url (required), optional checksum, pkgx_provides (string table), and pkgx_runtime_env (string table); any non-table value bails with "unsupported pkgx package info format" (src/lockfile.rs:789-828).

Source

Thrown at src/lockfile.rs:827

                            .filter_map(|v| v.as_str().map(String::from))
                            .collect(),
                    ),
                    _ => None,
                };
                let pkgx_runtime_env = match t.remove("pkgx_runtime_env") {
                    Some(toml::Value::Table(table)) => {
                        Some(string_table_from_toml_value(toml::Value::Table(table))?)
                    }
                    _ => None,
                };
                Ok(PkgxPackageInfo {
                    url,
                    checksum,
                    pkgx_provides,
                    pkgx_runtime_env,
                })
            }
            _ => bail!("unsupported pkgx package info format"),
        }
    }
}

fn string_table_from_toml_value(value: toml::Value) -> Result<BTreeMap<String, String>> {
    match value {
        toml::Value::Table(table) => Ok(table
            .into_iter()
            .filter_map(|(key, value)| match value {
                toml::Value::String(value) => Some((key, value)),
                _ => None,
            })
            .collect()),
        _ => Ok(BTreeMap::new()),
    }
}

fn toml_table_from_string_map(values: BTreeMap<String, String>) -> toml::Table {

View on GitHub (pinned to 6f52dcdf99)

Solutions

  1. Regenerate the lockfile: rm mise.lock && mise lock.
  2. Align mise versions across machines/CI.
  3. Do not hand-edit mise.lock.
Defensive patterns

Strategy: validation

Validate before calling

# CI guard: pkgx entries must be tables with a string url
python3 -c "
import tomllib
d = tomllib.load(open('mise.lock', 'rb'))
for k, v in d.items():
    if 'pkgx' in k and isinstance(v, dict):
        for name, info in v.items():
            if not isinstance(info, dict) or not isinstance(info.get('url'), str):
                raise SystemExit('bad pkgx package info: %s' % name)
"

Try / catch

On "unsupported pkgx package info format", delete and regenerate mise.lock with an aligned mise version; do not hand-convert the entry, and surface the version-skew hint in job output.

Prevention

When it happens

Trigger: A pkgx package entry that is a bare string, integer, or array instead of a table — hand edits, or a lockfile written by a mise version with a different pkgx section shape.

Common situations: Hand-editing mise.lock pkgx entries; format drift after upgrading/downgrading mise.

Related errors


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