Skip to content

build(deps): upgrade Electron to 44.4.3 - #4410

Merged
erickzhao merged 3 commits into
mainfrom
claude/optimistic-albattani-gayq8h
Sep 22, 2026
Merged

erickzhao merged 3 commits into
mainfrom
claude/optimistic-albattani-gayq8h

Conversation

@erickzhao

Copy link
Copy Markdown
Member
  • I have read the contribution documentation for this project.
  • I agree to follow the code of conduct that this project follows, as appropriate.
  • The changes are appropriately documented (if applicable). — n/a, no user-facing behavior change
  • The changes have sufficient test coverage (if applicable). — existing suites cover the touched fixtures
  • The testsuite passes successfully on my local machine (if applicable). — with one pre-existing environment caveat, noted below

Summarize your changes:

Brings the root electron devDependency to latest and moves the two spec fixtures that pinned real Electron versions off stale pins. Nothing user-facing changes.

electron 42.3.3 → 44.4.3

Forge 8 already handles Electron 44: supported-archs.ts carries isArchDroppedByElectron44 for the win32/ia32 and linux/armv7l drops in 44.0.0-alpha.4, @electron/packager is already at 20.3.0 (the release that stopped reporting those archs), and a slow spec already exercises electron: '44.0.0'. CI covers ubuntu-x64, darwin-arm64 and win32-x64 only, none of which Electron 44 dropped.

node-abi 4.24.0 → 4.35.0 (lockfile only)

4.24.0 only knew Electron up to 40.0.0-alpha.2, so it could not resolve an ABI for Electron 42 — the version already in use — let alone 44:

before: getAbi('42.11.6', 'electron') -> throws
after:  42 -> 146, 43 -> 148, 44 -> 149, 45 -> 150

That was a pre-existing gap in native-module rebuilds rather than something this upgrade introduced. node-abi is pinned by @electron/rebuild at ^4.2.0, so this needed no manifest change.

Spec fixtures

plugin/fuses/spec/fixture now tracks the root Electron through a file: link instead of pinning 39.2.3, matching what api/core/spec/fixture/api-tester already does for both electron and @electron/fuses. That fixture asks whether the fuses plugin works with the Electron this repo develops against, so tracking the root devDependency is the question it should be asking. It also removes the drift permanently: a file: dependency has no registry version, so Dependabot cannot open a PR against it — which supersedes #4409.

plugin/webpack/spec/fixtures/apps/native-modules goes ^33.3.1^44.4.3, with package-lock.json regenerated by npm install --package-lock-only rather than edited by hand. This one deliberately keeps a pinned range instead of tracking the root: its spec runs npm ci, which requires manifest and lockfile to stay in sync, and the fixture's purpose is a real registry install plus native rebuild that a link into the Yarn-managed root node_modules would bypass.

That regenerated lockfile shrinks from 81 to 24 packages (59 removed, 2 added). Electron 44 swapped its download stack — @electron/get moved off the got dependency tree onto undici, and onto @electron-internal/extract-zip — so the got-era transitive deps (cacheable-request, decompress-response, @sindresorhus/is, @types/yauzl and friends) are simply gone.

The 16 fixtures pinning 99.99.99, 1000.100.10 or ^1000.0.0 are left alone. Those are deliberate sentinels, resolved without inspecting an install, not versions that can be upgraded.

Validation

  • tsc -b packages clean; yarn lint:js reports no errors
  • Fast suite: 66 files, 656 passed
  • plugin/fuses slow-verdaccio suite passes (1/1) both with an exact 44.4.3 pin and with the file: link. The Electron download cache confirms 44.4.3 is what was packaged and launched, and that 39.2.3 was never fetched.
  • AssetRelocatorPatch slow suite is unchanged from baseline at 7 passed / 2 failed
  • native-hello-world@2.0.0, published in 2019, compiles cleanly against Electron 44 headers

The environment caveat: those 2 AssetRelocatorPatch failures are runs the app with the native module (Development and Production), failing with FATAL: Running as root without --no-sandbox is not supported. They are a limitation of the container I ran in, not this change — I reverted to the base commit, reinstalled at Electron 42.11.6, and reproduced the identical two failures. The binary that dies is the fixture's own Electron in a temp dir, and the spec invokes it via npm startnpx electron . without --no-sandbox. CI does not run as root, so these pass there.

🤖 Generated with Claude Code

https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo


Generated by Claude Code

Bumps the root `electron` devDependency from ^42.3.3 to ^44.4.3 (latest
stable). Forge 8 already handles Electron 44: `supported-archs.ts`
carries `isArchDroppedByElectron44` for the win32/ia32 and linux/armv7l
drops in 44.0.0-alpha.4, @electron/packager is already at 20.3.0 (the
release that stopped reporting those archs), and a slow spec already
exercises electron 44.0.0. CI covers only ubuntu-x64, darwin-arm64 and
win32-x64, none of which Electron 44 dropped.

Also bumps node-abi 4.24.0 -> 4.35.0 in the lockfile. 4.24.0 only knew
Electron up to 40.0.0-alpha.2, so it could not resolve an ABI for
Electron 42 — the version already in use — let alone 44:

  before: getAbi('42.11.6', 'electron') -> throws
  after:  42 -> 146, 43 -> 148, 44 -> 149, 45 -> 150

That was a pre-existing gap in native-module rebuilds rather than
something this upgrade introduced. node-abi is pinned by
@electron/rebuild at ^4.2.0, so the bump needs no manifest change.

