Skip to content

Electron 33 → 39 upgrade blocked by better-sqlite3 ABI (defer to v0.1.x or v0.2) #106

@hqhq1025

Description

@hqhq1025

Status

Deferred. PR #103 attempted Electron 33.2.1 → 39.8.x and was closed because better-sqlite3@11.10.0 ships no prebuilt for Electron 39's Node ABI on darwin-arm64.

What this fixes when done

17 dependabot Electron alerts (4 high, 12 medium, 1 low):

  • 4 high: use-after-free in PowerMonitor / WebContents permission callbacks / offscreen child window paint / renderer command-line switch injection
  • Others: AppleScript injection, IPC spoofing, origin permission scoping, etc.

Plus brings Chromium from 130 → 142, unlocking newer CSS (@scope, @container, anchor positioning, text-wrap: balance mature) — relevant for our generated artifacts.

Three solutions, pick one when picking back up

A. Wait for better-sqlite3 upstream

Watch https://github.com/WiseLibs/better-sqlite3/releases for an Electron-39 prebuild. Zero work when it ships. Cost: indefinite delay.

B. Source-compile via @electron/rebuild postinstall

Replace prebuild-install path in apps/desktop/scripts/install-sqlite-bindings.cjs with a compile step. Cost: every dev install now needs Python + node-gyp + Xcode CLT; first install slow (~60s); brittle on user machines.

C. Switch to node:sqlite (Node 22.5+ built-in)

Rewrite apps/desktop/src/main/snapshots-db.ts to use Node's built-in sqlite module. Cost: ~50 LOC change; some sqlite behavior microdiffs to verify; no native binding ABI problem ever again.

Recommendation: C when revisiting. Pre-1.0 (pre-release), the cleanup pays off forever. Persistence is core; we want it to stop being a versioning hot zone.

Trigger to revisit

  • Targeting v0.2 release publicly OR
  • A specific high CVE becomes exploitable in our threat model OR
  • We want a Chromium 142+ CSS feature for generated artifacts (e.g. anchor positioning for popovers/tooltips)

Hard constraint

Whichever option ships, must NOT use Electron 41.x — CLAUDE.md ban (cross-origin isolation regression).

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions