macOS already ships the driver.
Reims vGPU is the device it talks to.

Accelerated graphics for unmodified macOS guests under QEMU. The guest uses Apple's own AppleParavirtGPU.kext — no kext to install, no guest driver, stock macOS. Reims vGPU decodes the command stream on the host and executes it through Vulkan.

“macOS 13 on QEMU.” — video by @bzai56

Read this first

Alpha means alpha.

Reims vGPU is research-quality software for experimentation and bring-up — not a frozen virtualization product. Four facts to calibrate expectations:

Everything can change

The QEMU device ABI, boot scripts, crate layout, backend behavior, and supported pathways may change without a stable compatibility guarantee.

macOS 13 Ventura is the target

Ventura is the guest release the project is used and tested against, on both rails. Other macOS versions may or may not work.

Vulkan works; Metal is planned

The working host backend is Vulkan — directly on Linux, and through MoltenVK on macOS. A direct Metal backend is a TODO, not a feature.

Independent of Apple

Reims vGPU is an independent open-source project. It is not affiliated with, sponsored by, or endorsed by Apple Inc.

See it run

The whole desktop, in a window.

macOS 13 Ventura with accelerated graphics on both rails — an Apple Silicon host and a Linux x86 host, running the same stock guest.

arm64 macOS 13 Ventura desktop running as a guest on an Apple Silicon host
arm64 · Apple Silicon host

arm64 Ventura guest on macOS, attached via reims-vgpu-mmio.

x86_64 macOS 13 Ventura desktop running as a guest on a Linux host
x86_64 · Linux host

x86_64 Ventura guest under KVM, attached via reims-vgpu-pci.

How it works

One command stream, guest to GPU.

The path a frame takes from an app inside the VM to pixels in the host window. All product logic lives in Rust; the C shim stays thin on purpose.

  1. Metal.framework

    Apps in the guest call Metal, exactly as they would on real hardware.

  2. AppleParavirtGPU.kext

    Apple’s own paravirtual GPU driver ships with macOS — and binds to the Reims vGPU device unchanged.

  3. Command stream

    Rings over PCI BAR (x86_64) or sysbus MMIO (arm64) carry Metal-style commands to the host.

  4. QEMU shim

    A deliberately thin C layer in the vendored QEMU fork wires QOM, MMIO/BAR, IRQ/MSI and forwards into Rust via HostOps.

  5. Rust core

    Protocol decode, device model, memory mapping, scheduling. Nothing fails silently — declined commands carry typed reasons.

  6. Host GPU

    Vulkan on Linux; Vulkan via MoltenVK on macOS. Shaders translate Metal AIR → SPIR-V through metal2vulkan. Direct Metal: planned.

Pathways

Three ways to run it.

Two combinations work today and one is on the bench — each pairs a specific host, guest, and backend. macOS 13 Ventura is the recommended guest on all of them.

x86 macOS / Linux Vulkan

Works · alpha
Host
Linux x86_64, KVM
Guest
x86_64 macOS 13 Ventura
Device
reims-vgpu-pci (PCI)
Backend
Vulkan via metal2vulkan
Boot
vm/boot-x86.sh

arm64 macOS / macOS Vulkan

Works · alpha
Host
Apple Silicon macOS, HVF
Guest
arm64 macOS 13 Ventura (vmapple)
Device
reims-vgpu-mmio (sysbus MMIO)
Backend
Vulkan via metal2vulkan, through MoltenVK
Boot
vm/boot-arm64.sh

arm64 macOS / macOS Metal

Planned
Host
Apple Silicon macOS, HVF
Guest
arm64 macOS 13 Ventura (vmapple)
Device
reims-vgpu-mmio (sysbus MMIO)
Backend
Metal, direct — not yet implemented
Boot
vm/boot-arm64.sh

Contribute

How you can help.

The project is at the stage where careful systems work moves the needle. Contributions are especially welcome on:

  • correctness & visual glitches
  • synchronization bugs
  • command-stream decoding
  • Metal ↔ Vulkan translation
  • more reliable host/guest combinations