Lima launches Linux virtual machines with automatic file sharing and port forwarding, similar to WSL2 on Windows. It started as a way to bring containerd and nerdctl to Mac users, but it now works for general-purpose Linux workloads too. It's aimed at developers on macOS (and Linux, NetBSD, and other hosts) who need a real Linux environment for containers or command-line tools without configuring a VM by hand.
Under the hood, Lima manages QEMU-based virtual machines and wires up networking, file mounts, and SSH so the guest Linux system feels like an extension of your host. It's a CNCF incubating project, backed by projects like Rancher Desktop, Colima, Finch, and Podman Desktop, which all build on Lima's VM management.
limactl start template:docker or template:k8s spins up preconfigured environments for common use cases.lima and limactl commands let you run Linux commands, manage VM lifecycle, and export kubeconfig/docker socket paths for direct use.Lima fits developers who need a disposable or persistent Linux VM on macOS to run containers, test CLI tools, or develop against a Linux-specific toolchain. It's a good fit if you want Docker or Kubernetes running locally without installing Docker Desktop, or if you want direct access to containerd/nerdctl instead of a heavier GUI-based tool.
It also works well for teams building their own desktop tooling: Rancher Desktop, Colima, Finch, and Podman Desktop all use Lima as their underlying VM engine, so it's a reasonable base if you're building a similar product.
It's less of a fit if you're already on Linux and don't need a VM layer at all (containers run natively there), or if you need a production hypervisor with enterprise VM management features. It's also not designed for Windows hosts; WSL2 already covers that case natively.
On macOS, install with Homebrew and start the default VM:
brew install lima
limactl start
Run a Linux command inside the VM:
lima uname -a
Run a container with containerd/nerdctl:
lima nerdctl run --rm hello-world
Run containers with Docker instead, using a template:
limactl start template:docker
export DOCKER_HOST=$(limactl list docker --format 'unix://{{.Dir}}/sock/docker.sock')
docker run --rm hello-world
Run Kubernetes with a template:
limactl start template:k8s
export KUBECONFIG=$(limactl list k8s --format 'unix://{{.Dir}}/copied-from-guest/kubeconfig.yaml')
kubectl apply -f ...
Full setup and configuration details are in the official documentation.