Pixel-identical everywhere
The same engine and GPU paths on Linux, Windows and macOS — no WebView roulette.
- Linux · AppImage
- Windows · NSIS
- macOS · .app + DMG
A composable Chromium runtime for Rust. One engine on every OS: your event loop, your windows, your lifecycle. No Node.js attached.
cargo install --git https://github.com/0x48piraj/kurogane kurogane-cliLinux · Windows · macOS
Demo video · placeholder: the video isn’t available yet.
Why Kurogane
WebKitGTK on Linux, WebView2 on Windows, WKWebView on macOS. Each one renders, schedules the GPU and breaks differently — and none of it is yours to control.
Kurogane ships one Chromium to every platform — without Electron’s runtime strapped to it.
BEFORE · SYSTEM WEBVIEWS
3 engines · 3 renderers · 3 sets of bugs
AFTER · KUROGANE
One Chromium.
Every OS.
chromium 147.0.10
$ kurogane dev
Embed into a host with its own event loop, windows or GUI framework.
WebGL, Canvas and WASM workloads that can’t tolerate WebView variance.
No embedded Node.js, no imposed process model, direct lifecycle hooks.
Control browser processes, renderer extension points and IPC.
Rust drives.Chromium renders.
Workflow
kurogane new my-app
scaffolded my-app/ from the react starter
cd my-app && kurogane dev
chromium runtime resolved · window open
# already have a Vite app? start here instead
kurogane init
wrapped ./ without touching your files
kurogane bundle
dist/my-app-0.1.0.dmg
# AppImage on Linux · NSIS installer on Windows
Vanilla, React, Svelte or Vue: Rust host included.
Against your dev server. The matching Chromium runtime is resolved for you.
Your files stay exactly as they are.
An AppImage, an NSIS installer, or a .app with DMG: one per platform.
Honest comparison
Want the smallest binary? Use Tauri. Need Node.js APIs? Use Electron. Need Chromium’s consistency with full control of the host? That’s what Kurogane is for.
| Feature | Kurogane | Electron | Tauri |
|---|---|---|---|
| Rendering engine | Chromium (CEF) | Chromium | System WebView |
| Same engine on every OS | Yes | Yes | No |
| Host language | Rust | JavaScript · Node.js | Rust |
| Embedded Node.js runtime | None | Bundled | None |
| Who owns the event loop | Your app | The framework | The framework |
| Embeds into an existing app | Yes | No | No |
| Smallest binaries | — | — | Yes |
| Reach for it when | You need control and identical rendering | You need Node.js APIs | Binary size matters most |
Features
The same engine and GPU paths on Linux, Windows and macOS — no WebView roulette.
Structured messages for small calls, shared memory for big buffers.
// rendererconst res = await kurogane .invokeBinary(frame) // ≥ large payloads → shared memory// 809 MB/s at 20 MB
Orchestrate windows, popups and delegates from the host.
Integrate with winit or any host-managed loop. Kurogane plugs into your architecture — not the other way round.
Performance
Same machine, same Chromium, same workloads — RPC round-trips and binary transfers from 1 KB to 20 MB, measured against Electron 42.
See all benchmarks1.34×
faster RPC round-trips
118.8 ms vs 158.9 ms
1.72×
faster 10 MB transfers
1.50 s vs 2.58 s
2.84×
faster 20 MB transfers
4.94 s vs 14.06 s
809
MB/s peak IPC throughput
vs 285 MB/s on Electron
Open source · MIT · v0.0.3
Install the CLI, run kurogane showcase, and star the repo to follow what ships next.
cargo install --git https://github.com/0x48piraj/kurogane kurogane-cli