From 7e4c1dc073e6367f1b9a65a62ee0da1f8cbe3b0a Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 18 Sep 2026 21:44:37 +0000 Subject: [PATCH 1/3] docs: add Electron 45.0.0 release blog post (draft) Co-Authored-By: Claude Fable 5.1 Claude-Session: https://claude.ai/code/session_01964nMsUPKdL26VwCTMtU7i --- blog/electron-45-0.md | 115 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 blog/electron-45-0.md diff --git a/blog/electron-45-0.md b/blog/electron-45-0.md new file mode 100644 index 000000000..5c4809ab4 --- /dev/null +++ b/blog/electron-45-0.md @@ -0,0 +1,115 @@ +--- +title: Electron 45 +date: 2026-10-20T00:00:00.000Z +authors: + - name: Electron + url: https://github.com/electron + image_url: https://github.com/electron.png?size=96 +slug: electron-45-0 +tags: [release] +--- + +Electron 45 has been released! It includes upgrades to Chromium 155.0.8038.2, V8 15.5, and Node v24.21.0. + +--- + +The Electron team is excited to announce the release of Electron 45! You can install it with npm via `npm install electron@latest` or download it from our [releases website](https://releases.electronjs.org/release?channel=stable). Continue reading for details about this release. + +If you have any feedback, please share it with us on [Bluesky](https://bsky.app/profile/electronjs.org) or [Mastodon](https://social.lfx.dev/@electronjs)! Bugs and feature requests can be reported in Electron's [issue tracker](https://github.com/electron/electron/issues). + + + +## Notable Changes + +### Screen sharing now asks for the `display-capture` permission + +Requests to capture the screen, a window, or a tab are now passed to `session.setPermissionRequestHandler()` as the documented `display-capture` permission instead of `media`. Previously they arrived as `media` with an empty `mediaTypes` array, indistinguishable from a camera or microphone request. Applications with a permission handler that grants `media` and denies everything else must also grant `display-capture`, or screen sharing will stop working. See the [breaking changes document](https://www.electronjs.org/docs/latest/breaking-changes#behavior-changed-screen-capture-requests-are-reported-as-display-capture-in-setpermissionrequesthandler) for details. [#52824](https://github.com/electron/electron/pull/52824) + +### System passkeys on macOS + +Electron 45 extends `app.configureWebAuthn()` with platform passkey support on macOS. Set `platformPasskeys: true` and `navigator.credentials.create()` and `.get()` present Apple's native passkey sheet, served by any credential provider such as iCloud Keychain or 1Password. When both Touch ID and platform passkeys are configured, the new `select-webauthn-authenticator` session event lets your app choose which one to use. [#51563](https://github.com/electron/electron/pull/51563) + +### Files inside ASAR archives are read directly from the archive + +`fs.open()`, `fs.createReadStream()`, `fs.copyFile()`, `fs.cp()`, and related APIs now read files inside ASAR archives straight out of the archive instead of extracting a temporary copy first. Cold reads of large packed files are up to 100x faster, and apps no longer leave temporary files behind. The descriptors these calls return are only meaningful to Node's `fs` module; see the [breaking changes document](https://www.electronjs.org/docs/latest/breaking-changes#behavior-changed-file-descriptors-for-files-inside-asar-archives-are-only-usable-through-fs) for what is no longer supported. [#52833](https://github.com/electron/electron/pull/52833) [#53919](https://github.com/electron/electron/pull/53919) + +### Network, auth, and download events identify the requesting frame + +`webRequest` and `protocol` handler requests now carry an `initiatorOrigin`, `DownloadItem` gains `getInitiatorOrigin()`, and the `will-download` and `preconnect` session events receive the requesting `frame` as a trailing argument. Together with a series of fixes that attribute permission checks to the frame that made them, this makes it easier to write permission and network policies that reason about individual frames rather than whole windows. [#53700](https://github.com/electron/electron/pull/53700) [#53679](https://github.com/electron/electron/pull/53679) [#53690](https://github.com/electron/electron/pull/53690) [#53692](https://github.com/electron/electron/pull/53692) + +## Stack Changes + +- Chromium `155.0.8038.2` + - [New in 155](https://developer.chrome.com/blog/new-in-chrome-155/) + - [New in 154](https://developer.chrome.com/blog/new-in-chrome-154/) + - [New in 153](https://developer.chrome.com/blog/new-in-chrome-153/) + +- Node `v24.21.0` + - [Node 24.21.0 blog post](https://nodejs.org/en/blog/release/v24.21.0/) + +- V8 `15.5` + +Electron 45 upgrades Chromium from `152.0.7977.54` to `155.0.8038.2`, Node.js from `v24.18.1` to `v24.21.0`, and V8 from `15.2` to `15.5`. + +## New Features and Improvements + +- Added `disableWakeLocks` to `webPreferences` so that page activity such as audio playback no longer prevents the system from sleeping. [#52342](https://github.com/electron/electron/pull/52342) +- Added `initiatorOrigin` to `webRequest` and `protocol` handler requests, `DownloadItem.getInitiatorOrigin()`, and a trailing `frame` argument to the `will-download` and `preconnect` session events. [#53700](https://github.com/electron/electron/pull/53700) +- Added `webFrame.getIsolatedWorlds()` and the `isolated-world-created` event so preload scripts can discover isolated worlds as they are created. [#50633](https://github.com/electron/electron/pull/50633) +- Added a Windows Error Reporting helper module so that `crashReporter` captures `__fastfail` and other crashes that bypass the in-process handler on Windows. [#53851](https://github.com/electron/electron/pull/53851) +- Added platform passkey support to `app.configureWebAuthn()` on macOS, and a `select-webauthn-authenticator` session event for choosing between Touch ID and platform passkeys. [#51563](https://github.com/electron/electron/pull/51563) +- Added the `ELECTRON_DEBUG_DRAGGABLE_REGIONS` environment variable, which visualizes and logs draggable regions in unpackaged apps to help debug custom title bars. [#53626](https://github.com/electron/electron/pull/53626) +- Files inside ASAR archives are now read directly from the archive by `fs.open()`, `fs.createReadStream()`, `fs.copyFile()`, `fs.cp()`, and related APIs instead of through a temporary copy, and `fs.opendir()` and `fs.readlink()` now work on archives. [#52833](https://github.com/electron/electron/pull/52833) +- Improved `protocol.handle()` performance by relaying untouched `net.fetch()` responses without passing them through JavaScript. [#53379](https://github.com/electron/electron/pull/53379) +- Improved performance of `fs` operations on paths inside ASAR archives. [#53919](https://github.com/electron/electron/pull/53919) +- Improved performance of `Menu` and `MenuItem` by implementing them natively. [#53914](https://github.com/electron/electron/pull/53914) +- Improved performance of computing draggable regions in windows with many `-webkit-app-region: drag` elements. [#53596](https://github.com/electron/electron/pull/53596) [#53649](https://github.com/electron/electron/pull/53649) +- Improved startup time by loading WHATWG streams and the desktop-name helper only when they are used. [#53899](https://github.com/electron/electron/pull/53899) +- Improved startup time of Node.js-enabled renderers by pushing preload paths to them instead of fetching them with a synchronous IPC. [#53916](https://github.com/electron/electron/pull/53916) +- Renderer network requests no longer wait on the main process when a session's `webRequest` listeners only observe requests or are filtered to other resource types. [#53204](https://github.com/electron/electron/pull/53204) (Also in [44](https://github.com/electron/electron/pull/53240)) + +## Breaking Changes + +### Behavior Changed: screen capture requests are reported as `display-capture` + +Requests to capture the screen, a window, or a tab, whether made through `navigator.mediaDevices.getDisplayMedia()` or through `getUserMedia()` with the `chromeMediaSource` constraints, are now passed to `session.setPermissionRequestHandler()` as `display-capture`. `media` is now used only for camera and microphone devices, and `details.mediaTypes` lists `video` and/or `audio` for both. A handler that allows only `media` must also allow `display-capture` to keep screen sharing working: + +```js +session.defaultSession.setPermissionRequestHandler((webContents, permission, callback) => { + callback(permission === 'media' || permission === 'display-capture'); +}); +``` + +The `display-capture` Permissions-Policy now also applies to the `getUserMedia()` path, so a cross-origin `