Wawona

v26.8.12 Open source MIT License

Run any desktop software,
on any platform.

A native Wayland compositor for macOS, Android, and the iOS family.

  • macOS
  • Android
  • iOS
  • iPadOS
  • watchOS
  • tvOS
  • visionOS
KDE Plasma nested in Wawona
KDE
                        Plasma
                        nested in Wawona
XFCE
                        nested in
                        Wawona
COSMIC
                        nested in
                        Wawona
Wawona
                        native
                        compositing

A real compositor.

Bundled ports are native. A VM or container Machine is planned for macOS, iOS, iPadOS, Android, and Linux. SSH plus waypipe is there today when you want another machine.

Free and open source. MIT-licensed. No paywall, no telemetry. Read the code, fork it, send a patch.

Store or sideload. Apple mobile and Play builds are meant to pass review. Sideload the IPA, APK, or dmg if you want. Desktop and LockScreen are coming soon on macOS and Android (iOS/iPadOS via repo.wawona.io only). anowaW is a separate planned app bridge — not Desktop, not MediaProjection.

Native, guest, or remote. Weston, Niri, and the catalog run as native ports. VMs and containers are planned Machine kinds. Remote Linux over SSH and waypipe works today. The compositor draws the clients either way.

Inside Wawona

How it works

How the compositor is put together.

  1. Host UI AppKit, UIKit, WatchKit, Compose, GTK Native chrome. One window or scene per client where the OS allows it.
  2. Rust core Wayland compositor Seats, surfaces, protocols. Swift, ObjC, JNI, and GTK call the same core.
  3. wwn-iland Userspace DRM / KMS / GBM IOSurface + Metal on Apple. AHardwareBuffer on Android. No kernel DRM.
  4. Clients Weston, Niri, ports, waypipe Native, container, or remote. Same protocols as Linux.

One Rust core

The compositor lives in Rust. Hosts do not get a second compositor. Swift, Objective-C, Kotlin/JNI, and GTK call the same core. UniFFI still exists in src/ffi. It is not the only bridge.

Real host windows

Each Wayland client is a host window or scene, not a fake desktop in one framebuffer. macOS keeps AppKit chrome. iPadOS and visionOS open one scene per client. Phone, tvOS, and Android fill the primary surface. watchOS runs one client.

Userspace KMS

wwn-iland emulates DRM, KMS, and GBM in userspace. Mode A is the store path: static, in-window. Mode B is the macOS Desktop/LockScreen .dylib path (planned; SIP partial or off; desktop-host builds only). Drivers stay userland: MoltenVK, KosmicKrisp, ANGLE, SwiftShader.

Three ways to run it

Native port today; container or VM Machine kinds are planned; remote over waypipe. Weston and Niri ship on every target. Machines picks the display backend: auto, Wayland, or DRM. No environment variables.

Explore

Wawona is built by Alex Spaulding and anyone who wants to jump in. Chat, send a patch, or chip in if you can.

“Build bridges, not walls.”

Alex Spaulding, 2025