Roadmap
The road to beta.
An Electron-class developer experience that ships tiny apps on WebKit instead of a bundled browser - with native modules that never need a compiler. Below: what's shipped, the exact stops between here and beta, and what "beta" has to prove before we'll say the word. No vapor; if it isn't built, it says so.
Where we are today
Published on npm; the site you're reading is the docs. The framework runs on macOS, Linux and Windows (x64), the pinned-engine store and CLI are in place, and self-contained relocatable WebKits - including a from-source WinCairo build - load from the store in CI. The per-method truth lives on the parity page.
Release plan
From here to a beta you can check.
-
The framework, the CLI, and the engine store
the release that put bunmaska on npm - three platforms, honest gaps.
- An Electron-shaped API on Bun + system WebKit - 29 modules, ~70-80% weighted parity, pure
bun:ffi, zero compiled native code, zero runtime deps. - macOS and Linux in full; Windows (x64) in beta on a from-source WinCairo backend, green on CI next to the other two.
- The CLI loop -
init/dev/build- producing real .app, .deb and .exe distributables, plus a pure-Bun auto-updater. - The pinned-WebKit engine store: side-by-side, content-addressed, signature-verified installs. Relocatable engines proven on Linux and Windows CI.
- Frameless windows, bundled preloads, dev live-reload, and an event-driven macOS run loop (~10× less idle CPU).
- An Electron-shaped API on Bun + system WebKit - 29 modules, ~70-80% weighted parity, pure
-
Foundation - the unglamorous release. Deliberately.
where we are today - on npm as `latest`.
- Landed from the internal code review: the crash-class FFI lifetime fixes, and a security fix that closes an engine-downgrade path - a genuinely-signed older or other engine can no longer install under a different pinned id, because the store now binds the dir to the id inside the signed
engine.json. - The engine repository is live at engines.bunmaska.org: pack a built engine dir to
.tar.zst, content-hash it, Ed25519-sign the bytes, publish to R2;bunmaska engine installresolves the id against the feed, verifies the signature against the baked release key and re-checks the hash before extracting. The first hosted engine is the WinCairo WebKit Windows apps require - installed from the real CDN, end-to-end. - The start of the Electron contract-fidelity pass:
app.isReady()is a method,toPNG/toJPEGreturn Buffer, Tray takes a NativeImage,loadFilehandles hash/query and encodes paths properly. The rest of the list rides in alpha.7. - A first test-budget gate in CI: a minimum pass count and a skip ceiling per OS, so a silently-degraded suite fails the build instead of shrinking quietly.
- The website is held to the framework’s own strict TypeScript + lint bar, gated in CI.
- Landed from the internal code review: the crash-class FFI lifetime fixes, and a security fix that closes an engine-downgrade path - a genuinely-signed older or other engine can no longer install under a different pinned id, because the store now binds the dir to the id inside the signed
-
Hosted engines - the distribution unlock
any app, any platform, a tested WebKit one fetch away.
- The feed shipped early, in alpha.6: engines.bunmaska.org serves the signed WinCairo engine from Cloudflare R2, and the release public key is baked in as the trust anchor. What remains is the rest of the catalogue - the stable-train WinCairo build (hosted engines track WPE stable releases, where security advisories land), the hosted Linux engine, and publishing wired into CI instead of run by hand.
- The render pass for the relocatable Linux engine: it loads from the store today; next it draws.
- Cross-distro Linux engines (an old-glibc base, one build across distros).
- Engine delivery for end users: embedded in the bundle or fetched on first run. Never something a user types.
- The foundation leftovers carry here, not dropped: the coverage ratchet, the remaining contract-fidelity fixes, shared e2e harness helpers, and the Windows WebKit stack tested on every push.
Exit test a fresh machine goes install > init > build > running app on a pinned engine, on all three OSes
-
API depth - the last stretch real apps hit
closing the gap list the parity page already admits to.
-
session.cookieson all three platforms - the auth-app blocker. - A real
autoUpdater.quitAndInstall(atomic swap + relaunch) and cryptographically signed updates, not just integrity hashes. - Linux
capturePage,powerMonitoridle/battery,page-title-updated, per-instancewebContents.ipc. - The self-pipe wakeup primitive that structurally prevents the one hang class we’ve ever shipped.
- A worked serial-port native module - the buildless-FFI flagship demo, as a real package.
Exit test no "easy" cells left on the parity page; every N/A documented with its reason
-
-
What beta means here - checkable, not vibes
every box below is verifiable. No box, no beta.
- The API surface is frozen for the beta line; semver discipline begins.
- install > init > dev > build > launch runs end-to-end in CI on macOS, Linux and Windows - not just unit-green.
- Hosted engines are live and the auto-updater has shipped a real update to a real app.
- At least five real open-source Electron apps run via dependency swap, and one app we use daily has run for two weeks without a crash.
- Docs are complete: every implemented method documented, the parity matrix exact, the migration guide tested against a real app.
- Coverage at threshold, zero silent skips, and published (measured, methodology-included) size and memory numbers.
-
After beta
real, but not next. Listed so you know we know.
- Windows ARM64 (waiting on upstream WinCairo) and a Windows isolated content world.
- The macOS pinned-engine spike - system WKWebView stays the default either way.
- Delta updates, crash reporting, a SECURITY.md + disclosure process.
- The event-driven run loop on Linux and Windows, then upstreaming a Bun event-loop API so the pump disappears entirely.
The one everyone asks about
Windows, the honest version.
Windows is in beta - a from-scratch Win32 backend with WinCairo WebKit, green on CI. Here's the honest state, gaps and all.
Not WebView2
The easy Windows path is WebView2 - Microsoft Edge, i.e. Chromium. We didn't take it. Windows renders on WinCairo WebKit, the real WebKit port, loaded from the same engine store as every other platform.
A real Win32 backend
Built from scratch on bun:ffi - window + message pump, the WinCairo WebKit view and IPC bridge, and the full secondary-module set (clipboard incl. images, dialogs, tray, safeStorage via DPAPI, screen, shell, shortcuts, power, theme). It runs on a windows-latest CI runner.
x64 today, ARM64 next. Never 32-bit.
x64 is in beta now; ARM64 waits on upstream WinCairo. Windows is moving to ARM - so ARM64 is a when, not an if. x86 isn't on the list at all.
Still the expensive platform
Windows has no system WebKit, so we ship and maintain the WinCairo engine ourselves - CVE treadmill and all. That's why hosting the WinCairo builds is on the alpha.7 stop: a Windows app has to be able to fetch its engine.
Honest status: the backend is built and runs on a Windows CI runner, but a Windows app still needs a WinCairo engine in the store - and we don't host those builds yet. Windows is real in the code; shipping it end-to-end waits on the hosted engine, the same step Linux is waiting on.
Want to watch it happen?
It's all in the open. Star it, read the docs, or come argue about the parity matrix.