Electron documentation structure and official guides
The official Electron guides are organized into sections: FAQ, Guides and Tutorials (Getting started, Learning the basics, Advanced steps, Detailed Tutorials), and API References. Getting started includes Introduction and Process Model. Learning the basics covers notifications, recent documents, progress bars, dock menus, taskbars, desktop actions, keyboard shortcuts, online/offline detection, file representation, drag & drop, navigation history, window state, offscreen rendering, dark mode, and web embeds.
Electron advanced guides available
Advanced learning guides cover: Application Architecture (using native Node.js modules, performance strategies, security strategies, process sandboxing), Accessibility, Testing and Debugging (main process debugging, VS Code debugging, headless CI testing, DevTools extension, automated testing, REPL), and Distribution (code signing, Mac App Store, Windows Store, Snapcraft, ASAR archives). Updates guide and Getting Support are also available.
Documentation version matching requirement
When using Electron documentation, ensure the version number matches your Electron version. The version should be part of the page URL. If the version is not in the URL, you are likely viewing documentation for a development branch which may contain incompatible API changes. Older versions of documentation can be accessed by browsing by tag on GitHub.
Detailed tutorials available in Electron documentation
Detailed tutorials include: Installing Electron (with subsections on Proxies, Custom Mirrors and Caches, and Troubleshooting), Electron Releases & Developer Feedback (Versioning Policy, Release Timelines), and Glossary of Terms.
Conditions to remove Experimental tag
An API can be nominated to have its experimental tag removed once it has been stable and present in at least two major stable release lines. This discussion should happen at an API WG meeting. Considerations include: the two major stable release lines condition must be met; no major bugs or issues should have been caused by adoption of the feature; the API is stable enough and has not been heavily impacted by Chromium upgrades; there is evidence someone is using the API; and the API is fulfilling the original proposed use cases without significant gaps.
Experimental APIs definition
APIs tagged as Experimental in Electron documentation may not be considered stable and may be removed or modified more frequently than other APIs with less warning.
Request for Experimental tag on an API
Anyone can request an API be tagged as experimental in a feature PR. Disagreements on the experimental nature of a feature can be discussed in the API WG if they cannot be resolved in the PR.
How Electron binaries are downloaded
When running npm install electron, the main bin script is downloaded. Once run via npx electron or equivalent, the Electron binary for the corresponding version is downloaded into the project's node_modules folder dynamically via the install-electron script. The download logic is handled by the @electron/get utility package. The install-electron script can also be called manually.
Electron Node.js upgrade wait period
When a new version of Node.js is released, Electron usually waits about a month before upgrading to avoid bugs introduced in new Node.js versions. New features of Node.js are usually already in Electron through V8 upgrades, since Electron uses the V8 shipped by Chrome browser.
Electron Chromium upgrade schedule
Every new major version of Electron releases with a Chromium major version upgrade. Electron releases every 8 weeks, allowing it to pull in every other major Chromium release on the same day it releases upstream. Security fixes are backported to stable release channels ahead of time.
npm install electron fails with network errors
When running npm install electron, errors like ELIFECYCLE, EAI_AGAIN, ECONNRESET, and ETIMEDOUT are indications of network problems, not issues with the electron npm package. The best resolution is to try switching networks or waiting and trying again. Alternatively, download Electron directly from GitHub Releases if npm installation is failing.
ASAR archive format definition
ASAR stands for Atom Shell Archive Format. An ASAR archive is a simple tar-like format that concatenates files into a single file. Electron can read arbitrary files from it without unpacking the whole file.
V8 JavaScript engine in Electron
V8 is Google's open source JavaScript engine written in C++ and used in Google Chrome. Electron builds V8 as part of Chromium and then points Node to that V8 when building it. V8's version numbers always correspond to those of Google Chrome (for example, Chrome 59 includes V8 5.9, Chrome 58 includes V8 5.8).
Bundled components in Electron
Electron bundles the latest version of Chromium, V8, and Node.js directly with the application binary.
Electron supported platforms
Electron supports building desktop applications for macOS, Windows, and Linux.
Electron application disk size
Electron apps are typically over 100MB in size, with zipped Electron apps usually around 80 to 100 megabytes.
Major companies using Electron
Companies and applications built with Electron include Slack, Discord, Signal, OpenAI's ChatGPT, Anthropic's Claude, Visual Studio Code, Loom, Canva, Notion, and Docker.
Electron release schedule
Electron releases a new major version in lockstep with every second major Chromium release, usually on the same day as Chromium.
Electron maintenance governance
Electron is maintained by a diverse set of companies including Microsoft, Slack/Salesforce, and Notion. It is an impact project under the OpenJS Foundation, which is part of the Linux Foundation.
Electron definition and core technologies
Electron is a framework enabling developers to build cross-platform desktop applications for macOS, Windows, and Linux by combining web technologies (HTML, JavaScript, CSS) with Node.js and native code. It is open-source and MIT-licensed, and free for both commercial and personal use.
Native code support in Electron
Electron supports writing native code through Node.js' mature native addon system. Developers can write native code in C, C++, Objective-C, Rust, or other native languages to access system APIs and integrate macOS, Windows, or Linux features.
npm ecosystem availability in Electron
Anything available on npm will run inside Electron. Resources available for Node.js development also apply to Electron. Electron has a thriving ecosystem including choices for installers, updaters, and deeper operating system integration.
Commit message title length guideline
Commit titles follow a 60/80-character guideline: simple changes fit within 60 characters, otherwise the limit is 80 characters. Exception: upstream Node.js PR titles are used verbatim even if longer.
Co-Authored-By trailer required in all commits
All commit messages must always include a Co-Authored-By trailer identifying the AI model that assisted, for example: Co-Authored-By: <AI model attribution>.
Commit format for Electron source changes with upstream PR
When the upstream Node.js commit has a PR-URL, use this format:
node#{PR-Number}: {upstream PR's original title}
Ref: {Node.js PR link}
Co-Authored-By: <AI model attribution>
Commit format for Electron source changes without upstream PR
When there is no PR-URL but there is an issue reference or commit, use this format:
fix: {description of the adaptation}
Ref: {Node.js issue or commit link}
Co-Authored-By: <AI model attribution>
Use upstream commit's original title without paraphrasing
When creating a commit message, use the upstream commit's original title exactly as written — do not paraphrase or rewrite it. To find it, check the commit message in ../third_party/electron_node for PR-URL or Refs lines.
When to include commit body description
Only add a description body if it provides clarity beyond what the title already says, such as when Electron's adaptation is non-obvious. For simple renames, method additions, or straightforward API updates, the title plus Ref link is sufficient.
Logical grouping and individual references for commits
Each change should have its own commit and its own Ref. Logically group changes into commits that make sense rather than creating one giant commit. You may include multiple Ref links if required.
Effort required to find upstream references
Try really hard to find a reference. Each change should in theory have been made in response to a change in Node.js. Check git log and git blame in the Node.js repo, and do not give up easily.
How to find PR-URL and Refs in Node.js sources
Use git log or git blame on Node.js source files in ../third_party/electron_node. Look for lines containing PR-URL: https://github.com/nodejs/node/pull/XXXXX or Refs: https://github.com/nodejs/node/issues/XXXXX.
Electron-authored patches may not have upstream PR-URL
Many Node.js patches in Electron are Electron-authored and won't have upstream PR-URL lines. Check the patch's own commit message for Refs lines, or use git log in the Node.js repo to find which upstream commit caused the build break.
Fallback reference when none is found
If no reference is found after searching, use: Ref: Unable to locate reference
Commit format for patch file updates
For Patch Updates in patches/node/*.patch, use the same fixup workflow as Phase One and follow the commit message format with fix(patch): prefix and topic style.
Handling dependent patch header updates
After any patch modification, check for other affected patches. If other .patch files show as modified with only index, line number, and context changes, run: git add patches/ and git commit -m 'chore: update patches (trivial only)'.
Example: Electron source fix with upstream PR
node#61898: src: stop using v8::PropertyCallbackInfo<T>::This()
Ref: https://github.com/nodejs/node/pull/61898
Co-Authored-By: <AI model attribution>
Example: Electron source fix with issue reference and body
fix: adapt to v8::PropertyCallbackInfo<T>::This() removal
Updated NodeBindings to use HolderV2() after upstream Node.js stopped using the deprecated This() API.
Ref: https://github.com/nodejs/node/issues/60616
Co-Authored-By: <AI model attribution>