lima-vm/lima · error

invalid network spec %+v

Error message

invalid network spec %+v

What it means

When a networks entry has a non-empty `lima:` name, buildNetworkArgs only accepts the modes `user-v2`, `shared`, or `bridged`. Any other value (e.g. a custom network name from networks.yaml or a typo like `host`) hits the switch's default case and returns `invalid network spec {nw}`. krunkit does not support qemu-style named socket_vmnet networks beyond those modes.

Source

Thrown at pkg/driver/krunkit/krunkit_darwin_arm64.go:162

				if err != nil {
					return nil, err
				}
				mac = limayaml.MACAddress(inst.Dir)
			case networks.ModeShared, networks.ModeBridged:
				socketVMNetInstalled, err := nwCfg.IsDaemonInstalled(networks.SocketVMNet)
				if err != nil {
					return nil, err
				}
				if !socketVMNetInstalled {
					return nil, errors.New("socket_vmnet is not installed")
				}
				sock, err = networks.Sock(nw.Lima)
				if err != nil {
					return nil, err
				}
				mac = nw.MACAddress
			default:
				return nil, fmt.Errorf("invalid network spec %+v", nw)
			}
		} else if nw.Socket != "" {
			sock = nw.Socket
			mac = nw.MACAddress
		} else {
			return nil, fmt.Errorf("invalid network spec %+v", nw)
		}

		device := fmt.Sprintf("virtio-net,type=unixstream,path=%s,mac=%s", sock, mac)
		args = append(args, "--device", device)
	}

	if len(args) == 0 {
		return args, errors.New("no socket_vmnet networks defined")
	}

	return args, nil
}

View on GitHub (pinned to dd909d0973)

Solutions

  1. Change the entry to a supported mode: `lima: shared`, `lima: bridged`, or `lima: user-v2`.
  2. If you need a custom named network, remove it for krunkit instances or use vz/qemu driver instead.
  3. Fix typos in the `lima:` value in lima.yaml.
  4. If a socket is available, replace with `socket: /path/to/sock` form, which krunkit accepts.

Example fix

# before
networks:
  - lima: mycustomnet
# after
networks:
  - lima: user-v2
# or
networks:
  - socket: /Users/me/net.sock
Defensive patterns

Strategy: validation

Validate before calling

// Go: validate lima mode before writing config
var allowed = map[string]bool{"user-v2": true, "shared": true, "bridged": true}
if !allowed[nw.Lima] && nw.Socket == "" {
    return fmt.Errorf("mode %q unsupported by krunkit driver", nw.Lima)
}

Type guard

func isKrunkitCompatibleNetwork(nw Network) bool {
    switch nw.Lima {
    case "user-v2", "shared", "bridged":
        return true
    case "":
        return nw.Socket != ""
    default:
        return false
    }
}

Try / catch

if err := inst.Start(ctx); err != nil {
    if strings.Contains(err.Error(), "invalid network spec") {
        log.Error("fix networks entry in lima.yaml: use user-v2/shared/bridged or socket")
    }
    return err
}

Prevention

When it happens

Trigger: Instance config contains `networks: [{lima: <something-other-than user-v2/shared/bridged>}]` — e.g. a custom named network defined in networks.yaml, or a misspelled mode — while starting with the krunkit driver.

Common situations: Porting an instance config that worked under the qemu driver (which supports arbitrary named networks) to krunkit; typos like `lima: Share` or `lima: bridged-v2`; config generators emitting network group names.

Related errors


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