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 nilView on GitHub (pinned to dd909d0973)
Solutions
- Change `vmOpts.qemu.minimumVersion` to a plain semver string, e.g. `"6.0.0"` or `"7.2"`.
- Remove version constraint operators (>=, ^, ~, v-prefix issues) — the field expects a bare version, not a range.
- 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
- Use bare versions like "6.0.0" — no >=, ^, ~, or range syntax.
- Avoid distro suffixes (7.0.0-1) in the config value.
- Run `limactl validate` on the template before launching.
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
- the YAML is invalid, saved the buffer as %#q: %w
- unexpected architecture: %#q
- configuration is nil
- mount type %#q is explicitly unsupported
- field `mountType` must be one of %v for QEMU driver on Linux
AI-assisted analysis of lima-vm/lima@dd909d0973 (2026-09-01).
Data as JSON: /api/errors/32c545662fe33a4d.
Report an issue: GitHub.