Electron: The Chromium-and-Node.js Desktop Shell That Still Dominates
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
At a glance
- What is it?
- Electron packages Chromium and Node.js into a single runtime for building cross-platform desktop apps with web tech. It solves distribution and API consistency but carries real costs in binary size and memory.
- Who is it for?
- Adopt Electron if your team already speaks JavaScript and needs one codebase for macOS, Windows, and Linux, especially for apps like Visual Studio Code that tolerate a larger binary. Avoid it if your product demands minimal memory footprint, native look and feel, or strict control over Chromium updates.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 15, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Electron Actually Bundles and Why That Matters
Electron is not a library you link into an existing app. It is a complete runtime that fuses Chromium, the rendering engine behind Google Chrome, with Node.js, the server-side JavaScript runtime. Your application code runs inside this combined shell, so you get DOM APIs, the Node standard library, and native module support in one process. The README states the framework lets you write cross-platform desktop applications using JavaScript, HTML, and CSS, and it is based on Node.js and Chromium. That bundling is the source of both its power and its weight. Every Electron app ships a full browser engine, which explains why the installed binary for a trivial app is often hundreds of megabytes. For teams that already live in the web ecosystem, this removes the need to learn platform-specific UI toolkits, but it also means you inherit Chromium's resource appetite. The trade-off is explicit in the design, and you should accept it before you start, not after your first memory profile.
The Core Mechanism: One Main Process, One Renderer Per Window
Electron's architecture splits your app into two roles. The main process runs Node.js and controls the application lifecycle, creating windows and handling system events. Each window you open runs a renderer process that executes your HTML, CSS, and JavaScript. This separation is not visible in the README, but it is the foundation of how Electron works in practice. The main process can access the file system and spawn child processes, while the renderer is sandboxed like a browser tab. Communication between the two goes through IPC, which the documentation covers in depth. The practical consequence is that you write two kinds of code: one for the backend of your app and one for the UI. This is a familiar pattern for web developers, but it adds a layer of coordination that a single-process desktop framework does not require. The README does not spell out this split, but any Electron tutorial or app structure you inspect will show it.
Getting Started: One npm Command and a Path to the Binary
Installation is deliberately simple. The README's preferred method is to add Electron as a development dependency: npm install electron --save-dev. That command downloads a prebuilt binary for your current platform, so you do not compile anything yourself. After installation, you can run Electron from the command line, but the README also shows a programmatic path. If you require('electron') from a plain Node script, you get the file path to the Electron binary, not a module. The example in the README uses that path to spawn Electron as a child process via node:child_process. This is useful for test runners or build scripts that need to launch the app headlessly. Note that the binary is platform-specific, so your CI and build machines must match the target OS. The README mentions custom mirrors for regions where the default download is slow, such as the China mirror at npmmirror.com. That is a concrete config you can set, but the README only points to the advanced installation docs for the exact mirror syntax.
Platform Support: Where It Runs and the Hidden Constraints
Electron ships binaries for macOS, Windows, and Linux. The README lists macOS Ventura and up with both Intel and ARM binaries, Windows 10 and up with x64 and arm64, and Linux with x64 and arm64. The Linux caveat is worth reading twice: Electron supports major distributions only in versions that are still supported by both Chromium and the distro maker, and the prebuilt binaries are built on Ubuntu. This means if you target an older Ubuntu release or a distro that Chromium has dropped, your Electron app may fail to run or require workarounds. The README says Electron tries to align with Chromium on platform support, so you are tied to Google's support calendar, not your own. For enterprise deployments on long-term-support Linux distributions, this is a genuine constraint. You cannot simply build once and expect it to run everywhere; you must track which distro versions are still within Chromium's support window.
The Real Limitation: Binary Size and Memory Footprint
The most honest limitation of Electron is the cost of shipping Chromium. Every app, no matter how small, includes the full rendering engine. The README does not give numbers, but the repository layout and the known behavior of Chromium make it clear: your installer will be large, and your app will use more RAM than a native equivalent. This is not a bug; it is the price of using a web stack on the desktop. If your app is a simple utility like a system tray icon or a text editor for logs, Electron is likely overkill. The README lists Visual Studio Code as a user, which is a heavyweight editor that justifies the overhead. But for a small internal tool, a lighter alternative like Tauri, which uses the system's native webview instead of bundling Chromium, will produce a much smaller binary and lower memory usage. The difference in approach is fundamental: Electron bundles its own browser, while Tauri relies on the OS-provided webview. That is a real trade-off you must weigh before adopting Electron.
Maintenance and Upgrade Cost: The 8-Week Chromium Cycle
Electron's release cadence is tied to Chromium's, which means you get a new major version roughly every eight weeks. The recent releases in the repository show this: v44.0.0 landed on 2026-08-25, and v45.0.0-alpha.1 appeared three days later. The README directs you to the Electron versioning docs for managing versions in your apps, but the takeaway is that you cannot ignore updates for long. Chromium fixes security vulnerabilities on a fixed schedule, and if you stay on an old Electron, you inherit those vulnerabilities. Upgrading Electron often requires updating your native modules and testing your IPC code, because Chromium and Node.js APIs change. The README does not promise a stable API across majors; it only points to the versioning policy. For a team that cannot dedicate time to regular upgrades, this is a recurring cost that will surface as a security audit or a broken feature. You should budget for a version bump at least twice a year, and verify your native dependencies support the new major before you commit.
Licensing and Community: MIT with a Trademark Caveat
Electron itself is licensed under MIT, which the README confirms. That means you can use, modify, and distribute the framework in commercial products with minimal restrictions. However, the README also notes that the Electron logos are subject to the OpenJS Foundation Trademark Policy. So you can build a proprietary app on Electron without paying a fee, but you cannot use the Electron logo or name in a way that suggests endorsement. This is a common pattern for open-source projects, but it is worth knowing before you put the Electron logo on your product's marketing page. The project also follows the Contributor Covenant code of conduct, which matters if you plan to contribute. The community is active, with a Discord link in the README and translations managed through Crowdin, but the README does not provide any metrics on contributor activity. For adoption, the MIT license is a green light, but the trademark clause is a boundary you should respect in your own materials.
Editorial conclusion
Adopt Electron if your team already speaks JavaScript and needs one codebase for macOS, Windows, and Linux, especially for apps like Visual Studio Code that tolerate a larger binary. Avoid it if your product demands minimal memory footprint, native look and feel, or strict control over Chromium updates. Before committing, verify your target Linux distro is still supported by the bundled Chromium version, and check the Electron versioning docs to align your release cadence with their 8-week major cycle.
Community notes