iosc and the compositors
One architecture draws the desktop, and it is Wayland. iosc is ours, written from scratch and compositing on the GPU; Mutter and KWin are upstream compositors driving the same output; and Xwayland gives X11 clients a hardware route in. Every one of them hands the app the same output IOSurface.
iosc, the Wayland compositor
iosc is a compositor written from scratch on libwayland-server, clean-room and MIT-licensed. Rather than blitting client buffers on the CPU, it treats each client's rendered surface as a GPU texture and blends them into the output IOSurface on the A10. This is the path that makes real toolkits feel native.
It advertises what real toolkits ask for, which by now means GTK and GNOME, Qt and Plasma, and the wlroots-family protocols the smaller Wayland apps expect. Input goes out through a standard wl_seat, with touch, tablet and the keyboard bridge alongside it.
xdg-shell, popups, subsurfaces, wp-viewport, fractional-scale, presentation-time, single-pixel-buffer, xdg-activation, xdg-decoration, xdg-output; the clipboard as wl_data_device, primary selection and wlr-data-control; layer-shell, foreign-toplevel, screencopy, cursor-shape, pointer-constraints and relative-pointer, idle-notify and idle-inhibit; text-input-v3 with input-method and virtual-keyboard for the iOS keyboard bridge; touch and zwp_tablet_v2 for the Pencil; the four KDE output-management protocols Plasma needs; and the private iosc_iosurface, which is how a client hands over a GPU buffer.
The two upstream compositors
A desktop environment brings its own compositor, and the two big ones are handled differently.
- Mutter
- GNOME Shell's compositor is given a native iOS backend, MetaBackendIOS, so it produces the output IOSurface itself and reuses iosc's GPU glue. There is one compositor on screen, not two.
- KWin
- Plasma's compositor nests instead: iosc owns the output, and
kwin_waylandruns inside it as a Qt/ANGLE client with its own Wayland socket for Plasma's clients, compositing them into an IOSurface of its own first.
Xwayland, the route for X11 apps
X11 clients get in through Xwayland, which runs against iosc as an ordinary Wayland client with glamor rendering X pixmaps through ANGLE into IOSurfaces. An X app therefore reaches the A10 like anything else, and this is what the X11 flavor installs: the xios-x11 meta pulls in xwayland and xauth, not a server of our own.
A rootless window manager that would give each X toplevel its own iosc surface is written and lives in the tree, but it is a build-time option and is not compiled into the published compositor yet.
Until July 2026 this page described a second server of our own: Xios, an Xvfb-derived X server whose device layer drew into an IOSurface and whose clients rendered on the CPU. It was retired on 2026-07-29 along with its xios-server package, because Xwayland on glamor reaches the GPU and the software path could not. Xvnc and Xvfb are still built, but only as headless bring-up and debugging tools — neither is a session you would run a desktop on.
Switching between them
Because every compositor produces an interchangeable output IOSurface, the session launcher can start any of them and the app presents the result the same way. A three-finger tap in the app opens the control panel, which lists the desktop presets: iosc, Mutter, GNOME Shell, Plasma Desktop, Plasma Nano and Plasma Mobile. Switching to a running display slot lives one level down, under Advanced. iosc also resizes live when the iPad rotates.