Electron is what happens when you take a web browser and duct-tape it to Node.js. GitHub built it for Atom editor back when they thought text editors needed to be written in web technologies. Atom is dead now, but Electron survived because it solved a real problem: web developers want to build desktop apps without learning C++.
Chrome's multi-process architecture that Electron inherits
The Technical Reality
The Electron Stack:
┌─────────────────────────────────────┐
│ Your Web App │ ← HTML, CSS, JavaScript
├─────────────────────────────────────┤
│ Node.js API │ ← File system, OS APIs
├─────────────────────────────────────┤
│ Chromium Browser │ ← V8 engine, rendering
└─────────────────────────────────────┘
Here's what you're actually getting:
- Chromium: A full Chrome browser bundled with your app
- Node.js: Runtime that gives you filesystem access and system APIs
- Your web app: Running inside this browser with superpowers
Bottom line: web developers can finally build desktop apps without learning a new language. Sure, they're bloated memory hogs, but at least you don't have to deal with Xcode and Visual Studio project files. The multi-process architecture inherited from Chromium means you get process isolation for free.
Why Every Process Matters (And Why It Breaks)
Electron borrows Chrome's process model, which sounds great until you start debugging:
- Main Process: Your app's brain. When this crashes, everything dies. Handles window management, app lifecycle, and native APIs.
- Renderer Processes: Each window is basically a browser tab. These crash individually, which is actually helpful. Each runs its own Chromium instance with context isolation.
- Utility Processes: Background stuff that breaks in mysterious ways. Handle heavy computation without blocking the UI.
Electron Process Model:
Main Process (Node.js)
├── Manages app lifecycle
├── Creates BrowserWindows
└── Controls renderer processes
│
├── Renderer Process 1 (Chromium)
│ └── Window with your web app
│
├── Renderer Process 2 (Chromium)
│ └── Another window/webview
│
└── Utility Processes
└── Background tasks
The process isolation means when your renderer crashes with `Maximum call stack size exceeded`, your main process keeps running. Until it doesn't, and you have no idea why. Check the DevTools and crash reporter for clues.
Current Status (And Version Hell)
Electron 38.0.0 dropped September 2, 2025, packing Chromium 140.0.7339.41 and Node.js 22.18.0. They follow Chromium's insane 8-week release cycle, which means your build breaks every couple months when they update. Check the release timeline to see what's coming.
Real apps built with Electron that you actually use:
- VS Code - Microsoft's editor that somehow doesn't suck. Hits 600MB, maybe 800MB with extensions
- Discord - Gaming chat that eats your RAM. Try the memory debugging guide when it hits 2GB
- Slack - Corporate messaging that makes your laptop sound like a jet engine. Memory consumption issues will drain your battery
- Figma - Design tool that convinced everyone browsers are fine for heavy apps. Uses WebGL for rendering
These work because they have massive teams optimizing the hell out of them, or they naturally do web-friendly stuff. Your side project won't have Microsoft's resources. Trust me on this one.
Popular Electron Apps You Use Daily:
- VS Code, Discord, Slack, Figma, Notion, Postman, GitHub Desktop
- WhatsApp Desktop, Signal, Element, Hyper Terminal
- All consuming 200-500MB each while pretending to be "native" apps