Show HN: Lumier – Run macOS VMs in a Docker
159 points| GreenGames | 9 months ago |github.com
When building virtualized environments for AI agents, we needed a reproducible way to package and distribute macOS VMs. Inspired by projects like dockur/windows (https://github.com/dockur/windows) that pioneered running Windows in Docker, we wanted to create something similar but optimized for Apple Silicon. The existing solutions either didn't support M-series chips or relied on KVM/Intel emulation, which was slow and cumbersome. We realized we could leverage Apple's Virtualization Framework to create a much better experience.
Lumier takes a different approach: it uses Docker as a delivery mechanism (not for isolation) and connects to a lightweight virtualization service (lume) running on your Mac. This creates true hardware-accelerated VMs using Apple's native virtualization capabilities.
With Lumier, you can: - Launch a ready-to-use macOS VM in minutes with zero manual setup - Access your VM through any web browser via VNC - Share files between your host and VM effortlessly - Use persistent storage or ephemeral mode for quick tests - Automate VM startup with custom scripts
All of this works natively on Apple Silicon (M1/M2/M3/M4) - no emulation required.
To get started:
1. Install Docker for Apple Silicon: https://desktop.docker.com/mac/main/arm64/Docker.dmg
2. Install lume background service with our one-liner:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/trycua/cua/main/libs/lume/scripts/install.sh)"
3. Start a VM (ephemeral mode): docker run -it --rm \
--name lumier-vm \
-p 8006:8006 \
-e VM_NAME=lumier-vm \
-e VERSION=ghcr.io/trycua/macos-sequoia-cua:latest \
-e CPU_CORES=4 \
-e RAM_SIZE=8192 \
trycua/lumier:latest
4. Open http://localhost:8006/vnc.html in your browser. The container will generate a unique password for each VM instance - you'll see it in the container logs.For persistent storage (so your changes survive container restarts):
mkdir -p storage docker run -it --rm \ --name lumier-vm \ -p 8006:8006 \ -v $(pwd)/storage:/storage \ -e VM_NAME=lumier-vm \ -e HOST_STORAGE_PATH=$(pwd)/storage \ trycua/lumier:latest
Want to share files with your VM? Just add another volume:
mkdir -p shared docker run ... -v $(pwd)/shared:/shared -e HOST_SHARED_PATH=$(pwd)/shared ...
You can even automate VM startup by placing an on-logon.sh script in shared/lifecycle/.
We're seeing people use Lumier for: - Development and testing environments that need macOS - CI/CD pipelines for Apple platform apps - Disposable macOS instances for security research - Automated UI testing across macOS versions - Running AI agents in isolated environments
Lumier is 100% open-source under the MIT license. We're actively developing it as part of our work on C/ua (https://github.com/trycua/cua), and we'd love your feedback, bug reports, or feature ideas.
We'll be here to answer any technical questions and look forward to your comments!
mynegation|9 months ago
frabonacci|9 months ago
riffic|9 months ago
Apple should recognize the use case or utility and run with it.
nottorp|9 months ago
With Apple's RAM prices?
frabonacci|9 months ago
Since the host is already macOS, we leverage the Apple Virtualization Framework (Vz) directly via a lightweight background service (lume). The Docker container (Lumier) acts purely as a frontend and delivery mechanism for managing and launching VMs — there's no nested virtualization or Linux VM involved.
That said, you're absolutely right that macOS hardware isn’t cheap, and RAM can be a real constraint. If you're running multiple VMs or aiming for production-scale setups, options like Scaleway’s M4 Mac minis or EC2 Mac Metal instances offer more headroom.
Also worth noting: while Lumier supports virtualizing Linux VMs too, if your use case is only Linux, there are far more cost-effective options using KVM on Linux hosts.
RobMurray|9 months ago
kristianp|9 months ago
frabonacci|9 months ago
And absolutely, if macOS supported namespaces and cgroups natively, it’d open the door to more lightweight, container-native workflows. Right now we work around it with Apple’s Virtualization Framework and treat Docker more as a familiar control plane than a true runtime isolation layer
keepamovin|9 months ago
Think Laminar flow, because this is like super smooth macOS VM running in macOS
frabonacci|9 months ago
JayDustheadz|9 months ago
frabonacci|9 months ago
However, App Store sign-in is currently not supported inside macOS VMs due to how Apple handles hardware entitlements and secure boot in virtualized environments.
That said, with macOS Sequoia, Apple has relaxed some constraints — you can now sign into iCloud inside a VM, which enables direct downloads of stable or beta Xcode installers without needing the App Store. More details here:
https://eclecticlight.co/2024/07/12/sequoia-virtualisation-a...
https://developer.apple.com/documentation/virtualization/usi...
https://xcodereleases.com/
cyberax|9 months ago
frabonacci|9 months ago
handfuloflight|9 months ago
frabonacci|9 months ago
Notably, Scaleway is one of the few providers to offer M4-based Mac minis that support nested virtualization. The main caveat is that these are currently only available in EU regions.
helpfulContrib|9 months ago
frabonacci|9 months ago
roundup|9 months ago
frabonacci|9 months ago
Lumier does not expose the capability but the underlying Lume CLI does.
lume run <VM_NAME> --recovery-mode true: https://github.com/trycua/cua/tree/main/libs/lume#usage
kelsey98765431|9 months ago
frabonacci|9 months ago
OsrsNeedsf2P|9 months ago
Fizzadar|9 months ago
busterarm|9 months ago
dmitrygr|9 months ago
h4ck_th3_pl4n3t|9 months ago
This is "running debian noVNC clients in Docker that connect to the same macOS host system".
I mean it's great that you use the Apple Virtualization Framework for that on the host service, but that's a different type of VM than a docker VM which would assume syscalls to be abstracted inside the docker container and not on a host service.
But yeah, just my two cents, I guess.
frabonacci|9 months ago
The title could’ve been clearer, but it’s already out there and can’t be edited - appreciate you pointing it out and adding the nuance!
unknown|9 months ago
[deleted]
ChocolateGod|9 months ago
[deleted]
unknown|9 months ago
[deleted]
bigyabai|9 months ago
[deleted]
unknown|9 months ago
[deleted]