Test fixtures are intentionally left alone. The 15 api/core fixtures use
sentinel versions (99.99.99, 1000.100.10) that are resolved without
inspecting an install. The fuses fixture pins 39.2.3 because its spec
downloads and launches that binary, and the webpack native-modules
fixture pins ^33.3.1 because it rebuilds native-hello-world@2.0.0, which
was published in 2019. Templates pin no Electron version at all — `init`
installs it unversioned, so scaffolded apps already get latest.

Verified: `tsc -b packages` clean, `yarn lint:js` reports no errors, the
fast suite passes (66 files, 656 tests), and the slow packaging spec
passes including its dropped-arch cases.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo
Both fixtures that pinned a real Electron version were two or more majors
behind. Neither pin turned out to be load-bearing.

`plugin/fuses/spec/fixture` now tracks the root Electron via a `file:`
link instead of pinning 39.2.3, matching what
`api/core/spec/fixture/api-tester` already does for both `electron` and
`@electron/fuses`. The fixture exists to check that the fuses plugin
works with the Electron this repo develops against, so tracking the root
devDependency is the question it should be asking. It also removes the
drift entirely: a `file:` dependency has no registry version, so
Dependabot cannot open a PR against it (superseding #4409, which bumped
this pin to 39.8.10).

`plugin/webpack/spec/fixtures/apps/native-modules` goes from ^33.3.1 to
^44.4.3, with `package-lock.json` regenerated by
`npm install --package-lock-only`. This one keeps a pinned range rather
than tracking the root: its spec runs `npm ci`, which requires the
manifest and lockfile to stay in sync, and the fixture's purpose is a
real registry install plus a native rebuild, which a link into the
Yarn-managed root `node_modules` would bypass.

The 16 fixtures pinning 99.99.99, 1000.100.10 or ^1000.0.0 are left
alone — those are deliberate sentinels resolved without inspecting an
install, not versions that can be upgraded.

Verified locally:
  - fuses: slow-verdaccio suite passes (1/1) both with an exact 44.4.3
    pin and with the `file:` link; the Electron cache confirms 44.4.3
    was the version packaged and launched, and 39.2.3 was never fetched
  - native-modules: AssetRelocatorPatch slow suite is unchanged from
    baseline at 7 passed / 2 failed, where the 2 failures are a
    pre-existing sandbox limitation of this container ("Running as root
    without --no-sandbox is not supported") reproduced identically at
    Electron 33 before the bump
  - native-hello-world@2.0.0, published in 2019, compiles cleanly
    against Electron 44 headers

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo
@erickzhao
erickzhao requested a review from a team as a code owner September 22, 2026 04:05
@socket-security

socket-security Bot commented Sep 22, 2026

Copy link
Copy Markdown

All alerts resolved. Learn more about Socket for GitHub.

This PR previously contained dependency changes with security issues that have been resolved, removed, or ignored.

View full report

Socket Security blocked #4410 with a "Recently published" alert:
`@types/node@24.13.6`, published three days ago, reached the fixture
through `electron@44.4.3`.

The previous regeneration ran plain `npm install --package-lock-only`.
npm does not read Yarn's `npmMinimalAgeGate`, so it resolved the newest
`@types/node` rather than the newest one old enough to satisfy the
policy this repository holds its installs to.

Regenerated with the same age gate `tools/verdaccio/spawn-verdaccio.ts`
applies to npm, so the fixture lockfile now matches the repository's
supply-chain posture:

  npm_config_min_release_age=7
  npm_config_min_release_age_exclude=@electron/*,@electron-forge/*,
    @electron-internal/*,create-electron-app,electron,node-abi

Note npm counts this policy in days where Yarn and pnpm count minutes,
as that file documents. The exclude list is why `electron` stays at
44.4.3 despite being three days old, while `@types/node` drops to
24.13.4 (12 days old).

  @types/node: 24.13.6 -> 24.13.4

Every other entry is unchanged. I checked the publish date of all 24
resolved packages: `electron` is now the only one under seven days old,
and it is excluded by the list above and allowlisted in Socket, which
did not flag it.

Generated with npm 11.19.0 via npx, matching the version CI pins in the
`Install npm` step, because `min-release-age` needs npm >= 11.10.

Verified: the AssetRelocatorPatch slow suite is unchanged from baseline
at 7 passed / 2 failed, the 2 being this container's pre-existing
root/sandbox limitation, so `npm ci` and the native rebuild both still
work against the regenerated lockfile.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LqP44h5cpf69eZPBwGSZmo

@claude claude Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, straightforward Electron version-bump change. Reviewed the root and fixture devDependency bumps (electron ^42.3.3 to ^44.4.3, and 33.3.1 to ^44.4.3), the fuses fixture's switch from a pinned electron version to a file: reference into the workspace-hoisted node_modules/electron (path depth verified correct), the regenerated native-modules package-lock.json (got-era deps removed in favor of undici/@ electron-internal/extract-zip, matching Electron 44's new download stack), and the yarn.lock node-abi bump. No application source or logic files are touched.

Extended reasoning...

Pure devDependency/toolchain upgrade across package.json, a test-fixture package.json, its package-lock.json, and yarn.lock; no security-sensitive code paths (auth, crypto, permissions) are touched. Verified the file: path in the fuses fixture resolves correctly (5 levels up to repo root/node_modules/electron), and the lockfile diffs match the PR description's claims about dependency stack changes. CODEOWNERS is a blanket repo-wide team entry, not a specific sensitivity signal, and the diff is small, mechanical, and self-contained.

@erickzhao
erickzhao merged commit 5023ae1 into main Sep 22, 2026
24 checks passed
@erickzhao
erickzhao deleted the claude/optimistic-albattani-gayq8h branch September 22, 2026 20:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants