An X11 server & client, both running in WebAssembly

No native X anywhere. One browser tab runs Xorg's Xvfb server compiled to wasm and paints its framebuffer to a <canvas>. Another tab — or a whole other browser — runs an X11 client app compiled to wasm. They speak the X protocol to each other over WebSockets, and the app's window appears on the server's canvas.

① Start an X server

Boots the wasm Xvfb, shows its screen, and hands you a session code. Keep this tab open — it's the display.

Start an X server →

② Join with a code

Already have a code from a running server (maybe on another device)? Launch an app into it from here — proof it's all over the wire.

Join a server →

Tip: the most convincing way to see it is to start a server here, then open the join page in a different browser and type the code. The app you launch there draws on the screen over here — entirely through the WebSocket bridge.

Or: the multi-app desktop →

A wasm Xvfb + a wasm window manager (draggable Motif-style titlebars) + apps, each in its own Web Worker — start and kill them, drag windows around. Open the desktop →