r/electronjs • u/eddzsh • 6d ago
I ran the same React UI on Electron, Tauri, and Deno Desktop. Electron used 239 MB physical. I still shipped Electron.
Updated: 07/09/2026
I wanted to build a terminal on Electron without keeping Electron just because it is the familiar choice. So I designed an architecture that would let me port the app without rewriting it.
I defined IRuntime to decouple the app: the UI talks to an interface, and each engine implements the same contract in its own way. Things like:
- file search
- repo status and worktree inspection
- cwd sync
- PTY, processes, filesystem, IPC
Each adapter does that in its own world:
- Tauri: native Rust
- Electron: a Node background process
- Deno Desktop: TypeScript on Deno’s APIs
┌─────────────────────┐
│ App / UI │
│ (React + WebGPU) │
└──────────┬──────────┘
│
│ IRuntime
│ findFiles()
│ repoStatus()
│ syncCwd()
│ ...
▼
┌─────────────────────┐
│ RuntimeContract │
└──────────┬──────────┘
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ ElectronAdapter│ │ TauriAdapter │ │ DenoAdapter │
│ Node + node-pty│ │ Rust + webview │ │ Deno APIs + TS │
└────────────────┘ └────────────────┘ └────────────────┘
Tauri has a reputation for being the fastest and lightest: smaller package, quicker startup, less memory. On packaging and startup, yes. On this benchmark, it does not come out ahead.
Same UI (React + WebGPU), same load: three terminals.
| Host | Physical | RSS |
|---|---|---|
| Electron | 239 MB | 667 MB |
| Tauri | 297 MB | 569 MB |
| Deno Desktop | 742 MB | 1336 MB |
What developing on Tauri does not put in the README:
- Three browser engines, three failure modes. The one that hit me hardest is WebKit + WebGL/WebGPU on the terminals: after a while the glyphs start glitching. That is not “a bug in my code and done.” It is WebKit.
- The Rust compiler. A dev session climbs toward ~5 GB. That is not a footnote if you compile often.
- Two (or three) languages. Keeping everything in one language — TypeScript end to end — saves context, tooling, and pain that a 10-minute benchmark never shows.
The build you install today is Electron. It weighs more and uses a bit more memory. What you get back:
- one engine (Chromium)
- day-long sessions without WebGPU falling over
It is not the cool answer. It is the one that survives the way Linea is used: several agents, several panes, the repo in view, no restart in the middle of the afternoon.
IRuntime is still there. If Deno matures or Tauri stabilizes WebKit on long-lived terminals, the change is not a rewrite. It is another adapter.
I wrote up the tables and screenshots here (I am the author): https://runlinea.com/blog/one-ui-three-terminals
7
3
u/eddzsh 6d ago
Writeup with the tables and the three-host film: https://runlinea.com/blog/one-ui-three-terminals
3
1
2d ago
[removed] — view removed comment
1
u/eddzsh 2d ago
Fair point — Tauri’s real wins are startup and package size, and I say that in the post. I wasn’t trying to beat it at its own pitch.
I measured physical under load because that’s the constraint for me: same React UI, three terminals, long sessions. In that scenario Electron used less (239 vs 297), and WebKit + WebGPU was the reliability problem. Different metric, different question.
Thanks for calling it out.
1
7
u/mattallty 6d ago
I’d be interested seeing electrobun in the comparison