Automattic / Automattic/kandelo

Kandelo roadmap

Open
#382 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
TypeScript
Stars
31
Forks
15
Avg merge
11h 7m
Merged PRs (30d)
80

Description

## ❌ Next

### Layer 0 — Headline goals

- [ ] WordPress Playground integration with `--experimental-posix-kernel` — make the Wasm kernel a selectable runtime in Playground web/CLI behind a flag (the broader Playground beta-flag work is in Layer 10; this is the concrete entry point). Proof-of-concept PRs open against `WordPress/wordpress-playground`: [#3634 (CLI)](https://github.com/WordPress/wordpress-playground/pull/3634), [#3635 (Web)](https://github.com/WordPress/wordpress-playground/pull/3635).
- [x] Explore Node.wasm — bring the Node.js runtime onto the kernel (libuv event loop, native addons via dlopen, `child_process` via fork+exec). **Shipped via QuickJS-NG–based Node-compatible runtime** ([#482](https://github.com/brandonpayton/wasm-posix-kernel/pull/482)) covering `node:crypto`, `zlib`, TCP sockets, TLS, real `http`/`https`, and end-to-end `npm install lodash`/`express`/`vite`.

### Layer 1 — Stabilize what already works

- [ ] Fix the web server service worker losing context and failing to load WordPress
- [ ] Migrate from the deprecated Wasm `try` instruction to `try_table` (currently pinned via `-wasm-use-legacy-eh=false` and `-mllvm -wasm-use-legacy-eh=true` workarounds)

### Layer 2 — Finish the browser surface protocols

- [ ] HTTP relay protocol — extract from demo code into a documented, versioned spec
- [ ] Service Worker interface — multi-tab routing + connected-client visibility (see "Partially landed")
- [ ] A non-isolated tunnel for secrets — a side channel that does not require COOP/COEP, so credentials/API keys can flow into a Kandelo session without granting the isolated context full access to them
- [ ] Query params as inputs to the boot process — let demo URLs pre-seed `argv`, env, or boot scripts
- [x] fbDOOM mouse support — mouse input device alongside the existing keyboard scancode injection (currently called out as a limitation in `docs/browser-support.md`) @mho22
- [x] fbDOOM sound support — audio output device (`/dev/dsp`) for sound effects @mho22
- [x] fbDOOM music support — background music playback for fbDOOM @mho22

### Layer 3 — Distribution & ecosystem

- [ ] Software installer like `apt` (the resolver in `cargo xtask build-deps resolve` is the plumbing — this is the user-facing layer on top)
- [ ] Standalone published packages for the libraries that aren't yet first-class binary artifacts
- readline as its own package (not just bundled into bash)
- [ ] Deploy multiple kernel versions on the same web server, allowing staging and switching between live versions

### Layer 4 — Observability

- [ ] A thorough OS trace facility (syscalls, signals, scheduling, IPC)
- [ ] An MCP server for OS tracing — exposes the trace stream to agents
- [ ] A living diagram of system components, current state, and relationships, served by the running kernel
- Process listing (procfs already exists per [#220](https://github.com/brandonpayton/wasm-posix-kernel/issues/220) — needs a UI consumer)
- Memory visualizer
- File system visualizer and browser

### Layer 5 — Agent integration

- [ ] Run Claude within the kernel
- [ ] More agentic guidance (CLAUDE.md is a start; codify SDK / build / debug workflows further)
- [ ] Agent skills for using the SDK
- Software building (autoconf/CMake/Makefile flow with `wasm32posix-*`)
- Image building (VFS image authoring)
- Boot script writing (dinit `/etc/dinit.d/*` authoring)

### Layer 6 — Multi-host & networking

- [ ] Multi-computer network running in a single browser (multiple kernels, virtual L2/L3 between them)
- [ ] WebRTC remote login — let other clients log into your in-browser computer
- DOOM multiplayer over the WebRTC tunnel (now that fbDOOM mouse + sound + music have landed, this is the obvious payoff)
- [ ] Store and load kernel VFS images from IPFS

### Layer 7 — Branding

- [x] Lock in a memorable name — **Kandelo** is now in README, docs, the live UI host, and Kandelo.dev demo gallery wiring ([#427](https://github.com/brandonpayton/wasm-posix-kernel/pull/427), [#467](https://github.com/brandonpayton/wasm-posix-kernel/pull/467), [#483](https://github.com/brandonpayton/wasm-posix-kernel/pull/483), [#485](https://github.com/brandonpayton/wasm-posix-kernel/pull/485)). Repo rename and `host/` npm package rename still pending.
- [ ] Logo

### Layer 8 — Additional runtimes & ports

#### Runtime

- [ ] Explore Go.wasm — bring the Go runtime onto the kernel (goroutine scheduler interaction with our threads, syscall interface, GC behavior under shared `WebAssembly.Memory`) @mho22

#### Port

- [ ] [Roadrunner](https://roadrunner.dev/) — PHP application server
- [ ] [FrankenPHP](https://frankenphp.dev/) — PHP application server

### Layer 9 — Miscellaneous

- [ ] Explore SDL2 — cross-platform input/audio/video library; depends on the framebuffer (shipped), mouse input + audio output (Layer 2). Unlocks a large catalogue of games and tools. @mho22
- [ ] Explore ScummVM.wasm — fun/stretch: classic adventure game engine on the framebuffer + audio stack (depends on Layer 2 audio work) @mho22
- [ ] ALSA sound device — implement alongside `/dev/dsp` so software targeting the modern Linux audio stack works without falling back to OSS @mho22
- [ ] WebGPU - implement alongside WebGL @mho22

### Layer 10 — External suggestions

- [ ] `wp-load.php` benchmark: native vs wasm (the existing WordPress benchmark in `benchmarks/run.ts --suite=wordpress` measures HTTP first response, not the bare `wp-load.php` cost)
- [ ] Support both the Wasm kernel and PHP-WASM in Playground web, with the kernel behind a beta flag
- [ ] Raw Rust build command — no equivalent SDK wrapper today; user programs are C-only

## 🟡 Partially landed

Started, but not yet at the level Brandon's note describes:

- [ ] Protocol for relaying HTTP requests
- Working pipeline exists: service worker → `MessagePort` → kernel worker connection pump (`examples/browser/lib/http-bridge.ts`, `connection-pump.ts`, `lib/init/service-worker-bridge.ts`)
- Missing: documented, versioned protocol spec independent from demo glue, with a stable contract for non-Kandelo embedders
- [ ] A clean, focused Service Worker interface
- Current SW is a unified dual-mode file (`examples/browser/public/service-worker.js`) that already routes HTTP via a single `bridgePort`
- Still owed: route HTTP requests to the right client when multiple browser tabs are connected
- Still owed: provide visibility for all connected clients (an enumerable list of attached kernel workers)
- [ ] Solid E2E tests
- Playwright covers most browser demos (`examples/browser/test/demos.spec.ts`, `playwright.config.ts`)
- Coverage gaps remain for daemonized stacks under failure injection
- [ ] Shareable computer URL — fold a running kernel's VFS + boot state into a URL another browser can rehydrate
- Design landed: [docs/plans/2026-05-11-shareable-computer-url-design.md](https://github.com/brandonpayton/wasm-posix-kernel/blob/main/docs/plans/2026-05-11-shareable-computer-url-design.md) ([#452](https://github.com/brandonpayton/wasm-posix-kernel/pull/452))
- Implementation pending

## ✅ Shipped

### Kernel & POSIX coverage

- [x] 170+ syscalls across file I/O, fcntl, process, threads, signals, memory, networking, time, terminal, IPC, eventfd/timerfd/signalfd, poll/select/epoll
- [x] POSIX.1-2024 header overlays + constants — major XFAIL reductions across libc-test, sortix, open-posix-testsuite ([#147](https://github.com/brandonpayton/wasm-posix-kernel/issues/147) [#148](https://github.com/brandonpayton/wasm-posix-kernel/issues/148) [#149](https://github.com/brandonpayton/wasm-posix-kernel/issues/149) [#160](https://github.com/brandonpayton/wasm-posix-kernel/issues/160) [#161](https://github.com/brandonpayton/wasm-posix-kernel/issues/161))
- [x] Procfs (`/proc/self`, `/proc//{stat,status,cmdline,environ,maps,fd}`, `/proc/net/{tcp,unix}`) [#220](https://github.com/brandonpayton/wasm-posix-kernel/issues/220)
- [x] Virtual devfs — `/dev/{null,zero,urandom,full,fd/N,tty,ptmx,pts/*}` ([#228](https://github.com/brandonpayton/wasm-posix-kernel/issues/228) + earlier batch)
- [x] EPERM multi-user model [#326](https://github.com/brandonpayton/wasm-posix-kernel/issues/326), deferred pthread cancellation [#333](https://github.com/brandonpayton/wasm-posix-kernel/issues/333), per-thread signal routing [#332](https://github.com/brandonpayton/wasm-posix-kernel/issues/332), kernel-side `PTHREAD_PROCESS_SHARED` primitives [#324](https://github.com/brandonpayton/wasm-posix-kernel/issues/324)
- [x] AIO XFAIL closure + `pthread_setcanceltype` XPASS [#334](https://github.com/brandonpayton/wasm-posix-kernel/issues/334)

### Multi-process

- [x] fork via Asyncify snapshot/restore [#81](https://github.com/brandonpayton/wasm-posix-kernel/issues/81)
- [x] fork() from non-main threads ([#468](https://github.com/brandonpayton/wasm-posix-kernel/pull/468)); fork+dlopen replay so children inherit parent dlopens ([#466](https://github.com/brandonpayton/wasm-posix-kernel/pull/466)); host reaps child workers that die without `SYS_EXIT_GROUP` ([#465](https://github.com/brandonpayton/wasm-posix-kernel/pull/465))
- [x] `execve` with argv/envp [#123](https://github.com/brandonpayton/wasm-posix-kernel/issues/123), `posix_spawn` attribute handling + fd actions ([#167](https://github.com/brandonpayton/wasm-posix-kernel/issues/167) [#168](https://github.com/brandonpayton/wasm-posix-kernel/issues/168)), `execveat`/`fexecve`
- [x] Non-forking `posix_spawn` via SYS_SPAWN (ABI 7→8) ([#439](https://github.com/brandonpayton/wasm-posix-kernel/pull/439))
- [x] Cross-process pipes, signals, waitpid/waitid/zombies, process groups, sessions
- [x] Cross-process advisory file locking (OFD) via SharedArrayBuffer
- [x] Cross-process `PTHREAD_PROCESS_SHARED` mutexes/condvars [#324](https://github.com/brandonpayton/wasm-posix-kernel/issues/324) [#327](https://github.com/brandonpayton/wasm-posix-kernel/issues/327)
- [x] `O_CLOFORK` / `FD_CLOFORK` (POSIX.1-2024) [#159](https://github.com/brandonpayton/wasm-posix-kernel/issues/159)

### Threads & synchronization

- [x] `clone(CLONE_VM|CLONE_THREAD)` via Workers + shared `WebAssembly.Memory`
- [x] `pthread_create` in centralized mode, futex w/ timeout, RT signals + `sigqueue` `si_value`
- [x] `pthread_atfork`, `dladdr`, POSIX mqueues [#147](https://github.com/brandonpayton/wasm-posix-kernel/issues/147)

### Memory

- [x] mmap with `MAP_ANONYMOUS`, `MAP_PRIVATE` file-backed [#99](https://github.com/brandonpayton/wasm-posix-kernel/issues/99), `MAP_SHARED` file + `msync` writeback [#100](https://github.com/brandonpayton/wasm-posix-kernel/issues/100)
- [x] `mremap`, `splice`, `preadv2`/`pwritev2`, `readahead` [#67](https://github.com/brandonpayton/wasm-posix-kernel/issues/67), `memfd_create` + `copy_file_range` [#66](https://github.com/brandonpayton/wasm-posix-kernel/issues/66), `shm_open`/`sem_open`
- [x] Growable VFS with inodes sized for max capacity
- [x] dlopen data allocated through guest mmap ([#434](https://github.com/brandonpayton/wasm-posix-kernel/pull/434))

### Networking

- [x] AF_INET sockets — connect, send/recv, sendmsg/recvmsg, getsockopt/setsockopt, `SO_RCVTIMEO`/`SO_SNDTIMEO` [#115](https://github.com/brandonpayton/wasm-posix-kernel/issues/115), `TCP_INFO` + extra TCP options [#271](https://github.com/brandonpayton/wasm-posix-kernel/issues/271)
- [x] AF_UNIX (stream + dgram) with `SCM_RIGHTS` [#112](https://github.com/brandonpayton/wasm-posix-kernel/issues/112), AF_UNIX bind() creates filesystem inode [#356](https://github.com/brandonpayton/wasm-posix-kernel/issues/356)
- [x] In-kernel loopback TCP/UDP, `MSG_OOB` + `SIOCATMARK` [#104](https://github.com/brandonpayton/wasm-posix-kernel/issues/104)
- [x] DNS via host `__lookup_name`, getaddrinfo
- [x] Virtual MAC for network ioctls [#270](https://github.com/brandonpayton/wasm-posix-kernel/issues/270), `SIOCGIFCONF` ptrWidth-aware for wasm64 [#277](https://github.com/brandonpayton/wasm-posix-kernel/issues/277)
- [x] Host network backends: TCP, fetch, TLS-intercepting ([#240](https://github.com/brandonpayton/wasm-posix-kernel/issues/240))
- [x] Git HTTP clone over HTTPS in browser shell [#229](https://github.com/brandonpayton/wasm-posix-kernel/issues/229), AF_UNIX + git HTTP clone tests [#287](https://github.com/brandonpayton/wasm-posix-kernel/issues/287)

### Filesystem & VFS

- [x] `MemoryFileSystem` (SharedArrayBuffer-backed), `OpfsFileSystem` (browser persistence), `DeviceFileSystem`
- [x] `*at()` family with stored OFD paths, `realpath`, hard links, `chmod`/`utimensat`
- [x] Lazy VFS files — defer fetch until first read [#206](https://github.com/brandonpayton/wasm-posix-kernel/issues/206)
- [x] Pre-built VFS images replacing JSON bundles [#286](https://github.com/brandonpayton/wasm-posix-kernel/issues/286)
- [x] zstd-compressed `.vfs.zst` browser demo images ([#384](https://github.com/brandonpayton/wasm-posix-kernel/pull/384))
- [x] Lazy archive-backed files (e.g. `vim.zip` in shell demo) [#279](https://github.com/brandonpayton/wasm-posix-kernel/issues/279)
- [x] Kernel-owned VFS + dinit-supervised demos [#370](https://github.com/brandonpayton/wasm-posix-kernel/issues/370)
- [x] VFS uid/gid foundation — chown stores values, stat reports honestly ([#417](https://github.com/brandonpayton/wasm-posix-kernel/pull/417))
- [x] mkrootfs CLI — declarative rootfs image builder ([#440](https://github.com/brandonpayton/wasm-posix-kernel/pull/440)); rootfs source tree + image build wiring ([#441](https://github.com/brandonpayton/wasm-posix-kernel/pull/441)); mount-table cutover + remove `synthetic_file_content` ([#442](https://github.com/brandonpayton/wasm-posix-kernel/pull/442))

### Browser runtime

- [x] Centralized kernel architecture w/ channel IPC over `SharedArrayBuffer` + `Atomics`
- [x] Dedicated kernel worker (NodeKernelHost) [#289](https://github.com/brandonpayton/wasm-posix-kernel/issues/289) + browser kernel worker [#194](https://github.com/brandonpayton/wasm-posix-kernel/issues/194)
- [x] Service worker COOP/COEP bootstrap + HTTP bridge [#117](https://github.com/brandonpayton/wasm-posix-kernel/issues/117)
- [x] TLS MITM for transparent HTTPS in demos [#240](https://github.com/brandonpayton/wasm-posix-kernel/issues/240)
- [x] Configurable CORS proxy for GitHub Pages [#248](https://github.com/brandonpayton/wasm-posix-kernel/issues/248)
- [x] GitHub Pages deployment of demos [#198](https://github.com/brandonpayton/wasm-posix-kernel/issues/198)
- [x] PTY support + xterm.js terminal panel ([#181](https://github.com/brandonpayton/wasm-posix-kernel/issues/181) [#182](https://github.com/brandonpayton/wasm-posix-kernel/issues/182))
- [x] Framebuffer (`/dev/fb0`) + canvas renderer + fbDOOM ([#349](https://github.com/brandonpayton/wasm-posix-kernel/issues/349) [#350](https://github.com/brandonpayton/wasm-posix-kernel/issues/350) [#351](https://github.com/brandonpayton/wasm-posix-kernel/issues/351) [#364](https://github.com/brandonpayton/wasm-posix-kernel/issues/364))
- [x] fbDOOM mouse input via `/dev/input/mice` + Pointer Lock ([#459](https://github.com/brandonpayton/wasm-posix-kernel/pull/459))
- [x] fbDOOM sound output via `/dev/dsp` + Web Audio ([#460](https://github.com/brandonpayton/wasm-posix-kernel/pull/460))
- [x] fbDOOM MUS/MIDI music through OPL2 → `/dev/dsp` ([#461](https://github.com/brandonpayton/wasm-posix-kernel/pull/461))
- [x] fbDOOM IWAD fetched at runtime ([#462](https://github.com/brandonpayton/wasm-posix-kernel/pull/462))
- [x] dinit init system across daemon demos ([#234](https://github.com/brandonpayton/wasm-posix-kernel/issues/234) [#370](https://github.com/brandonpayton/wasm-posix-kernel/issues/370))
- [x] WASI Preview 1 shim + 14 Unix utility build scripts [#205](https://github.com/brandonpayton/wasm-posix-kernel/issues/205)
- [x] Hybrid wasm32/wasm64 kernel with i64 channel ABI [#269](https://github.com/brandonpayton/wasm-posix-kernel/issues/269)
- [x] Git revision link in demo sidebar [#280](https://github.com/brandonpayton/wasm-posix-kernel/issues/280)
- [x] WordPress LAMP demo install: ~30 s → ~2 s ([#425](https://github.com/brandonpayton/wasm-posix-kernel/pull/425))
- [x] wasm64 mariadbd boot + MySQL/Redis demo handshake fixes ([#420](https://github.com/brandonpayton/wasm-posix-kernel/pull/420))
- [x] Terminal pane on WordPress demos + shell-based VFS ([#463](https://github.com/brandonpayton/wasm-posix-kernel/pull/463))
- [x] Kandelo live UI host ([#467](https://github.com/brandonpayton/wasm-posix-kernel/pull/467), [#483](https://github.com/brandonpayton/wasm-posix-kernel/pull/483)) + Node.js live gallery demo ([#485](https://github.com/brandonpayton/wasm-posix-kernel/pull/485))

### Runtimes on the kernel

- [x] Node.js–compatible runtime via QuickJS-NG — `node:crypto`, real `zlib`, TCP, TLS, real `http`/`https` with Mozilla `cacert.pem`, `npm install lodash`/`express`/`vite` end-to-end, plus browser Node/npm demo ([#482](https://github.com/brandonpayton/wasm-posix-kernel/pull/482), design [#470](https://github.com/brandonpayton/wasm-posix-kernel/pull/470), implementation plan [#471](https://github.com/brandonpayton/wasm-posix-kernel/pull/471))

### SDK & toolchain

- [x] All 8 CLI wrappers — `wasm32posix-{cc,c++,ar,ranlib,nm,strip,pkg-config,configure}` (#sdk batch)
- [x] WebAssembly dynamic linking — dylink.0 parser + dlopen runtime [#62](https://github.com/brandonpayton/wasm-posix-kernel/issues/62), end-to-end shared library load [#63](https://github.com/brandonpayton/wasm-posix-kernel/issues/63)
- [x] `setjmp`/`longjmp` via Wasm exception handling, `exnref` for setjmp [#79](https://github.com/brandonpayton/wasm-posix-kernel/issues/79)
- [x] Asyncify-onlylist fork support for Git 2.47.1 [#218](https://github.com/brandonpayton/wasm-posix-kernel/issues/218)
- [x] Nix flake providing reproducible dev shell [#376](https://github.com/brandonpayton/wasm-posix-kernel/issues/376)
- [x] Fork instrumentation tool ([#488](https://github.com/brandonpayton/wasm-posix-kernel/pull/488))

### Ported software (~40 packages)

- [x] Servers/DBs: nginx 1.27, PHP 8.4 (CLI + FPM, opcache enabled [#423](https://github.com/brandonpayton/wasm-posix-kernel/pull/423)), MariaDB 10.5 (Aria + InnoDB [#291](https://github.com/brandonpayton/wasm-posix-kernel/issues/291), dual-arch wasm32/wasm64 [#294](https://github.com/brandonpayton/wasm-posix-kernel/issues/294)), Redis 7.2, SQLite, WordPress 6.7
- [x] Languages: CPython 3.13, Perl 5.40, Ruby 3.3, QuickJS-NG, Erlang/OTP 28 BEAM ([#255](https://github.com/brandonpayton/wasm-posix-kernel/issues/255) [#258](https://github.com/brandonpayton/wasm-posix-kernel/issues/258) [#260](https://github.com/brandonpayton/wasm-posix-kernel/issues/260) [#263](https://github.com/brandonpayton/wasm-posix-kernel/issues/263)), bash 5.2 + readline [#293](https://github.com/brandonpayton/wasm-posix-kernel/issues/293)
- [x] Editors: Vim 9.1 + ncurses, GNU nano 8.3, NetHack 3.6.7
- [x] Tooling: Git 2.47, GNU coreutils 9.6, grep, sed, gawk, findutils, diffutils, make, m4, bc, tar, less, file, lsof
- [x] Compression: gzip, bzip2, xz, zstd, zip, unzip [#222](https://github.com/brandonpayton/wasm-posix-kernel/issues/222)
- [x] Network: curl + libcurl, wget
- [x] Demo headliners: TeX Live (pdfTeX) [#285](https://github.com/brandonpayton/wasm-posix-kernel/issues/285), fbDOOM [#351](https://github.com/brandonpayton/wasm-posix-kernel/issues/351), full LAMP stack [#121](https://github.com/brandonpayton/wasm-posix-kernel/issues/121)

### Testing infrastructure

- [x] musl libc-test runner (539+ tests passing, 0 unexpected failures)
- [x] Vitest host integration tests (276 tests)
- [x] Open POSIX Test Suite integration #38ac0b1a
- [x] Sortix os-test integration (4817+ pass) #40399442
- [x] Browser test infrastructure — Playwright libc-test + POSIX runners [#152](https://github.com/brandonpayton/wasm-posix-kernel/issues/152) [#153](https://github.com/brandonpayton/wasm-posix-kernel/issues/153)
- [x] Browser sortix runner [#155](https://github.com/brandonpayton/wasm-posix-kernel/issues/155), browser E2E demo tests [#131](https://github.com/brandonpayton/wasm-posix-kernel/issues/131)
- [x] MariaDB mysql-test suite (185 tests in browser) [#256](https://github.com/brandonpayton/wasm-posix-kernel/issues/256), nginx + SQLite test suites [#257](https://github.com/brandonpayton/wasm-posix-kernel/issues/257), SQLite TCL upstream suite [#264](https://github.com/brandonpayton/wasm-posix-kernel/issues/264)
- [x] Performance benchmark suite (5 suites, Node.js + browser) [#282](https://github.com/brandonpayton/wasm-posix-kernel/issues/282)
- [x] **CI gating on every PR** — `cargo test`, `vitest`, `run-libc-tests.sh`, `run-posix-tests.sh`, and `check-abi-version.sh` all run in `.github/workflows/prepare-merge.yml` (Phase B-1/B-2 [#428](https://github.com/brandonpayton/wasm-posix-kernel/pull/428) [#432](https://github.com/brandonpayton/wasm-posix-kernel/pull/432), staging release [#438](https://github.com/brandonpayton/wasm-posix-kernel/pull/438))

### ABI, packaging, releases

- [x] Structural ABI snapshot + enforced version bump [#295](https://github.com/brandonpayton/wasm-posix-kernel/issues/295)
- [x] Kernel-wasm exports included in snapshot [#296](https://github.com/brandonpayton/wasm-posix-kernel/issues/296)
- [x] Runtime ABI version enforcement on kernel and user programs [#297](https://github.com/brandonpayton/wasm-posix-kernel/issues/297)
- [x] Additive ABI snapshot changes allowed without version bumps ([#490](https://github.com/brandonpayton/wasm-posix-kernel/pull/490))
- [x] Per-package manifests, content-addressed cache, `binaries-abi-v` release scheme [#365](https://github.com/brandonpayton/wasm-posix-kernel/issues/365)
- [x] **Binary resolution via `index.toml` ledger** — replaces the in-package `[binary]` schema with a per-release index, atomic publish via `scripts/index-update.sh`, project-state split into `build.toml` ([#464](https://github.com/brandonpayton/wasm-posix-kernel/pull/464), design [#457](https://github.com/brandonpayton/wasm-posix-kernel/pull/457))
- [x] Decoupled package builds — Phase B-1 per-package matrix + content-hash gating ([#428](https://github.com/brandonpayton/wasm-posix-kernel/pull/428)), Phase B-2 sticky PR comment + `kernel_abi` required check ([#432](https://github.com/brandonpayton/wasm-posix-kernel/pull/432)), Phase C resolver cutover + legacy publish pipeline removal ([#438](https://github.com/brandonpayton/wasm-posix-kernel/pull/438))
- [x] **libc++ published as a binary package**, bundling libunwind ([#368](https://github.com/brandonpayton/wasm-posix-kernel/pull/368))
- [x] dinit published as a package [#371](https://github.com/brandonpayton/wasm-posix-kernel/issues/371); lockfile + sha refresh flow ([#372](https://github.com/brandonpayton/wasm-posix-kernel/issues/372) [#377](https://github.com/brandonpayton/wasm-posix-kernel/issues/377) [#379](https://github.com/brandonpayton/wasm-posix-kernel/issues/379))

### Documentation

- [x] Architecture, SDK, porting, browser-support, posix-status, profiling, package-management, binary-releases, abi-versioning, wasm-limitations docs in `docs/`
- [x] TypeDoc API docs auto-deployed to GitHub Pages [#265](https://github.com/brandonpayton/wasm-posix-kernel/issues/265)
- [x] CLAUDE.md test-verification + ABI checklist
- [x] Relicensed to GPL-2.0-or-later with MIT runtime [#223](https://github.com/brandonpayton/wasm-posix-kernel/issues/223)

### Mapping to Brandon's manual list

These are the items from the original list that are now closed:

- [x] Protocol for rendering to a frame buffer — [#349](https://github.com/brandonpayton/wasm-posix-kernel/issues/349) [#350](https://github.com/brandonpayton/wasm-posix-kernel/issues/350) [#351](https://github.com/brandonpayton/wasm-posix-kernel/issues/351) [#364](https://github.com/brandonpayton/wasm-posix-kernel/issues/364)
- [x] Protocol for TTY — [#181](https://github.com/brandonpayton/wasm-posix-kernel/issues/181) [#182](https://github.com/brandonpayton/wasm-posix-kernel/issues/182) [#221](https://github.com/brandonpayton/wasm-posix-kernel/issues/221)
- [x] CORS proxy workaround for COOP/COEP — [#248](https://github.com/brandonpayton/wasm-posix-kernel/issues/248) [#240](https://github.com/brandonpayton/wasm-posix-kernel/issues/240)
- [x] Each demo build tagged with git revision — [#280](https://github.com/brandonpayton/wasm-posix-kernel/issues/280)
- [x] Prebuilt disk images — [#286](https://github.com/brandonpayton/wasm-posix-kernel/issues/286) [#279](https://github.com/brandonpayton/wasm-posix-kernel/issues/279) [#370](https://github.com/brandonpayton/wasm-posix-kernel/issues/370)
- [x] Binary registry of prebuilt programs and libraries — [#365](https://github.com/brandonpayton/wasm-posix-kernel/issues/365) [#371](https://github.com/brandonpayton/wasm-posix-kernel/issues/371) [#372](https://github.com/brandonpayton/wasm-posix-kernel/issues/372) [#464](https://github.com/brandonpayton/wasm-posix-kernel/pull/464)
- libcurl, ncurses, libc++ ([#368](https://github.com/brandonpayton/wasm-posix-kernel/pull/368)) all shipped as standalone packages; readline still only via bash [#293](https://github.com/brandonpayton/wasm-posix-kernel/issues/293) (standalone package still in Layer 3)
- [x] Raw C build command (Dennis) — `wasm32posix-cc` + 7 sibling SDK wrappers

---

_Last updated: May 17, 2026 (originally April 30, 2026)_

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reviewing the unchecked roadmap items and the referenced entry points, especially examples/browser/lib/http-bridge.ts, connection-pump.ts, lib/init/service-worker-bridge.ts, and examples/browser/public/service-worker.js. Use examples/browser/test/demos.spec.ts and playwright.config.ts to assess existing coverage; a contribution is done when one clearly scoped roadmap item is implemented with its corresponding behavior or tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
playwright, typescript, wasm, wordpress
Domain
documentation, networking, operating-systems, testing-qa, web-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.