lima-vm/lima · error

field `vmOpts.qemu.minimumVersion` must be a semvar value, g

Error message

field `vmOpts.qemu.minimumVersion` must be a semvar value, got %#q: %w

What it means

validateConfig() converts cfg.VMOpts["qemu"] into a QEMUOpts struct and, if `minimumVersion` is set, parses it with semver.NewVersion(). A value that is not valid semantic versioning syntax fails and is wrapped in this error. Valid examples: "6.0.0", "7.2".

Source

Thrown at pkg/driver/qemu/qemu_driver.go:124

	for i, nw := range cfg.Networks {
		if unknown := reflectutil.UnknownNonEmptyFields(nw,
			"Lima",
			"Socket",
			"MACAddress",
			"Metric",
			"Interface",
		); len(unknown) > 0 {
			logrus.Warnf("vmType %s: ignoring networks[%d]: %+v", *cfg.VMType, i, unknown)
		}
	}

	var qemuOpts limatype.QEMUOpts
	if err := limayaml.Convert(cfg.VMOpts[limatype.QEMU], &qemuOpts, "vmOpts.qemu"); err != nil {
		return err
	}
	if qemuOpts.MinimumVersion != nil {
		if _, err := semver.NewVersion(*qemuOpts.MinimumVersion); err != nil {
			return fmt.Errorf("field `vmOpts.qemu.minimumVersion` must be a semvar value, got %#q: %w", *qemuOpts.MinimumVersion, err)
		}
	}

	return nil
}

// Helper method for checking the binary signature on macOS.
func validateArch(ctx context.Context, cfg *limatype.LimaYAML) error {
	if runtime.GOOS == "darwin" {
		var vmArch string
		if cfg.Arch != nil {
			vmArch = *cfg.Arch
		}
		if err := checkBinarySignature(ctx, vmArch); err != nil {
			return err
		}
	}
	return nil

View on GitHub (pinned to dd909d0973)

Solutions

  1. Change `vmOpts.qemu.minimumVersion` to a plain semver string, e.g. `"6.0.0"` or `"7.2"`.
  2. Remove version constraint operators (>=, ^, ~, v-prefix issues) — the field expects a bare version, not a range.
  3. Check for stray whitespace/quotes in the YAML value.

Example fix

# before
vmOpts:
  qemu:
    minimumVersion: ">=6.0"
// after
vmOpts:
  qemu:
    minimumVersion: "6.0.0"
Defensive patterns

Strategy: validation

Validate before calling

if mv := cfg.VMOpts["qemu"].MinimumVersion; mv != "" {
    if _, err := version.NewVersion(mv); err != nil {
        return fmt.Errorf("vmOpts.qemu.minimumVersion must be plain semver like 6.0.0, got %q", mv)
    }
}

Type guard

func isSemVer(s string) bool { _, err := semver.NewVersion(s); return err == nil }

Try / catch

if err := drv.Validate(ctx); err != nil && strings.Contains(err.Error(), "minimumVersion") {
    // fix the semver string in vmOpts.qemu and re-validate
}

Prevention

When it happens

Trigger: Setting `vmOpts.qemu.minimumVersion` in lima.yaml to anything semver.NewVersion() rejects — e.g. `v.6`, `6.x`, `qemu 7`, `>=7.0`, an empty string.

Common situations: Copying a version constraint expression (like `>=6.0`) instead of a plain version; prefixing with `v` in a way semver rejects; trailing OS/build suffixes like `7.0.0-1` from distro package names.

Related errors


AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01). Data as JSON: /api/errors/32c545662fe33a4d. Report an issue: GitHub.