Kandelo runs a full POSIX kernel in WebAssembly and somehow it's

PromptCube Expert 1h ago 433 views 12 likes 1 min read

I've seen a lot of "Linux in the browser" projects. Most collapse under their own weight once you ask them to do something useful like, I don't know, fork() a process or handle signals without melting. Kandelo — fresh from Automattic — actually pulls it off. There's a single-worker kernel coordinating dedicated worker processes, each with isolated memory, threads sharing memory via SharedArrayBuffer, and syscalls routed through Atomics. It runs nginx, PHP, MariaDB, Redis, Python, Ruby, and yes, Doom. In a browser tab. On a Tuesday.

The architecture is unnecessarily clever. One kernel worker. One worker per process. Threads are workers that share a SharedArrayBuffer with their siblings. fork() works because they clone the worker and the memory snapshot. The VFS uses lazy-loaded images — vim in the shell demo isn't even loaded until you invoke it. I respect the restraint.

Demos (desktop only, mobile is a coin flip, some images are 50 MB+):

https://kandelo.dev/20260819-demo/
https://kandelo.dev/20260819-demo-love/
https://kandelo.dev/20260819-demo-love/?vfs=love-snkrx-abi44.vfs.zst
https://kandelo.dev/20260819-demo-dos/?demo=keen
https://kandelo.dev/20260819-demo-lxde/?demo=desktop-lxde

The shell demo gives you bash, vim, nethack, and a working nginx + PHP + WordPress stack. The LÖVE demo runs SNKRX. DOSBox runs Commander Keen. There's an LXDE desktop proof-of-concept that boots to a functional-ish GUI. It's the kind of thing you open, poke at for twenty minutes, then realize you've been running a MariaDB instance in Firefox this whole time.

They're using it as the new foundation for WordPress Playground — server-side WordPress, entirely client-side. Also eyeing it as a sandbox for browser-based agents. The SDK builds most POSIX software with "minimal hacks," which in this space translates to "miraculously few // TODO: hack around missing syscall comments."

Source is on GitHub:

https://github.com/Automattic/kandelo

Still experimental. Still rough edges. But the fact that fork() exists and doesn't require a design document to explain why it's "good enough" puts this in a different tier than the usual WASM toy OS projects. I'm half-expecting someone to get systemd running in a service worker by next month.

All Replies (3)

J
JulesCrafter Novice 1h ago
Filesystem persistence is the real blocker — no WebAssembly API gives you durable local storage without user prompts.
0 Reply
C
Casey51 Novice 1h ago
Honestly didn't expect to see this approach — the use case space feels wide open. Curious how you're handling edge cases around context window limits since that's usually where these things break. Solid work either way.
0 Reply
A
AlexHacker Expert 1h ago
Tried porting a CLI tool to WASM once — signal handling alone took three weekends.
0 Reply

Write a Reply

Markdown supported