API Parity & Gaps

Roughly 70-80% of Electron's surface, weighted to what real apps use - and we publish the gap so you can check before you commit.

We’re allergic to lying in tables, so here’s the honest map. Bunmaska implements 21 of Electron’s main-process modules (~58% of the raw count), which works out to about 70-80% of what a typical webview app actually uses.

Implemented

These ship and behave like Electron’s, on both macOS and Linux:

ModuleNotes
applifecycle, paths, single-instance, userAgentFallback
BrowserWindowcreate/load, resizable, opacity, min-size, center, devtools
webContentszoom, getTitle, stop/reload, capturePage + printToPDF (macOS)
ipcMainhandle / on
Menu / MenuItemroles, checkbox/radio, popup, macro roles
dialogfilters, message box severity, error box
clipboardtext, HTML, image
Trayicon + context menu
Notificationnative notifications
nativeImagepath/buffer/dataURL/PNG/JPEG/resize/crop
nativeThemedark/light + observer + reduced-transparency
globalShortcutaccelerator registration
shell · protocol · screen · powerMonitor · powerSaveBlocker · safeStorage · session (UA + clearStorageData) · autoUpdater

Renderer side: ipcRenderer + contextBridge (real context isolation via a dedicated isolated world).

Pending (inside shipped modules)

Real gaps we’re actively filling:

AreaStatus
session.cookiesget/set/remove - planned (the cocoa-block primitive that unblocks it already landed)
BrowserWindow.setBounds / setPositionneeds the by-reference struct-arg workaround
richer webContents eventsdom-ready, did-navigate, console-message
Linux capturePagevia webkit_web_view_get_snapshot

Out of scope by design

Chromium-internal or Windows-only surfaces. Not coming, and that’s deliberate:

BrowserView / WebContentsView (single-process) · desktopCapturer · net / netLog · webRequest / proxy · crashReporter · contentTracing · utilityProcess · TouchBar · inAppPurchase · extensions · pushNotifications · Web Serial / WebHID / WebUSB · all Windows-only members.

If a row you need is in “pending” or “out of scope,” now you know - before you’ve ported half your app. That’s the whole reason this page exists.