‹ Newsroom

Native vs. Electron: building a Mac app in Rust

Electron apps ship fast. Native apps feel fast. We chose Rust and Tauri and haven't looked back — but it came with real tradeoffs worth being honest about.

Why not Electron

The obvious answer is performance. Electron bundles a full Chromium browser. For an app where the perceived speed of every interaction matters, starting with a 150MB binary and 200ms startup overhead felt like the wrong foundation.

But performance wasn't the only reason. Electron's memory model, security surface, and update mechanism all felt at odds with what we were building: an app that holds your email and should behave like a trusted piece of system software.

Why Tauri + Rust

Tauri uses the platform's native webview (WKWebView on macOS) for the UI layer, with Rust handling everything that touches your data: parsing, storing, syncing, and classifying email. The binary is under 15MB. Cold start is under 100ms.

The tradeoff: Rust has a steep learning curve, and the Tauri ecosystem is younger than Electron's. Some things that are one npm install in Electron required us to write from scratch. We think that's the right trade.

What we'd do differently

We'd start with stronger type contracts between the Rust and TypeScript layers earlier. The IPC boundary is where most of our early bugs lived. A typed schema for commands from day one would have saved weeks.

Frequently asked questions

Why did ZenMail choose Tauri over Electron?
Electron bundles a full Chromium browser, which adds ~150MB to the binary and significant startup overhead. Tauri uses the system's native WKWebView, producing a <15MB app with sub-100ms cold start.
Is Rust a good choice for desktop apps?
For apps where performance, memory safety, and reliability matter — like email clients that hold sensitive data — Rust is an excellent fit. The tradeoff is a steeper learning curve and a younger ecosystem than Node/Electron.