Skip to content

chore: upgrade electron to v44 (drops macOS 12 support) - #2047

Draft
paustint wants to merge 1 commit into
mainfrom
chore/upgrade-electron-44
Draft

paustint wants to merge 1 commit into
mainfrom
chore/upgrade-electron-44

Conversation

@paustint

@paustint paustint commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Electron 43.4.0 → 44.1.1. Split out from #2046 because it carries a user-facing support decision.

Chromium 150 → 152, Node 24.17 → 24.19, V8 15.0 → 15.2.

⚠️ This drops macOS 12 Monterey

Electron 44 requires macOS 13+. Packaged builds from this branch declare LSMinimumSystemVersion 13.0 (verified on both the x64 and arm64 slices), so macOS will refuse to launch the app on Monterey.

Worth deciding before merging: electron-updater doesn't gate downloads on OS version, so a Monterey user on 4.14.0 would download an update they then can't launch. Desktop users skew toward locked-down and VDI environments where OS upgrades aren't self-service. If install telemetry shows a meaningful Monterey population, we may want a staged rollout or an update gate first.

Not blocking otherwise — I have no visibility into those numbers, so flagging rather than deciding.

Code changes

Electron 44 rearchitects the clipboard module toward the W3C shape: main-process methods return Promises, the module is no longer exposed to renderers, and narrow helpers (readBookmark/writeHTML/readImage) are gone.

Exactly one site is affected — the context menu's Copy Selection handler in browser.ts. clipboard.writeText is now Promise<void>, so the handler logs a failed write instead of leaving an unhandled rejection. Nothing waits on the copy, so it stays fire-and-forget.

The renderer never imported the clipboard module (it uses copy-to-clipboard and navigator.clipboard), so the renderer removal doesn't apply.

Everything else audited and clear

  • net.request Sec-Fetch validationnet.fetch is called in protocol.service.ts and api.service.ts, always with a freshly constructed URL and never forwarding a Sec-Fetch-Dest header, so the new frame-type rejection doesn't apply.
  • Dropped ia32 / armv7l binaries — never built. electron-builder.config.js produces macOS dmg/zip for x64 + arm64 and Windows nsis/portable for x64 only.
  • Login item settings (openAsHidden, wasOpenedAsHidden, restoreState removed on macOS) — not used.
  • select-client-certificate may now pass a null webContents — not handled anywhere.
  • ANGLE now statically linked — no custom ANGLE usage.

Verification

Full packaged macOS build (electron-builder build --mac, both slices), which exercises the real release path:

afterPack dependency verification passed: 61 packaged modules, dependency closure complete
packaged smoke test: launching .../Jetstream.app/Contents/MacOS/Jetstream
  electron: 44.1.1, chrome: 152.0.7977.65, node: 24.19.0, v8: 15.2.124.18-electron.0
[SMOKE TEST] renderer DOM ready (+9.0s)
[SMOKE TEST] PASSED - main process booted and renderer finished loading (+12.9s)
packaged smoke test: passed

That covers the failure mode from 4.12.0 — the asar dependency closure is complete and the app boots from app.asar rather than the workspace node_modules. Typecheck of jetstream-desktop, jetstream-desktop-client and jetstream-desktop-e2e is clean, as are oxlint and oxfmt --check.

Still needs a Windows packaged build and hands-on testing of the Copy Selection menu item, neither of which I can do here.

Note on version

Pinned to 44.1.1 rather than 44.2.0 — 44.2.0 is still inside the minimumReleaseAge window (published Sept 4, eligible Sept 7).

Copilot AI lite review requested due to automatic review settings September 6, 2026 19:21
@socket-security

socket-security Bot commented Sep 6, 2026

Copy link
Copy Markdown

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updatedelectron@​43.4.0 ⏵ 44.1.1100100100 +198100

View full report

Copilot AI 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.

🔵 Needs a closer look

Major Electron runtime upgrade with an OS-support drop warrants manual packaged-build verification (especially Windows) and hands-on functional testing before merging.

Pull request overview

Upgrades the Jetstream desktop app’s Electron runtime to v44.x (Electron 43.4.0 → 44.1.1), which also drops macOS 12 support and requires the one impacted clipboard call site to handle a now-promise-based API.

Changes:

  • Bump electron dependency to ^44.1.1 (lockfile + manifest).
  • Update the desktop context menu “Copy Selection” handler to attach a rejection handler to clipboard.writeText(...) (Electron 44 promise-based clipboard API).
File summaries
File Description
pnpm-lock.yaml Updates the resolved Electron package/snapshot to 44.1.1.
package.json Bumps the Electron dependency range to ^44.1.1.
apps/jetstream-desktop/src/browser/browser.ts Adjusts “Copy Selection” to handle the promise-based clipboard API and log failures.
Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file
  • Files reviewed: 2/3 changed files
  • Comments generated: 1
  • Review effort level: Lite

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread apps/jetstream-desktop/src/browser/browser.ts Outdated
Copilot AI review requested due to automatic review settings September 7, 2026 14:52
@paustint
paustint force-pushed the chore/upgrade-electron-44 branch from cc288d6 to c5db92c Compare September 7, 2026 14:52

Copilot AI 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.

🟡 Changes recommended

The Electron 44 upgrade drops macOS 12 but the current auto-update path appears to have no OS-version gating, risking Monterey users downloading an update they cannot launch.

Once you've addressed the issues Copilot identified, you can request another Copilot review.

Review details

Files not reviewed (1)

  • pnpm-lock.yaml: Generated file
  • Files reviewed: 2/3 changed files
  • Comments generated: 2
  • Review effort level: Lite

Comment thread package.json
"contentful": "^11.12.9",
"cross-env": "^10.1.0",
"electron": "^43.4.0",
"electron": "^44.1.1",
Comment thread apps/jetstream-desktop/src/browser/browser.ts Outdated
@paustint
paustint marked this pull request as draft September 7, 2026 16:00
Chromium 150 -> 152, Node 24.17 -> 24.19, V8 15.0 -> 15.2.

Electron 44 makes the clipboard API promise-based, so the context menu's
Copy Selection handler now logs a failed write instead of leaving an
unhandled rejection. The renderer never imported the clipboard module (it
uses copy-to-clipboard and navigator.clipboard), so its removal from
renderers does not apply here.

Nothing else in the desktop main process is affected: net.fetch is only
called with freshly constructed URLs and never forwards a Sec-Fetch-Dest
header, and the app does not use login item settings or the removed
narrow clipboard helpers. The dropped ia32/armv7l binaries were never
built — macOS ships x64/arm64 and Windows x64 only.

This does drop macOS 12 Monterey: packaged builds now declare
LSMinimumSystemVersion 13.0.

Verified with a full packaged macOS build on both slices — the asar
dependency closure check passed (61 modules) and the packaged smoke test
booted the main process and loaded the renderer from app.asar.
@paustint
paustint force-pushed the chore/upgrade-electron-44 branch from c5db92c to f82d883 Compare September 7, 2026 16:48
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.

2 participants