jdx/mise · error

artifactbundle must be true, false, 1, or 0, got

Error message

artifactbundle must be true, false, 1, or 0, got {value}

What it means

The SPM (Swift) backend accepts an 'artifactbundle' option that must evaluate to a boolean-ish value: truthy values mean artifact bundles are required, falsey values mean source-only builds. Any other string/type value is rejected because the option is strictly boolean.

Solutions

  1. Set artifactbundle = true, false, 1, or 0 in the tool options
  2. Remove the option entirely to use the default behavior
  3. Check for stray quoting/type issues in the TOML value

Example fix

# before
[tools."spm:swift-argparse"]
artifactbundle = "yes"
# after
[tools."spm:swift-argparse"]
artifactbundle = true
Defensive patterns

Strategy: validation

Validate before calling

# TOML-side check
# artifactbundle must be one of: true, false, 1, 0
grep -E 'artifactbundle\s*=\s*"?(true|false|1|0)"?' mise.toml || echo "invalid artifactbundle value"

Prevention

When it happens

Trigger: Setting artifactbundle in a mise.toml tool options block to something other than true/false/1/0 — e.g. "yes", "on", or a non-string type — when lockfile_options parses it via artifactbundle_mode.

Common situations: Using YAML/other config truthiness conventions (yes/no/on/off) that mise's SPM options do not accept; quoting numbers oddly or providing a table/list by mistake.

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/918789b861a1adf7. Report an issue: GitHub.

Appendix: source

Thrown at src/backend/spm.rs:87

    }

    fn artifactbundle_asset(&self, target: Option<&PlatformTarget>) -> Option<String> {
        self.option_string("artifactbundle_asset", target)
    }

    fn artifactbundle_mode(
        &self,
        target: Option<&PlatformTarget>,
    ) -> eyre::Result<ArtifactBundleMode> {
        let Some(value) = self.option_string("artifactbundle", target) else {
            return Ok(ArtifactBundleMode::Auto);
        };
        if is_truthy(&value) {
            Ok(ArtifactBundleMode::Required)
        } else if is_falsey(&value) {
            Ok(ArtifactBundleMode::SourceOnly)
        } else {
            bail!("artifactbundle must be true, false, 1, or 0, got {value}");
        }
    }

    fn requires_artifactbundle(&self, mode: ArtifactBundleMode) -> bool {
        mode.requires_artifactbundle() || self.artifactbundle_asset(None).is_some()
    }

    fn lockfile_options(&self, target: &PlatformTarget) -> BTreeMap<String, String> {
        let mut opts = BTreeMap::new();
        let provider = self.provider(Some(target));
        if provider != GitProviderKind::GitHub.as_ref() {
            opts.insert("provider".to_string(), provider);
        }
        if let Some(api_url) = self.api_url(Some(target)) {
            opts.insert("api_url".to_string(), api_url);
        }
        match self.artifactbundle_mode(Some(target)) {
            Ok(ArtifactBundleMode::Required) => {

View on GitHub (pinned to 533346cc37)