Repository navigation
fix(core): guard against archs dropped by Electron 44 (win32/ia32, linux/armv7l) - #4377
Conversation
…nux/armv7l) (#4328) * fix(core): guard against archs dropped by Electron 44 (win32/ia32, linux/armv7l) Electron stopped publishing prebuilt win32/ia32 and linux/armv7l binaries starting with 44.0.0-alpha.4, but allOfficialArchsForPlatformAndVersion() from @electron/packager (as of 18.x) still reports them, so --arch=all expansions tried to download artifacts that no longer exist and failed with an opaque 404. Add a version-aware guard shared by parseArchs() and the package API: - --arch=all now filters the dropped arch out of the expansion (with a warning) for Electron >= 44.0.0-alpha.4 - explicit --arch=ia32 / --arch=armv7l requests fail with a descriptive error pointing users at Electron <= 43 (supported until Jan 2027) - Electron <= 43 and the 44.0.0-alpha.1 through alpha.3 prereleases are unaffected Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KEEZg64JKFrSDAc7u4V4Na * refactor(core): frame dropped-arch helper specifically as the Electron 44 ia32/armv7l removal Addresses review feedback: replace the generalized isDroppedArch helper and DROPPED_ARCHS registry with an explicit isArchDroppedByElectron44 check for the two combinations Electron 44 stopped publishing (win32/ia32 and linux/armv7l). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01KEEZg64JKFrSDAc7u4V4Na --------- Co-authored-by: Claude <noreply@anthropic.com> (cherry picked from commit eeac71e) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Bb2CkBAwF2iaKw1fjfQd9h
38c0caf to
4372540
Compare
There was a problem hiding this comment.
Findings marked 🟡 are optional suggestions and need no follow-up push.
Additional findings (outside the current diff — GitHub can't attach inline comments there):
-
🔴
packages/api/core/src/api/make.ts— parseArchs() now throws for explicit dropped archs (win32/ia32, linux/armv7l on Electron>=44) and silently filters them out of --arch=all, but make.ts calls parseArchs the same way even when skipPackage=true, where the app was already packaged (possibly under an older Electron) and no download ever happens. A user runningforge make --skip-packageafter bumping Electron to >=44 in package.json now gets a hard failure for an explicit arch that is already packaged on disk, or silently loses distributables for archs already present when using 'all'. Fix: only apply assertSupportedArch/filterSupportedArchs validation on the code path that actually invokes the packager (skipPackage=false), or check for existing packaged output before rejecting/filtering in make.ts.Extended reasoning...
Before this diff, parseArchs (packages/api/core/src/util/parse-archs.ts) simply split the declared arch string or returned every official arch for 'all', with no version-based rejection; make.ts's call at line 314-318 (unchanged by this diff) worked purely off the on-disk packaged directories. After this diff, the same parseArchs call now runs assertSupportedArch/filterSupportedArchs (packages/api/core/src/util/supported-archs.ts) using electronVersion resolved fresh from the current package.json, independent of whether packaging actually ran. Scenario: user packages an app for win32/ia32 with Electron 43, then later bumps the electron devDependency to 44.x and runs
forge make --skip-package --arch=ia32 --platform=win32to remake distributables from the already-packaged output (make.ts line 249: skipPackage=true skips listrPackage entirely via task.skip()). The 'Making distributables' step at line 314 still calls parseArchs(platform, arch, electronVersion), which now throws 'Cannot build for win32/ia32: Electron >= 44 no longer publishes...' even though the packaged directory already…Verification: normal (regression on the --skip-package make path). make.ts imports the changed parseArchs (line 25) and calls it unconditionally at lines 314-318 inside the "Making distributables" task, which runs even when skipPackage=true (options default line 111; package step skipped at lines 261-266). Per the diff, base parseArchs never validated/filtered: explicit archs returned… | normal. The base…
| return archs.filter((arch) => { | ||
| if (isArchDroppedByElectron44(platform, arch, electronVersion)) { | ||
| console.warn( | ||
| `Skipping ${platform}/${arch}: Electron >= 44 no longer publishes prebuilt binaries for this architecture. ` + | ||
| `Use Electron <= 43 (supported until Jan 2027) to target it.`, | ||
| ); | ||
| return false; | ||
| } | ||
| return true; | ||
| }); |
There was a problem hiding this comment.
🟡 (optional) filterSupportedArchs() calls console.warn() unconditionally, unlike the codebase's existing convention (see the adjacent warn(interactive, ...) call in package.ts) of gating console output on the interactive option so programmatic/API consumers (default interactive: false) get no unsolicited stdout/stderr. Now any --arch=all package/make run on Electron >= 44 prints to stderr even when the caller explicitly wants silent operation. Fix: thread an interactive (or silent) flag from package.ts/make.ts through parseArchs()/filterSupportedArchs() and only warn when true, matching the appVersion warning in package.ts.
Extended reasoning...
package.ts's own convention: the appVersion warning at package.ts:430 is wrapped in warn(interactive, ...) from util/messages.ts, which only calls console.warn when interactive===true; the CLI always passes interactive:true, but the JS API defaults interactive=false (used by embedders/CI wrappers/tests calling api.package()/api.make() directly). parse-archs.ts calls filterSupportedArchs(platform, archs, electronVersion) with no interactive parameter, and filterSupportedArchs unconditionally calls console.warn for every dropped arch it filters out of an 'all' expansion. Any programmatic consumer building for arch: 'all' on Electron >= 44 (win32 or linux) now gets stderr output it never opted into, breaking the silent-mode contract the rest of package.ts maintains, and polluting logs/output captured by tools that assume interactive:false means no console noise.
Verification: nit. Real and reachable but non-breaking. supported-archs.ts:78 calls console.warn() unconditionally inside filterSupportedArchs(). That function is invoked from parse-archs.ts:25 (the declaredArch === 'all' branch), which is called at package.ts:401 parseArchs(platform, arch, electronVersion) — no interactive flag is threaded anywhere along this path (filterSupportedArchs' signature has no…
…4384) @electron/packager 20.3.0 (#4379) already omits win32/ia32 and linux/armv7l from allOfficialArchsForPlatformAndVersion() for Electron >= 44.0.0-alpha.4, so the guard added in #4377 never sees those arches on an --arch=all expansion and never warns, which failed the "should warn when filtering a dropped arch out of all" test on every platform. Stub the packager arch list in that test so it exercises Forge's own filter regardless of what the installed packager reports, and update the stale comments that still described packager 18.x behaviour. Claude-Session: https://claude.ai/code/session_01Uj4Vx4Acv7PY1MmGq2kf3e Co-authored-by: Claude <noreply@anthropic.com>
##### [v8.0.1](https://github.com/electron/forge/releases/tag/v8.0.1) ##### What's Changed - build: Yarn 4 CI hardening by [@erickzhao](https://github.com/erickzhao) in [#4028](electron/forge#4028) - feat(init): add `--electron-version` flag by [@erickzhao](https://github.com/erickzhao) in [#4037](electron/forge#4037) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4036](electron/forge#4036) - feat: expose artifact version to static publishers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4033](electron/forge#4033) - fix(publisher-gcs): do not gzip artifacts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4034](electron/forge#4034) - chore: update `node-abi` to latest by [@erickzhao](https://github.com/erickzhao) in [#4046](electron/forge#4046) - build(deps): bump brace-expansion from 1.1.11 to 1.1.12 by [@dependabot](https://github.com/dependabot)\[bot] in [#4047](electron/forge#4047) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4049](electron/forge#4049) - build: remove electronegativity plugin by [@erickzhao](https://github.com/erickzhao) in [#4053](electron/forge#4053) - test(fuses): use local modules instead of `initLink` by [@erickzhao](https://github.com/erickzhao) in [#4057](electron/forge#4057) - chore: use yarn `workspace:*` cross-references by [@erickzhao](https://github.com/erickzhao) in [#4056](electron/forge#4056) - chore: add eslint config change to `.git-blame-ignore-revs` by [@erickzhao](https://github.com/erickzhao) in [#4062](electron/forge#4062) - feat(core)!: remove global module templates by [@erickzhao](https://github.com/erickzhao) in [#4065](electron/forge#4065) - ci: set up npm trusted publishing by [@erickzhao](https://github.com/erickzhao) in [#4070](electron/forge#4070) - chore: bump version to 8.0.0-alpha.1 by [@erickzhao](https://github.com/erickzhao) in [#4072](electron/forge#4072) - build: target "next" branch in gh release create by [@VerteDinde](https://github.com/VerteDinde) in [#4074](electron/forge#4074) - chore: bump version to 8.0.0-alpha.3 by [@VerteDinde](https://github.com/VerteDinde) in [#4075](electron/forge#4075) - test: fix slow tests on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4076](electron/forge#4076) - build: improve version + publish flow by [@erickzhao](https://github.com/erickzhao) in [#4078](electron/forge#4078) - ci: use `.nvmrc` file for CI by [@erickzhao](https://github.com/erickzhao) in [#4081](electron/forge#4081) - test: move AssetRelocatorPatch tests to slow tests by [@erickzhao](https://github.com/erickzhao) in [#4080](electron/forge#4080) - feat(import)!: remove Forge 5 import code by [@erickzhao](https://github.com/erickzhao) in [#4083](electron/forge#4083) - feat(core)!: remove rechoir + lodash templates from config loader by [@erickzhao](https://github.com/erickzhao) in [#4066](electron/forge#4066) - ci: optimize Windows builds with faster D:\ drive by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4038](electron/forge#4038) - test: upgrade to Vitest 4 by [@erickzhao](https://github.com/erickzhao) in [#4079](electron/forge#4079) - build(deps): replace `ts-node` with `tsx` by [@erickzhao](https://github.com/erickzhao) in [#4085](electron/forge#4085) - build(deps): update lint-roller to latest major version by [@erickzhao](https://github.com/erickzhao) in [#4086](electron/forge#4086) - fix(maker-wix): set default arch by [@ShGKme](https://github.com/ShGKme) in [#3859](electron/forge#3859) - fix(core): prevent duplicate app restarts when typing 'rs' multiple times by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4089](electron/forge#4089) - ci: run post-merge on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4090](electron/forge#4090) - test(slow): test api against `file:` protocol fixtures by [@erickzhao](https://github.com/erickzhao) in [#4087](electron/forge#4087) - chore: fix formatting by [@erickzhao](https://github.com/erickzhao) in [#4091](electron/forge#4091) - test(slow): simplify bootstrapping tests by [@erickzhao](https://github.com/erickzhao) in [#4096](electron/forge#4096) - fix(template): add `private: true` by [@erickzhao](https://github.com/erickzhao) in [#4103](electron/forge#4103) - test: use verdaccio for e2e init testing by [@erickzhao](https://github.com/erickzhao) in [#4100](electron/forge#4100) - fix: interactive mode should proxy signals by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4102](electron/forge#4102) - chore: remove `pre-push` hook by [@erickzhao](https://github.com/erickzhao) in [#4117](electron/forge#4117) - test: use verdaccio in more `init` cases by [@erickzhao](https://github.com/erickzhao) in [#4119](electron/forge#4119) - feat(init)!: add `--package-manager` flag by [@erickzhao](https://github.com/erickzhao) in [#4107](electron/forge#4107) - fix: apply correct version bump commit title by [@erickzhao](https://github.com/erickzhao) in [#4122](electron/forge#4122) - chore: bump version to 8.0.0-alpha.4 by [@erickzhao](https://github.com/erickzhao) in [#4131](electron/forge#4131) - fix(template): modernize eslint deps by [@erickzhao](https://github.com/erickzhao) in [#4132](electron/forge#4132) - feat!: Node 22 + ESM by [@erickzhao](https://github.com/erickzhao) in [#4059](electron/forge#4059) - chore: add local claude code settings to `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4158](electron/forge#4158) - build: isolate yarn cache when running verdaccio by [@erickzhao](https://github.com/erickzhao) in [#4161](electron/forge#4161) - feat(create-electron-app)!: move `init` and `import` out of core by [@erickzhao](https://github.com/erickzhao) in [#4148](electron/forge#4148) - perf(plugin-vite): run production builds in isolated subprocesses by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4163](electron/forge#4163) - fix(plugin-vite): improve child logging by [@erickzhao](https://github.com/erickzhao) in [#4165](electron/forge#4165) - build: replace eslint with oxlint by [@erickzhao](https://github.com/erickzhao) in [#4169](electron/forge#4169) - chore: bump version to 8.0.0-alpha.5 by [@erickzhao](https://github.com/erickzhao) in [#4173](electron/forge#4173) - fix: prune final `require` calls by [@erickzhao](https://github.com/erickzhao) in [#4176](electron/forge#4176) - chore: bump version to 8.0.0-alpha.6 by [@erickzhao](https://github.com/erickzhao) in [#4177](electron/forge#4177) - build(deps): remove unused `minimist` dep by [@erickzhao](https://github.com/erickzhao) in [#4171](electron/forge#4171) - chore: remove additional eslint references by [@erickzhao](https://github.com/erickzhao) in [#4178](electron/forge#4178) - ci: upgrade `actions/*` to latest by [@erickzhao](https://github.com/erickzhao) in [#4179](electron/forge#4179) - feat(package): API returns result by [@erickzhao](https://github.com/erickzhao) in [#4172](electron/forge#4172) - build(deps): update transient dependencies by [@erickzhao](https://github.com/erickzhao) in [#4182](electron/forge#4182) - feat(template): use `moduleResolution: bundler` by [@erickzhao](https://github.com/erickzhao) in [#4175](electron/forge#4175) - build: patch out lerna for verdaccio publish by [@erickzhao](https://github.com/erickzhao) in [#4185](electron/forge#4185) - build: add knip for dead code detection by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4190](electron/forge#4190) - refactor: replace got with native fetch API by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4189](electron/forge#4189) - chore: fix `got` deps in lockfile by [@erickzhao](https://github.com/erickzhao) in [#4191](electron/forge#4191) - chore: resolve dependabot security alerts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4204](electron/forge#4204) - fix(plugin-webpack): ESM-compatible imports by [@erickzhao](https://github.com/erickzhao) in [#4206](electron/forge#4206) - chore: forward-ports by [@erickzhao](https://github.com/erickzhao) in [#4205](electron/forge#4205) - feat(plugin-vite): upgrade vite 8 by [@0xlau](https://github.com/0xlau) in [#4167](electron/forge#4167) - chore: bump version to 8.0.0-alpha.7 by [@erickzhao](https://github.com/erickzhao) in [#4212](electron/forge#4212) - fix(plugin-vite): ignore .git directory in dev mode file watcher by [@erickzhao](https://github.com/erickzhao) in [#4213](electron/forge#4213) - fix(core): convert absolute file path to file URL in `locateElectronExecutable` by [@erikian](https://github.com/erikian) in [#4214](electron/forge#4214) - fix(init): ensure base tmpl scripts are added to `package.json` by [@erickzhao](https://github.com/erickzhao) in [#4215](electron/forge#4215) - fix: use `file://` URLs when dynamically importing local paths by [@erikian](https://github.com/erikian) in [#4217](electron/forge#4217) - fix: tracer exception when tracing forge v8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4220](electron/forge#4220) - feat(template): replace eslint/prettier with oxc.rs stack by [@erickzhao](https://github.com/erickzhao) in [#4186](electron/forge#4186) - feat(publisher-github)!: Github -> GitHub by [@erickzhao](https://github.com/erickzhao) in [#4224](electron/forge#4224) - refactor: replace fast-glob with built-in node:fs glob by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4227](electron/forge#4227) - fix(template): update `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4221](electron/forge#4221) - chore(template): remove stale `nodeIntegration` instructions by [@erickzhao](https://github.com/erickzhao) in [#4223](electron/forge#4223) - refactor(plugin-vite): use codeSplitting:false for preload by [@erickzhao](https://github.com/erickzhao) in [#4222](electron/forge#4222) - fix(maker-msix): ensure output has version and arch by [@erickzhao](https://github.com/erickzhao) in [#4225](electron/forge#4225) - fix(maker-msix): use path.basename(dir) for artifact by [@erickzhao](https://github.com/erickzhao) in [#4230](electron/forge#4230) - feat(plugin-vite): run main/preload dev builds in subprocess workers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4226](electron/forge#4226) - feat: add notarization support to MakerPKG by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4234](electron/forge#4234) - chore: bump version to 8.0.0-alpha.8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4235](electron/forge#4235) - chore: update dependencies to dedupe across child packages by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4236](electron/forge#4236) - build: delete stray `.eslintcache` file by [@erickzhao](https://github.com/erickzhao) in [#4237](electron/forge#4237) - fix: bump to [@electron/packager](https://github.com/electron/packager) and [@electron/get](https://github.com/electron/get) to drop 'got' transitive dep by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4239](electron/forge#4239) - fix(cli): allow pre-release package manager ranges by [@erickzhao](https://github.com/erickzhao) in [#4241](electron/forge#4241) - build(deps): TypeScript 6 + 7 by [@erickzhao](https://github.com/erickzhao) in [#4238](electron/forge#4238) - chore: replace chalk and log-symbols with Node.js built-in styleText by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4245](electron/forge#4245) - refactor: replace find-up dependency with internal implementation by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4248](electron/forge#4248) - fix(template-base): copy over `.oxfmtrc.json` for instantiation by [@erickzhao](https://github.com/erickzhao) in [#4256](electron/forge#4256) - chore: bump version to 8.0.0-alpha.9 by [@erickzhao](https://github.com/erickzhao) in [#4263](electron/forge#4263) - refactor: replace fs-extra with graceful-fs and native fs by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4250](electron/forge#4250) - fix(core): convert absolute paths to file URLs in importSearch by [@erickzhao](https://github.com/erickzhao) in [#4273](electron/forge#4273) - build: add `tsconfig.json` to `clean` script by [@erickzhao](https://github.com/erickzhao) in [#4272](electron/forge#4272) - refactor: inline filenamify utility to remove external dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4249](electron/forge#4249) - refactor(core-utils): inline parse-author and drop dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4251](electron/forge#4251) - feat(maker-dmg)!: write DMGs to platform/arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4275](electron/forge#4275) - build(deps): use electron-internal/extract-zip by [@erickzhao](https://github.com/erickzhao) in [#4285](electron/forge#4285) - chore: exclude git worktrees from tooling by [@erickzhao](https://github.com/erickzhao) in [#4286](electron/forge#4286) - fix(cli): detect TTY for interactive mode instead of hardcoding true by [@erickzhao](https://github.com/erickzhao) in [#4259](electron/forge#4259) - chore: bump version to 8.0.0-alpha.10 by [@erickzhao](https://github.com/erickzhao) in [#4289](electron/forge#4289) - ci: cancel stale in-progress runs on PR pushes by [@claude](https://github.com/claude)\[bot] in [#4297](electron/forge#4297) - feat(maker-msix): allow overriding output filename by [@claude](https://github.com/claude)\[bot] in [#4295](electron/forge#4295) - ci: fail required-ci when a dependency fails or is cancelled by [@claude](https://github.com/claude)\[bot] in [#4300](electron/forge#4300) - feat(maker): add typed copyright option for deb and rpm makers by [@claude](https://github.com/claude)\[bot] in [#4298](electron/forge#4298) - fix(create-electron-app): mark vite as experimental in bundler chooser by [@claude](https://github.com/claude)\[bot] in [#4307](electron/forge#4307) - feat(publisher-github): show byte-level asset upload progress by [@claude](https://github.com/claude)\[bot] in [#4304](electron/forge#4304) - build(deps): upgrade webpack-dev-server to v5.2.4 on next by [@claude](https://github.com/claude)\[bot] in [#4308](electron/forge#4308) - fix(core): disable concurrency for package subtasks by [@claude](https://github.com/claude)\[bot] in [#4309](electron/forge#4309) - ci: port zizmor audit hardening to next (backport of [#4200](electron/forge#4200)) by [@claude](https://github.com/claude)\[bot] in [#4310](electron/forge#4310) - feat: rename `publish` command to `release` by [@claude](https://github.com/claude)\[bot] in [#4305](electron/forge#4305) - test: add end-to-end tests for `create-electron-app` across all templates and package managers by [@erikian](https://github.com/erikian) in [#4218](electron/forge#4218) - test: retry temp folder removal for tests that spawn Electron by [@erikian](https://github.com/erikian) in [#4316](electron/forge#4316) - fix: avoid duplicate draft releases when publishing multiple dry runs (next) by [@claude](https://github.com/claude)\[bot] in [#4327](electron/forge#4327) - build: Yarn 4.18 and TypeScript 7 stable by [@SpacingBat3](https://github.com/SpacingBat3) in [#4322](electron/forge#4322) - fix(create-electron-app): surface dependency install failures during init by [@erickzhao](https://github.com/erickzhao) in [#4348](electron/forge#4348) - feat(plugin-vite): enable main process hot restart via exported API by [@erickzhao](https://github.com/erickzhao) in [#4346](electron/forge#4346) - test: apply the supply-chain age gate to npm and pnpm in Verdaccio tests by [@erickzhao](https://github.com/erickzhao) in [#4347](electron/forge#4347) - docs: import documentation from electron-forge-docs by [@erickzhao](https://github.com/erickzhao) in [#4345](electron/forge#4345) - fix(typedoc): documentation & API completeness fixes by [@SpacingBat3](https://github.com/SpacingBat3) in [#4321](electron/forge#4321) - feat(plugin-vite): support custom server host in renderer dev server URL by [@erickzhao](https://github.com/erickzhao) in [#4363](electron/forge#4363) - build(deps): bump lint-staged to 17.4.1 by [@claude](https://github.com/claude)\[bot] in [#4366](electron/forge#4366) - feat(template): unify JS/TS templates by [@erickzhao](https://github.com/erickzhao) in [#4229](electron/forge#4229) - test: remove orphaned e2e specs for deleted typescript template packages by [@erickzhao](https://github.com/erickzhao) in [#4374](electron/forge#4374) - ci: shard the slow tests and drop the dead node-gyp setup step by [@erickzhao](https://github.com/erickzhao) in [#4380](electron/forge#4380) - build(deps): bump @electron/\* and electron-installer-\* packages by [@erickzhao](https://github.com/erickzhao) in [#4379](electron/forge#4379) - fix(core): guard against archs dropped by Electron 44 (win32/ia32, linux/armv7l) by [@erickzhao](https://github.com/erickzhao) in [#4377](electron/forge#4377) - feat(plugin-vite): graduate from experimental by [@erickzhao](https://github.com/erickzhao) in [#4382](electron/forge#4382) - feat(maker-pkg)!: write PKGs to arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4383](electron/forge#4383) - test(core): stub packager arch list in the dropped-arch warning test by [@erickzhao](https://github.com/erickzhao) in [#4384](electron/forge#4384) - chore: remove Discord links by [@erickzhao](https://github.com/erickzhao) in [#4378](electron/forge#4378) - chore(deps)!: upgrade listr2 to v11 by [@erickzhao](https://github.com/erickzhao) in [#4375](electron/forge#4375) - ci: skip the test jobs on docs-only changes by [@claude](https://github.com/claude)\[bot] in [#4387](electron/forge#4387) - test: add unit coverage for maker-appx and maker-msix make() by [@claude](https://github.com/claude)\[bot] in [#4388](electron/forge#4388) - feat(bundlers)!: emit main and preload bundles as .cjs by [@erickzhao](https://github.com/erickzhao) in [#4393](electron/forge#4393) - feat(plugin-webpack): render compiler output in the terminal with an ink multi-logger by [@claude](https://github.com/claude)\[bot] in [#4389](electron/forge#4389) - build: stop lint-staged failing on oxfmt-ignored files by [@erickzhao](https://github.com/erickzhao) in [#4396](electron/forge#4396) - fix(core): resolve the Forge config once per command by [@erickzhao](https://github.com/erickzhao) in [#4394](electron/forge#4394) - ci: prepare `next` for promotion to `main` as Forge 8 by [@erickzhao](https://github.com/erickzhao) in [#4381](electron/forge#4381) - ci: forward-port GHA improvements from 7.x by [@claude](https://github.com/claude)\[bot] in [#4401](electron/forge#4401) - fix(template-base): accept partial yarn versions when initializing by [@erickzhao](https://github.com/erickzhao) in [#4403](electron/forge#4403) - feat!: replace `release --from-dry-run` with `--from-make`, and `make --skip-package` with `--from-package` by [@erickzhao](https://github.com/erickzhao) in [#4395](electron/forge#4395) - build: bump [@electron/lint-roller](https://github.com/electron/lint-roller) to ^4.0.0 by [@claude](https://github.com/claude)\[bot] in [#4404](electron/forge#4404) - fix(template-vite): use .mts for Vite configs in the TypeScript variant by [@erickzhao](https://github.com/erickzhao) in [#4406](electron/forge#4406) - fix(template): typecheck root-level config files by [@erickzhao](https://github.com/erickzhao) in [#4407](electron/forge#4407) - build(deps): bump vulnerable transitive and direct dependencies by [@erickzhao](https://github.com/erickzhao) in [#4408](electron/forge#4408) - build(deps): upgrade Electron to 44.4.3 by [@erickzhao](https://github.com/erickzhao) in [#4410](electron/forge#4410) - docs: add AGENTS.md guidance for AI coding agents by [@erickzhao](https://github.com/erickzhao) in [#4416](electron/forge#4416) - refactor(maker-appx)!: reimplement as a legacy wrapper over the MSIX maker by [@claude](https://github.com/claude)\[bot] in [#4392](electron/forge#4392) - chore: bump version to 8.0.0 by [@claude](https://github.com/claude)\[bot] in [#4425](electron/forge#4425) - chore: bump version to 8.0.1 by [@claude](https://github.com/claude)\[bot] in [#4426](electron/forge#4426) ##### New Contributors - [@0xlau](https://github.com/0xlau) made their first contribution in [#4167](electron/forge#4167) **Full Changelog**: <electron/forge@v7.10.2...v8.0.1> ##### [v8.0.0](electron/forge@v7.11.2...40b4adf)
##### [v8.0.1](https://github.com/electron/forge/releases/tag/v8.0.1) ##### What's Changed - build: Yarn 4 CI hardening by [@erickzhao](https://github.com/erickzhao) in [#4028](electron/forge#4028) - feat(init): add `--electron-version` flag by [@erickzhao](https://github.com/erickzhao) in [#4037](electron/forge#4037) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4036](electron/forge#4036) - feat: expose artifact version to static publishers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4033](electron/forge#4033) - fix(publisher-gcs): do not gzip artifacts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4034](electron/forge#4034) - chore: update `node-abi` to latest by [@erickzhao](https://github.com/erickzhao) in [#4046](electron/forge#4046) - build(deps): bump brace-expansion from 1.1.11 to 1.1.12 by [@dependabot](https://github.com/dependabot)\[bot] in [#4047](electron/forge#4047) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4049](electron/forge#4049) - build: remove electronegativity plugin by [@erickzhao](https://github.com/erickzhao) in [#4053](electron/forge#4053) - test(fuses): use local modules instead of `initLink` by [@erickzhao](https://github.com/erickzhao) in [#4057](electron/forge#4057) - chore: use yarn `workspace:*` cross-references by [@erickzhao](https://github.com/erickzhao) in [#4056](electron/forge#4056) - chore: add eslint config change to `.git-blame-ignore-revs` by [@erickzhao](https://github.com/erickzhao) in [#4062](electron/forge#4062) - feat(core)!: remove global module templates by [@erickzhao](https://github.com/erickzhao) in [#4065](electron/forge#4065) - ci: set up npm trusted publishing by [@erickzhao](https://github.com/erickzhao) in [#4070](electron/forge#4070) - chore: bump version to 8.0.0-alpha.1 by [@erickzhao](https://github.com/erickzhao) in [#4072](electron/forge#4072) - build: target "next" branch in gh release create by [@VerteDinde](https://github.com/VerteDinde) in [#4074](electron/forge#4074) - chore: bump version to 8.0.0-alpha.3 by [@VerteDinde](https://github.com/VerteDinde) in [#4075](electron/forge#4075) - test: fix slow tests on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4076](electron/forge#4076) - build: improve version + publish flow by [@erickzhao](https://github.com/erickzhao) in [#4078](electron/forge#4078) - ci: use `.nvmrc` file for CI by [@erickzhao](https://github.com/erickzhao) in [#4081](electron/forge#4081) - test: move AssetRelocatorPatch tests to slow tests by [@erickzhao](https://github.com/erickzhao) in [#4080](electron/forge#4080) - feat(import)!: remove Forge 5 import code by [@erickzhao](https://github.com/erickzhao) in [#4083](electron/forge#4083) - feat(core)!: remove rechoir + lodash templates from config loader by [@erickzhao](https://github.com/erickzhao) in [#4066](electron/forge#4066) - ci: optimize Windows builds with faster D:\ drive by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4038](electron/forge#4038) - test: upgrade to Vitest 4 by [@erickzhao](https://github.com/erickzhao) in [#4079](electron/forge#4079) - build(deps): replace `ts-node` with `tsx` by [@erickzhao](https://github.com/erickzhao) in [#4085](electron/forge#4085) - build(deps): update lint-roller to latest major version by [@erickzhao](https://github.com/erickzhao) in [#4086](electron/forge#4086) - fix(maker-wix): set default arch by [@ShGKme](https://github.com/ShGKme) in [#3859](electron/forge#3859) - fix(core): prevent duplicate app restarts when typing 'rs' multiple times by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4089](electron/forge#4089) - ci: run post-merge on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4090](electron/forge#4090) - test(slow): test api against `file:` protocol fixtures by [@erickzhao](https://github.com/erickzhao) in [#4087](electron/forge#4087) - chore: fix formatting by [@erickzhao](https://github.com/erickzhao) in [#4091](electron/forge#4091) - test(slow): simplify bootstrapping tests by [@erickzhao](https://github.com/erickzhao) in [#4096](electron/forge#4096) - fix(template): add `private: true` by [@erickzhao](https://github.com/erickzhao) in [#4103](electron/forge#4103) - test: use verdaccio for e2e init testing by [@erickzhao](https://github.com/erickzhao) in [#4100](electron/forge#4100) - fix: interactive mode should proxy signals by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4102](electron/forge#4102) - chore: remove `pre-push` hook by [@erickzhao](https://github.com/erickzhao) in [#4117](electron/forge#4117) - test: use verdaccio in more `init` cases by [@erickzhao](https://github.com/erickzhao) in [#4119](electron/forge#4119) - feat(init)!: add `--package-manager` flag by [@erickzhao](https://github.com/erickzhao) in [#4107](electron/forge#4107) - fix: apply correct version bump commit title by [@erickzhao](https://github.com/erickzhao) in [#4122](electron/forge#4122) - chore: bump version to 8.0.0-alpha.4 by [@erickzhao](https://github.com/erickzhao) in [#4131](electron/forge#4131) - fix(template): modernize eslint deps by [@erickzhao](https://github.com/erickzhao) in [#4132](electron/forge#4132) - feat!: Node 22 + ESM by [@erickzhao](https://github.com/erickzhao) in [#4059](electron/forge#4059) - chore: add local claude code settings to `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4158](electron/forge#4158) - build: isolate yarn cache when running verdaccio by [@erickzhao](https://github.com/erickzhao) in [#4161](electron/forge#4161) - feat(create-electron-app)!: move `init` and `import` out of core by [@erickzhao](https://github.com/erickzhao) in [#4148](electron/forge#4148) - perf(plugin-vite): run production builds in isolated subprocesses by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4163](electron/forge#4163) - fix(plugin-vite): improve child logging by [@erickzhao](https://github.com/erickzhao) in [#4165](electron/forge#4165) - build: replace eslint with oxlint by [@erickzhao](https://github.com/erickzhao) in [#4169](electron/forge#4169) - chore: bump version to 8.0.0-alpha.5 by [@erickzhao](https://github.com/erickzhao) in [#4173](electron/forge#4173) - fix: prune final `require` calls by [@erickzhao](https://github.com/erickzhao) in [#4176](electron/forge#4176) - chore: bump version to 8.0.0-alpha.6 by [@erickzhao](https://github.com/erickzhao) in [#4177](electron/forge#4177) - build(deps): remove unused `minimist` dep by [@erickzhao](https://github.com/erickzhao) in [#4171](electron/forge#4171) - chore: remove additional eslint references by [@erickzhao](https://github.com/erickzhao) in [#4178](electron/forge#4178) - ci: upgrade `actions/*` to latest by [@erickzhao](https://github.com/erickzhao) in [#4179](electron/forge#4179) - feat(package): API returns result by [@erickzhao](https://github.com/erickzhao) in [#4172](electron/forge#4172) - build(deps): update transient dependencies by [@erickzhao](https://github.com/erickzhao) in [#4182](electron/forge#4182) - feat(template): use `moduleResolution: bundler` by [@erickzhao](https://github.com/erickzhao) in [#4175](electron/forge#4175) - build: patch out lerna for verdaccio publish by [@erickzhao](https://github.com/erickzhao) in [#4185](electron/forge#4185) - build: add knip for dead code detection by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4190](electron/forge#4190) - refactor: replace got with native fetch API by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4189](electron/forge#4189) - chore: fix `got` deps in lockfile by [@erickzhao](https://github.com/erickzhao) in [#4191](electron/forge#4191) - chore: resolve dependabot security alerts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4204](electron/forge#4204) - fix(plugin-webpack): ESM-compatible imports by [@erickzhao](https://github.com/erickzhao) in [#4206](electron/forge#4206) - chore: forward-ports by [@erickzhao](https://github.com/erickzhao) in [#4205](electron/forge#4205) - feat(plugin-vite): upgrade vite 8 by [@0xlau](https://github.com/0xlau) in [#4167](electron/forge#4167) - chore: bump version to 8.0.0-alpha.7 by [@erickzhao](https://github.com/erickzhao) in [#4212](electron/forge#4212) - fix(plugin-vite): ignore .git directory in dev mode file watcher by [@erickzhao](https://github.com/erickzhao) in [#4213](electron/forge#4213) - fix(core): convert absolute file path to file URL in `locateElectronExecutable` by [@erikian](https://github.com/erikian) in [#4214](electron/forge#4214) - fix(init): ensure base tmpl scripts are added to `package.json` by [@erickzhao](https://github.com/erickzhao) in [#4215](electron/forge#4215) - fix: use `file://` URLs when dynamically importing local paths by [@erikian](https://github.com/erikian) in [#4217](electron/forge#4217) - fix: tracer exception when tracing forge v8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4220](electron/forge#4220) - feat(template): replace eslint/prettier with oxc.rs stack by [@erickzhao](https://github.com/erickzhao) in [#4186](electron/forge#4186) - feat(publisher-github)!: Github -> GitHub by [@erickzhao](https://github.com/erickzhao) in [#4224](electron/forge#4224) - refactor: replace fast-glob with built-in node:fs glob by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4227](electron/forge#4227) - fix(template): update `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4221](electron/forge#4221) - chore(template): remove stale `nodeIntegration` instructions by [@erickzhao](https://github.com/erickzhao) in [#4223](electron/forge#4223) - refactor(plugin-vite): use codeSplitting:false for preload by [@erickzhao](https://github.com/erickzhao) in [#4222](electron/forge#4222) - fix(maker-msix): ensure output has version and arch by [@erickzhao](https://github.com/erickzhao) in [#4225](electron/forge#4225) - fix(maker-msix): use path.basename(dir) for artifact by [@erickzhao](https://github.com/erickzhao) in [#4230](electron/forge#4230) - feat(plugin-vite): run main/preload dev builds in subprocess workers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4226](electron/forge#4226) - feat: add notarization support to MakerPKG by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4234](electron/forge#4234) - chore: bump version to 8.0.0-alpha.8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4235](electron/forge#4235) - chore: update dependencies to dedupe across child packages by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4236](electron/forge#4236) - build: delete stray `.eslintcache` file by [@erickzhao](https://github.com/erickzhao) in [#4237](electron/forge#4237) - fix: bump to [@electron/packager](https://github.com/electron/packager) and [@electron/get](https://github.com/electron/get) to drop 'got' transitive dep by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4239](electron/forge#4239) - fix(cli): allow pre-release package manager ranges by [@erickzhao](https://github.com/erickzhao) in [#4241](electron/forge#4241) - build(deps): TypeScript 6 + 7 by [@erickzhao](https://github.com/erickzhao) in [#4238](electron/forge#4238) - chore: replace chalk and log-symbols with Node.js built-in styleText by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4245](electron/forge#4245) - refactor: replace find-up dependency with internal implementation by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4248](electron/forge#4248) - fix(template-base): copy over `.oxfmtrc.json` for instantiation by [@erickzhao](https://github.com/erickzhao) in [#4256](electron/forge#4256) - chore: bump version to 8.0.0-alpha.9 by [@erickzhao](https://github.com/erickzhao) in [#4263](electron/forge#4263) - refactor: replace fs-extra with graceful-fs and native fs by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4250](electron/forge#4250) - fix(core): convert absolute paths to file URLs in importSearch by [@erickzhao](https://github.com/erickzhao) in [#4273](electron/forge#4273) - build: add `tsconfig.json` to `clean` script by [@erickzhao](https://github.com/erickzhao) in [#4272](electron/forge#4272) - refactor: inline filenamify utility to remove external dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4249](electron/forge#4249) - refactor(core-utils): inline parse-author and drop dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4251](electron/forge#4251) - feat(maker-dmg)!: write DMGs to platform/arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4275](electron/forge#4275) - build(deps): use electron-internal/extract-zip by [@erickzhao](https://github.com/erickzhao) in [#4285](electron/forge#4285) - chore: exclude git worktrees from tooling by [@erickzhao](https://github.com/erickzhao) in [#4286](electron/forge#4286) - fix(cli): detect TTY for interactive mode instead of hardcoding true by [@erickzhao](https://github.com/erickzhao) in [#4259](electron/forge#4259) - chore: bump version to 8.0.0-alpha.10 by [@erickzhao](https://github.com/erickzhao) in [#4289](electron/forge#4289) - ci: cancel stale in-progress runs on PR pushes by [@claude](https://github.com/claude)\[bot] in [#4297](electron/forge#4297) - feat(maker-msix): allow overriding output filename by [@claude](https://github.com/claude)\[bot] in [#4295](electron/forge#4295) - ci: fail required-ci when a dependency fails or is cancelled by [@claude](https://github.com/claude)\[bot] in [#4300](electron/forge#4300) - feat(maker): add typed copyright option for deb and rpm makers by [@claude](https://github.com/claude)\[bot] in [#4298](electron/forge#4298) - fix(create-electron-app): mark vite as experimental in bundler chooser by [@claude](https://github.com/claude)\[bot] in [#4307](electron/forge#4307) - feat(publisher-github): show byte-level asset upload progress by [@claude](https://github.com/claude)\[bot] in [#4304](electron/forge#4304) - build(deps): upgrade webpack-dev-server to v5.2.4 on next by [@claude](https://github.com/claude)\[bot] in [#4308](electron/forge#4308) - fix(core): disable concurrency for package subtasks by [@claude](https://github.com/claude)\[bot] in [#4309](electron/forge#4309) - ci: port zizmor audit hardening to next (backport of [#4200](electron/forge#4200)) by [@claude](https://github.com/claude)\[bot] in [#4310](electron/forge#4310) - feat: rename `publish` command to `release` by [@claude](https://github.com/claude)\[bot] in [#4305](electron/forge#4305) - test: add end-to-end tests for `create-electron-app` across all templates and package managers by [@erikian](https://github.com/erikian) in [#4218](electron/forge#4218) - test: retry temp folder removal for tests that spawn Electron by [@erikian](https://github.com/erikian) in [#4316](electron/forge#4316) - fix: avoid duplicate draft releases when publishing multiple dry runs (next) by [@claude](https://github.com/claude)\[bot] in [#4327](electron/forge#4327) - build: Yarn 4.18 and TypeScript 7 stable by [@SpacingBat3](https://github.com/SpacingBat3) in [#4322](electron/forge#4322) - fix(create-electron-app): surface dependency install failures during init by [@erickzhao](https://github.com/erickzhao) in [#4348](electron/forge#4348) - feat(plugin-vite): enable main process hot restart via exported API by [@erickzhao](https://github.com/erickzhao) in [#4346](electron/forge#4346) - test: apply the supply-chain age gate to npm and pnpm in Verdaccio tests by [@erickzhao](https://github.com/erickzhao) in [#4347](electron/forge#4347) - docs: import documentation from electron-forge-docs by [@erickzhao](https://github.com/erickzhao) in [#4345](electron/forge#4345) - fix(typedoc): documentation & API completeness fixes by [@SpacingBat3](https://github.com/SpacingBat3) in [#4321](electron/forge#4321) - feat(plugin-vite): support custom server host in renderer dev server URL by [@erickzhao](https://github.com/erickzhao) in [#4363](electron/forge#4363) - build(deps): bump lint-staged to 17.4.1 by [@claude](https://github.com/claude)\[bot] in [#4366](electron/forge#4366) - feat(template): unify JS/TS templates by [@erickzhao](https://github.com/erickzhao) in [#4229](electron/forge#4229) - test: remove orphaned e2e specs for deleted typescript template packages by [@erickzhao](https://github.com/erickzhao) in [#4374](electron/forge#4374) - ci: shard the slow tests and drop the dead node-gyp setup step by [@erickzhao](https://github.com/erickzhao) in [#4380](electron/forge#4380) - build(deps): bump @electron/\* and electron-installer-\* packages by [@erickzhao](https://github.com/erickzhao) in [#4379](electron/forge#4379) - fix(core): guard against archs dropped by Electron 44 (win32/ia32, linux/armv7l) by [@erickzhao](https://github.com/erickzhao) in [#4377](electron/forge#4377) - feat(plugin-vite): graduate from experimental by [@erickzhao](https://github.com/erickzhao) in [#4382](electron/forge#4382) - feat(maker-pkg)!: write PKGs to arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4383](electron/forge#4383) - test(core): stub packager arch list in the dropped-arch warning test by [@erickzhao](https://github.com/erickzhao) in [#4384](electron/forge#4384) - chore: remove Discord links by [@erickzhao](https://github.com/erickzhao) in [#4378](electron/forge#4378) - chore(deps)!: upgrade listr2 to v11 by [@erickzhao](https://github.com/erickzhao) in [#4375](electron/forge#4375) - ci: skip the test jobs on docs-only changes by [@claude](https://github.com/claude)\[bot] in [#4387](electron/forge#4387) - test: add unit coverage for maker-appx and maker-msix make() by [@claude](https://github.com/claude)\[bot] in [#4388](electron/forge#4388) - feat(bundlers)!: emit main and preload bundles as .cjs by [@erickzhao](https://github.com/erickzhao) in [#4393](electron/forge#4393) - feat(plugin-webpack): render compiler output in the terminal with an ink multi-logger by [@claude](https://github.com/claude)\[bot] in [#4389](electron/forge#4389) - build: stop lint-staged failing on oxfmt-ignored files by [@erickzhao](https://github.com/erickzhao) in [#4396](electron/forge#4396) - fix(core): resolve the Forge config once per command by [@erickzhao](https://github.com/erickzhao) in [#4394](electron/forge#4394) - ci: prepare `next` for promotion to `main` as Forge 8 by [@erickzhao](https://github.com/erickzhao) in [#4381](electron/forge#4381) - ci: forward-port GHA improvements from 7.x by [@claude](https://github.com/claude)\[bot] in [#4401](electron/forge#4401) - fix(template-base): accept partial yarn versions when initializing by [@erickzhao](https://github.com/erickzhao) in [#4403](electron/forge#4403) - feat!: replace `release --from-dry-run` with `--from-make`, and `make --skip-package` with `--from-package` by [@erickzhao](https://github.com/erickzhao) in [#4395](electron/forge#4395) - build: bump [@electron/lint-roller](https://github.com/electron/lint-roller) to ^4.0.0 by [@claude](https://github.com/claude)\[bot] in [#4404](electron/forge#4404) - fix(template-vite): use .mts for Vite configs in the TypeScript variant by [@erickzhao](https://github.com/erickzhao) in [#4406](electron/forge#4406) - fix(template): typecheck root-level config files by [@erickzhao](https://github.com/erickzhao) in [#4407](electron/forge#4407) - build(deps): bump vulnerable transitive and direct dependencies by [@erickzhao](https://github.com/erickzhao) in [#4408](electron/forge#4408) - build(deps): upgrade Electron to 44.4.3 by [@erickzhao](https://github.com/erickzhao) in [#4410](electron/forge#4410) - docs: add AGENTS.md guidance for AI coding agents by [@erickzhao](https://github.com/erickzhao) in [#4416](electron/forge#4416) - refactor(maker-appx)!: reimplement as a legacy wrapper over the MSIX maker by [@claude](https://github.com/claude)\[bot] in [#4392](electron/forge#4392) - chore: bump version to 8.0.0 by [@claude](https://github.com/claude)\[bot] in [#4425](electron/forge#4425) - chore: bump version to 8.0.1 by [@claude](https://github.com/claude)\[bot] in [#4426](electron/forge#4426) ##### New Contributors - [@0xlau](https://github.com/0xlau) made their first contribution in [#4167](electron/forge#4167) **Full Changelog**: <electron/forge@v7.10.2...v8.0.1> ##### [v8.0.0](electron/forge@v7.11.2...40b4adf)
##### [v8.0.1](https://github.com/electron/forge/releases/tag/v8.0.1) ##### What's Changed - build: Yarn 4 CI hardening by [@erickzhao](https://github.com/erickzhao) in [#4028](electron/forge#4028) - feat(init): add `--electron-version` flag by [@erickzhao](https://github.com/erickzhao) in [#4037](electron/forge#4037) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4036](electron/forge#4036) - feat: expose artifact version to static publishers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4033](electron/forge#4033) - fix(publisher-gcs): do not gzip artifacts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4034](electron/forge#4034) - chore: update `node-abi` to latest by [@erickzhao](https://github.com/erickzhao) in [#4046](electron/forge#4046) - build(deps): bump brace-expansion from 1.1.11 to 1.1.12 by [@dependabot](https://github.com/dependabot)\[bot] in [#4047](electron/forge#4047) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4049](electron/forge#4049) - build: remove electronegativity plugin by [@erickzhao](https://github.com/erickzhao) in [#4053](electron/forge#4053) - test(fuses): use local modules instead of `initLink` by [@erickzhao](https://github.com/erickzhao) in [#4057](electron/forge#4057) - chore: use yarn `workspace:*` cross-references by [@erickzhao](https://github.com/erickzhao) in [#4056](electron/forge#4056) - chore: add eslint config change to `.git-blame-ignore-revs` by [@erickzhao](https://github.com/erickzhao) in [#4062](electron/forge#4062) - feat(core)!: remove global module templates by [@erickzhao](https://github.com/erickzhao) in [#4065](electron/forge#4065) - ci: set up npm trusted publishing by [@erickzhao](https://github.com/erickzhao) in [#4070](electron/forge#4070) - chore: bump version to 8.0.0-alpha.1 by [@erickzhao](https://github.com/erickzhao) in [#4072](electron/forge#4072) - build: target "next" branch in gh release create by [@VerteDinde](https://github.com/VerteDinde) in [#4074](electron/forge#4074) - chore: bump version to 8.0.0-alpha.3 by [@VerteDinde](https://github.com/VerteDinde) in [#4075](electron/forge#4075) - test: fix slow tests on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4076](electron/forge#4076) - build: improve version + publish flow by [@erickzhao](https://github.com/erickzhao) in [#4078](electron/forge#4078) - ci: use `.nvmrc` file for CI by [@erickzhao](https://github.com/erickzhao) in [#4081](electron/forge#4081) - test: move AssetRelocatorPatch tests to slow tests by [@erickzhao](https://github.com/erickzhao) in [#4080](electron/forge#4080) - feat(import)!: remove Forge 5 import code by [@erickzhao](https://github.com/erickzhao) in [#4083](electron/forge#4083) - feat(core)!: remove rechoir + lodash templates from config loader by [@erickzhao](https://github.com/erickzhao) in [#4066](electron/forge#4066) - ci: optimize Windows builds with faster D:\ drive by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4038](electron/forge#4038) - test: upgrade to Vitest 4 by [@erickzhao](https://github.com/erickzhao) in [#4079](electron/forge#4079) - build(deps): replace `ts-node` with `tsx` by [@erickzhao](https://github.com/erickzhao) in [#4085](electron/forge#4085) - build(deps): update lint-roller to latest major version by [@erickzhao](https://github.com/erickzhao) in [#4086](electron/forge#4086) - fix(maker-wix): set default arch by [@ShGKme](https://github.com/ShGKme) in [#3859](electron/forge#3859) - fix(core): prevent duplicate app restarts when typing 'rs' multiple times by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4089](electron/forge#4089) - ci: run post-merge on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4090](electron/forge#4090) - test(slow): test api against `file:` protocol fixtures by [@erickzhao](https://github.com/erickzhao) in [#4087](electron/forge#4087) - chore: fix formatting by [@erickzhao](https://github.com/erickzhao) in [#4091](electron/forge#4091) - test(slow): simplify bootstrapping tests by [@erickzhao](https://github.com/erickzhao) in [#4096](electron/forge#4096) - fix(template): add `private: true` by [@erickzhao](https://github.com/erickzhao) in [#4103](electron/forge#4103) - test: use verdaccio for e2e init testing by [@erickzhao](https://github.com/erickzhao) in [#4100](electron/forge#4100) - fix: interactive mode should proxy signals by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4102](electron/forge#4102) - chore: remove `pre-push` hook by [@erickzhao](https://github.com/erickzhao) in [#4117](electron/forge#4117) - test: use verdaccio in more `init` cases by [@erickzhao](https://github.com/erickzhao) in [#4119](electron/forge#4119) - feat(init)!: add `--package-manager` flag by [@erickzhao](https://github.com/erickzhao) in [#4107](electron/forge#4107) - fix: apply correct version bump commit title by [@erickzhao](https://github.com/erickzhao) in [#4122](electron/forge#4122) - chore: bump version to 8.0.0-alpha.4 by [@erickzhao](https://github.com/erickzhao) in [#4131](electron/forge#4131) - fix(template): modernize eslint deps by [@erickzhao](https://github.com/erickzhao) in [#4132](electron/forge#4132) - feat!: Node 22 + ESM by [@erickzhao](https://github.com/erickzhao) in [#4059](electron/forge#4059) - chore: add local claude code settings to `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4158](electron/forge#4158) - build: isolate yarn cache when running verdaccio by [@erickzhao](https://github.com/erickzhao) in [#4161](electron/forge#4161) - feat(create-electron-app)!: move `init` and `import` out of core by [@erickzhao](https://github.com/erickzhao) in [#4148](electron/forge#4148) - perf(plugin-vite): run production builds in isolated subprocesses by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4163](electron/forge#4163) - fix(plugin-vite): improve child logging by [@erickzhao](https://github.com/erickzhao) in [#4165](electron/forge#4165) - build: replace eslint with oxlint by [@erickzhao](https://github.com/erickzhao) in [#4169](electron/forge#4169) - chore: bump version to 8.0.0-alpha.5 by [@erickzhao](https://github.com/erickzhao) in [#4173](electron/forge#4173) - fix: prune final `require` calls by [@erickzhao](https://github.com/erickzhao) in [#4176](electron/forge#4176) - chore: bump version to 8.0.0-alpha.6 by [@erickzhao](https://github.com/erickzhao) in [#4177](electron/forge#4177) - build(deps): remove unused `minimist` dep by [@erickzhao](https://github.com/erickzhao) in [#4171](electron/forge#4171) - chore: remove additional eslint references by [@erickzhao](https://github.com/erickzhao) in [#4178](electron/forge#4178) - ci: upgrade `actions/*` to latest by [@erickzhao](https://github.com/erickzhao) in [#4179](electron/forge#4179) - feat(package): API returns result by [@erickzhao](https://github.com/erickzhao) in [#4172](electron/forge#4172) - build(deps): update transient dependencies by [@erickzhao](https://github.com/erickzhao) in [#4182](electron/forge#4182) - feat(template): use `moduleResolution: bundler` by [@erickzhao](https://github.com/erickzhao) in [#4175](electron/forge#4175) - build: patch out lerna for verdaccio publish by [@erickzhao](https://github.com/erickzhao) in [#4185](electron/forge#4185) - build: add knip for dead code detection by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4190](electron/forge#4190) - refactor: replace got with native fetch API by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4189](electron/forge#4189) - chore: fix `got` deps in lockfile by [@erickzhao](https://github.com/erickzhao) in [#4191](electron/forge#4191) - chore: resolve dependabot security alerts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4204](electron/forge#4204) - fix(plugin-webpack): ESM-compatible imports by [@erickzhao](https://github.com/erickzhao) in [#4206](electron/forge#4206) - chore: forward-ports by [@erickzhao](https://github.com/erickzhao) in [#4205](electron/forge#4205) - feat(plugin-vite): upgrade vite 8 by [@0xlau](https://github.com/0xlau) in [#4167](electron/forge#4167) - chore: bump version to 8.0.0-alpha.7 by [@erickzhao](https://github.com/erickzhao) in [#4212](electron/forge#4212) - fix(plugin-vite): ignore .git directory in dev mode file watcher by [@erickzhao](https://github.com/erickzhao) in [#4213](electron/forge#4213) - fix(core): convert absolute file path to file URL in `locateElectronExecutable` by [@erikian](https://github.com/erikian) in [#4214](electron/forge#4214) - fix(init): ensure base tmpl scripts are added to `package.json` by [@erickzhao](https://github.com/erickzhao) in [#4215](electron/forge#4215) - fix: use `file://` URLs when dynamically importing local paths by [@erikian](https://github.com/erikian) in [#4217](electron/forge#4217) - fix: tracer exception when tracing forge v8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4220](electron/forge#4220) - feat(template): replace eslint/prettier with oxc.rs stack by [@erickzhao](https://github.com/erickzhao) in [#4186](electron/forge#4186) - feat(publisher-github)!: Github -> GitHub by [@erickzhao](https://github.com/erickzhao) in [#4224](electron/forge#4224) - refactor: replace fast-glob with built-in node:fs glob by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4227](electron/forge#4227) - fix(template): update `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4221](electron/forge#4221) - chore(template): remove stale `nodeIntegration` instructions by [@erickzhao](https://github.com/erickzhao) in [#4223](electron/forge#4223) - refactor(plugin-vite): use codeSplitting:false for preload by [@erickzhao](https://github.com/erickzhao) in [#4222](electron/forge#4222) - fix(maker-msix): ensure output has version and arch by [@erickzhao](https://github.com/erickzhao) in [#4225](electron/forge#4225) - fix(maker-msix): use path.basename(dir) for artifact by [@erickzhao](https://github.com/erickzhao) in [#4230](electron/forge#4230) - feat(plugin-vite): run main/preload dev builds in subprocess workers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4226](electron/forge#4226) - feat: add notarization support to MakerPKG by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4234](electron/forge#4234) - chore: bump version to 8.0.0-alpha.8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4235](electron/forge#4235) - chore: update dependencies to dedupe across child packages by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4236](electron/forge#4236) - build: delete stray `.eslintcache` file by [@erickzhao](https://github.com/erickzhao) in [#4237](electron/forge#4237) - fix: bump to [@electron/packager](https://github.com/electron/packager) and [@electron/get](https://github.com/electron/get) to drop 'got' transitive dep by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4239](electron/forge#4239) - fix(cli): allow pre-release package manager ranges by [@erickzhao](https://github.com/erickzhao) in [#4241](electron/forge#4241) - build(deps): TypeScript 6 + 7 by [@erickzhao](https://github.com/erickzhao) in [#4238](electron/forge#4238) - chore: replace chalk and log-symbols with Node.js built-in styleText by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4245](electron/forge#4245) - refactor: replace find-up dependency with internal implementation by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4248](electron/forge#4248) - fix(template-base): copy over `.oxfmtrc.json` for instantiation by [@erickzhao](https://github.com/erickzhao) in [#4256](electron/forge#4256) - chore: bump version to 8.0.0-alpha.9 by [@erickzhao](https://github.com/erickzhao) in [#4263](electron/forge#4263) - refactor: replace fs-extra with graceful-fs and native fs by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4250](electron/forge#4250) - fix(core): convert absolute paths to file URLs in importSearch by [@erickzhao](https://github.com/erickzhao) in [#4273](electron/forge#4273) - build: add `tsconfig.json` to `clean` script by [@erickzhao](https://github.com/erickzhao) in [#4272](electron/forge#4272) - refactor: inline filenamify utility to remove external dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4249](electron/forge#4249) - refactor(core-utils): inline parse-author and drop dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4251](electron/forge#4251) - feat(maker-dmg)!: write DMGs to platform/arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4275](electron/forge#4275) - build(deps): use electron-internal/extract-zip by [@erickzhao](https://github.com/erickzhao) in [#4285](electron/forge#4285) - chore: exclude git worktrees from tooling by [@erickzhao](https://github.com/erickzhao) in [#4286](electron/forge#4286) - fix(cli): detect TTY for interactive mode instead of hardcoding true by [@erickzhao](https://github.com/erickzhao) in [#4259](electron/forge#4259) - chore: bump version to 8.0.0-alpha.10 by [@erickzhao](https://github.com/erickzhao) in [#4289](electron/forge#4289) - ci: cancel stale in-progress runs on PR pushes by [@claude](https://github.com/claude)\[bot] in [#4297](electron/forge#4297) - feat(maker-msix): allow overriding output filename by [@claude](https://github.com/claude)\[bot] in [#4295](electron/forge#4295) - ci: fail required-ci when a dependency fails or is cancelled by [@claude](https://github.com/claude)\[bot] in [#4300](electron/forge#4300) - feat(maker): add typed copyright option for deb and rpm makers by [@claude](https://github.com/claude)\[bot] in [#4298](electron/forge#4298) - fix(create-electron-app): mark vite as experimental in bundler chooser by [@claude](https://github.com/claude)\[bot] in [#4307](electron/forge#4307) - feat(publisher-github): show byte-level asset upload progress by [@claude](https://github.com/claude)\[bot] in [#4304](electron/forge#4304) - build(deps): upgrade webpack-dev-server to v5.2.4 on next by [@claude](https://github.com/claude)\[bot] in [#4308](electron/forge#4308) - fix(core): disable concurrency for package subtasks by [@claude](https://github.com/claude)\[bot] in [#4309](electron/forge#4309) - ci: port zizmor audit hardening to next (backport of [#4200](electron/forge#4200)) by [@claude](https://github.com/claude)\[bot] in [#4310](electron/forge#4310) - feat: rename `publish` command to `release` by [@claude](https://github.com/claude)\[bot] in [#4305](electron/forge#4305) - test: add end-to-end tests for `create-electron-app` across all templates and package managers by [@erikian](https://github.com/erikian) in [#4218](electron/forge#4218) - test: retry temp folder removal for tests that spawn Electron by [@erikian](https://github.com/erikian) in [#4316](electron/forge#4316) - fix: avoid duplicate draft releases when publishing multiple dry runs (next) by [@claude](https://github.com/claude)\[bot] in [#4327](electron/forge#4327) - build: Yarn 4.18 and TypeScript 7 stable by [@SpacingBat3](https://github.com/SpacingBat3) in [#4322](electron/forge#4322) - fix(create-electron-app): surface dependency install failures during init by [@erickzhao](https://github.com/erickzhao) in [#4348](electron/forge#4348) - feat(plugin-vite): enable main process hot restart via exported API by [@erickzhao](https://github.com/erickzhao) in [#4346](electron/forge#4346) - test: apply the supply-chain age gate to npm and pnpm in Verdaccio tests by [@erickzhao](https://github.com/erickzhao) in [#4347](electron/forge#4347) - docs: import documentation from electron-forge-docs by [@erickzhao](https://github.com/erickzhao) in [#4345](electron/forge#4345) - fix(typedoc): documentation & API completeness fixes by [@SpacingBat3](https://github.com/SpacingBat3) in [#4321](electron/forge#4321) - feat(plugin-vite): support custom server host in renderer dev server URL by [@erickzhao](https://github.com/erickzhao) in [#4363](electron/forge#4363) - build(deps): bump lint-staged to 17.4.1 by [@claude](https://github.com/claude)\[bot] in [#4366](electron/forge#4366) - feat(template): unify JS/TS templates by [@erickzhao](https://github.com/erickzhao) in [#4229](electron/forge#4229) - test: remove orphaned e2e specs for deleted typescript template packages by [@erickzhao](https://github.com/erickzhao) in [#4374](electron/forge#4374) - ci: shard the slow tests and drop the dead node-gyp setup step by [@erickzhao](https://github.com/erickzhao) in [#4380](electron/forge#4380) - build(deps): bump @electron/\* and electron-installer-\* packages by [@erickzhao](https://github.com/erickzhao) in [#4379](electron/forge#4379) - fix(core): guard against archs dropped by Electron 44 (win32/ia32, linux/armv7l) by [@erickzhao](https://github.com/erickzhao) in [#4377](electron/forge#4377) - feat(plugin-vite): graduate from experimental by [@erickzhao](https://github.com/erickzhao) in [#4382](electron/forge#4382) - feat(maker-pkg)!: write PKGs to arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4383](electron/forge#4383) - test(core): stub packager arch list in the dropped-arch warning test by [@erickzhao](https://github.com/erickzhao) in [#4384](electron/forge#4384) - chore: remove Discord links by [@erickzhao](https://github.com/erickzhao) in [#4378](electron/forge#4378) - chore(deps)!: upgrade listr2 to v11 by [@erickzhao](https://github.com/erickzhao) in [#4375](electron/forge#4375) - ci: skip the test jobs on docs-only changes by [@claude](https://github.com/claude)\[bot] in [#4387](electron/forge#4387) - test: add unit coverage for maker-appx and maker-msix make() by [@claude](https://github.com/claude)\[bot] in [#4388](electron/forge#4388) - feat(bundlers)!: emit main and preload bundles as .cjs by [@erickzhao](https://github.com/erickzhao) in [#4393](electron/forge#4393) - feat(plugin-webpack): render compiler output in the terminal with an ink multi-logger by [@claude](https://github.com/claude)\[bot] in [#4389](electron/forge#4389) - build: stop lint-staged failing on oxfmt-ignored files by [@erickzhao](https://github.com/erickzhao) in [#4396](electron/forge#4396) - fix(core): resolve the Forge config once per command by [@erickzhao](https://github.com/erickzhao) in [#4394](electron/forge#4394) - ci: prepare `next` for promotion to `main` as Forge 8 by [@erickzhao](https://github.com/erickzhao) in [#4381](electron/forge#4381) - ci: forward-port GHA improvements from 7.x by [@claude](https://github.com/claude)\[bot] in [#4401](electron/forge#4401) - fix(template-base): accept partial yarn versions when initializing by [@erickzhao](https://github.com/erickzhao) in [#4403](electron/forge#4403) - feat!: replace `release --from-dry-run` with `--from-make`, and `make --skip-package` with `--from-package` by [@erickzhao](https://github.com/erickzhao) in [#4395](electron/forge#4395) - build: bump [@electron/lint-roller](https://github.com/electron/lint-roller) to ^4.0.0 by [@claude](https://github.com/claude)\[bot] in [#4404](electron/forge#4404) - fix(template-vite): use .mts for Vite configs in the TypeScript variant by [@erickzhao](https://github.com/erickzhao) in [#4406](electron/forge#4406) - fix(template): typecheck root-level config files by [@erickzhao](https://github.com/erickzhao) in [#4407](electron/forge#4407) - build(deps): bump vulnerable transitive and direct dependencies by [@erickzhao](https://github.com/erickzhao) in [#4408](electron/forge#4408) - build(deps): upgrade Electron to 44.4.3 by [@erickzhao](https://github.com/erickzhao) in [#4410](electron/forge#4410) - docs: add AGENTS.md guidance for AI coding agents by [@erickzhao](https://github.com/erickzhao) in [#4416](electron/forge#4416) - refactor(maker-appx)!: reimplement as a legacy wrapper over the MSIX maker by [@claude](https://github.com/claude)\[bot] in [#4392](electron/forge#4392) - chore: bump version to 8.0.0 by [@claude](https://github.com/claude)\[bot] in [#4425](electron/forge#4425) - chore: bump version to 8.0.1 by [@claude](https://github.com/claude)\[bot] in [#4426](electron/forge#4426) ##### New Contributors - [@0xlau](https://github.com/0xlau) made their first contribution in [#4167](electron/forge#4167) **Full Changelog**: <electron/forge@v7.10.2...v8.0.1> ##### [v8.0.0](electron/forge@v7.11.2...40b4adf)
##### [v8.0.1](https://github.com/electron/forge/releases/tag/v8.0.1) ##### What's Changed - build: Yarn 4 CI hardening by [@erickzhao](https://github.com/erickzhao) in [#4028](electron/forge#4028) - feat(init): add `--electron-version` flag by [@erickzhao](https://github.com/erickzhao) in [#4037](electron/forge#4037) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4036](electron/forge#4036) - feat: expose artifact version to static publishers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4033](electron/forge#4033) - fix(publisher-gcs): do not gzip artifacts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4034](electron/forge#4034) - chore: update `node-abi` to latest by [@erickzhao](https://github.com/erickzhao) in [#4046](electron/forge#4046) - build(deps): bump brace-expansion from 1.1.11 to 1.1.12 by [@dependabot](https://github.com/dependabot)\[bot] in [#4047](electron/forge#4047) - build(deps): bump vite from 5.4.20 to 5.4.21 by [@dependabot](https://github.com/dependabot)\[bot] in [#4049](electron/forge#4049) - build: remove electronegativity plugin by [@erickzhao](https://github.com/erickzhao) in [#4053](electron/forge#4053) - test(fuses): use local modules instead of `initLink` by [@erickzhao](https://github.com/erickzhao) in [#4057](electron/forge#4057) - chore: use yarn `workspace:*` cross-references by [@erickzhao](https://github.com/erickzhao) in [#4056](electron/forge#4056) - chore: add eslint config change to `.git-blame-ignore-revs` by [@erickzhao](https://github.com/erickzhao) in [#4062](electron/forge#4062) - feat(core)!: remove global module templates by [@erickzhao](https://github.com/erickzhao) in [#4065](electron/forge#4065) - ci: set up npm trusted publishing by [@erickzhao](https://github.com/erickzhao) in [#4070](electron/forge#4070) - chore: bump version to 8.0.0-alpha.1 by [@erickzhao](https://github.com/erickzhao) in [#4072](electron/forge#4072) - build: target "next" branch in gh release create by [@VerteDinde](https://github.com/VerteDinde) in [#4074](electron/forge#4074) - chore: bump version to 8.0.0-alpha.3 by [@VerteDinde](https://github.com/VerteDinde) in [#4075](electron/forge#4075) - test: fix slow tests on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4076](electron/forge#4076) - build: improve version + publish flow by [@erickzhao](https://github.com/erickzhao) in [#4078](electron/forge#4078) - ci: use `.nvmrc` file for CI by [@erickzhao](https://github.com/erickzhao) in [#4081](electron/forge#4081) - test: move AssetRelocatorPatch tests to slow tests by [@erickzhao](https://github.com/erickzhao) in [#4080](electron/forge#4080) - feat(import)!: remove Forge 5 import code by [@erickzhao](https://github.com/erickzhao) in [#4083](electron/forge#4083) - feat(core)!: remove rechoir + lodash templates from config loader by [@erickzhao](https://github.com/erickzhao) in [#4066](electron/forge#4066) - ci: optimize Windows builds with faster D:\ drive by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4038](electron/forge#4038) - test: upgrade to Vitest 4 by [@erickzhao](https://github.com/erickzhao) in [#4079](electron/forge#4079) - build(deps): replace `ts-node` with `tsx` by [@erickzhao](https://github.com/erickzhao) in [#4085](electron/forge#4085) - build(deps): update lint-roller to latest major version by [@erickzhao](https://github.com/erickzhao) in [#4086](electron/forge#4086) - fix(maker-wix): set default arch by [@ShGKme](https://github.com/ShGKme) in [#3859](electron/forge#3859) - fix(core): prevent duplicate app restarts when typing 'rs' multiple times by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4089](electron/forge#4089) - ci: run post-merge on `next` branch by [@erickzhao](https://github.com/erickzhao) in [#4090](electron/forge#4090) - test(slow): test api against `file:` protocol fixtures by [@erickzhao](https://github.com/erickzhao) in [#4087](electron/forge#4087) - chore: fix formatting by [@erickzhao](https://github.com/erickzhao) in [#4091](electron/forge#4091) - test(slow): simplify bootstrapping tests by [@erickzhao](https://github.com/erickzhao) in [#4096](electron/forge#4096) - fix(template): add `private: true` by [@erickzhao](https://github.com/erickzhao) in [#4103](electron/forge#4103) - test: use verdaccio for e2e init testing by [@erickzhao](https://github.com/erickzhao) in [#4100](electron/forge#4100) - fix: interactive mode should proxy signals by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4102](electron/forge#4102) - chore: remove `pre-push` hook by [@erickzhao](https://github.com/erickzhao) in [#4117](electron/forge#4117) - test: use verdaccio in more `init` cases by [@erickzhao](https://github.com/erickzhao) in [#4119](electron/forge#4119) - feat(init)!: add `--package-manager` flag by [@erickzhao](https://github.com/erickzhao) in [#4107](electron/forge#4107) - fix: apply correct version bump commit title by [@erickzhao](https://github.com/erickzhao) in [#4122](electron/forge#4122) - chore: bump version to 8.0.0-alpha.4 by [@erickzhao](https://github.com/erickzhao) in [#4131](electron/forge#4131) - fix(template): modernize eslint deps by [@erickzhao](https://github.com/erickzhao) in [#4132](electron/forge#4132) - feat!: Node 22 + ESM by [@erickzhao](https://github.com/erickzhao) in [#4059](electron/forge#4059) - chore: add local claude code settings to `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4158](electron/forge#4158) - build: isolate yarn cache when running verdaccio by [@erickzhao](https://github.com/erickzhao) in [#4161](electron/forge#4161) - feat(create-electron-app)!: move `init` and `import` out of core by [@erickzhao](https://github.com/erickzhao) in [#4148](electron/forge#4148) - perf(plugin-vite): run production builds in isolated subprocesses by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4163](electron/forge#4163) - fix(plugin-vite): improve child logging by [@erickzhao](https://github.com/erickzhao) in [#4165](electron/forge#4165) - build: replace eslint with oxlint by [@erickzhao](https://github.com/erickzhao) in [#4169](electron/forge#4169) - chore: bump version to 8.0.0-alpha.5 by [@erickzhao](https://github.com/erickzhao) in [#4173](electron/forge#4173) - fix: prune final `require` calls by [@erickzhao](https://github.com/erickzhao) in [#4176](electron/forge#4176) - chore: bump version to 8.0.0-alpha.6 by [@erickzhao](https://github.com/erickzhao) in [#4177](electron/forge#4177) - build(deps): remove unused `minimist` dep by [@erickzhao](https://github.com/erickzhao) in [#4171](electron/forge#4171) - chore: remove additional eslint references by [@erickzhao](https://github.com/erickzhao) in [#4178](electron/forge#4178) - ci: upgrade `actions/*` to latest by [@erickzhao](https://github.com/erickzhao) in [#4179](electron/forge#4179) - feat(package): API returns result by [@erickzhao](https://github.com/erickzhao) in [#4172](electron/forge#4172) - build(deps): update transient dependencies by [@erickzhao](https://github.com/erickzhao) in [#4182](electron/forge#4182) - feat(template): use `moduleResolution: bundler` by [@erickzhao](https://github.com/erickzhao) in [#4175](electron/forge#4175) - build: patch out lerna for verdaccio publish by [@erickzhao](https://github.com/erickzhao) in [#4185](electron/forge#4185) - build: add knip for dead code detection by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4190](electron/forge#4190) - refactor: replace got with native fetch API by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4189](electron/forge#4189) - chore: fix `got` deps in lockfile by [@erickzhao](https://github.com/erickzhao) in [#4191](electron/forge#4191) - chore: resolve dependabot security alerts by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4204](electron/forge#4204) - fix(plugin-webpack): ESM-compatible imports by [@erickzhao](https://github.com/erickzhao) in [#4206](electron/forge#4206) - chore: forward-ports by [@erickzhao](https://github.com/erickzhao) in [#4205](electron/forge#4205) - feat(plugin-vite): upgrade vite 8 by [@0xlau](https://github.com/0xlau) in [#4167](electron/forge#4167) - chore: bump version to 8.0.0-alpha.7 by [@erickzhao](https://github.com/erickzhao) in [#4212](electron/forge#4212) - fix(plugin-vite): ignore .git directory in dev mode file watcher by [@erickzhao](https://github.com/erickzhao) in [#4213](electron/forge#4213) - fix(core): convert absolute file path to file URL in `locateElectronExecutable` by [@erikian](https://github.com/erikian) in [#4214](electron/forge#4214) - fix(init): ensure base tmpl scripts are added to `package.json` by [@erickzhao](https://github.com/erickzhao) in [#4215](electron/forge#4215) - fix: use `file://` URLs when dynamically importing local paths by [@erikian](https://github.com/erikian) in [#4217](electron/forge#4217) - fix: tracer exception when tracing forge v8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4220](electron/forge#4220) - feat(template): replace eslint/prettier with oxc.rs stack by [@erickzhao](https://github.com/erickzhao) in [#4186](electron/forge#4186) - feat(publisher-github)!: Github -> GitHub by [@erickzhao](https://github.com/erickzhao) in [#4224](electron/forge#4224) - refactor: replace fast-glob with built-in node:fs glob by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4227](electron/forge#4227) - fix(template): update `.gitignore` by [@erickzhao](https://github.com/erickzhao) in [#4221](electron/forge#4221) - chore(template): remove stale `nodeIntegration` instructions by [@erickzhao](https://github.com/erickzhao) in [#4223](electron/forge#4223) - refactor(plugin-vite): use codeSplitting:false for preload by [@erickzhao](https://github.com/erickzhao) in [#4222](electron/forge#4222) - fix(maker-msix): ensure output has version and arch by [@erickzhao](https://github.com/erickzhao) in [#4225](electron/forge#4225) - fix(maker-msix): use path.basename(dir) for artifact by [@erickzhao](https://github.com/erickzhao) in [#4230](electron/forge#4230) - feat(plugin-vite): run main/preload dev builds in subprocess workers by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4226](electron/forge#4226) - feat: add notarization support to MakerPKG by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4234](electron/forge#4234) - chore: bump version to 8.0.0-alpha.8 by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4235](electron/forge#4235) - chore: update dependencies to dedupe across child packages by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4236](electron/forge#4236) - build: delete stray `.eslintcache` file by [@erickzhao](https://github.com/erickzhao) in [#4237](electron/forge#4237) - fix: bump to [@electron/packager](https://github.com/electron/packager) and [@electron/get](https://github.com/electron/get) to drop 'got' transitive dep by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4239](electron/forge#4239) - fix(cli): allow pre-release package manager ranges by [@erickzhao](https://github.com/erickzhao) in [#4241](electron/forge#4241) - build(deps): TypeScript 6 + 7 by [@erickzhao](https://github.com/erickzhao) in [#4238](electron/forge#4238) - chore: replace chalk and log-symbols with Node.js built-in styleText by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4245](electron/forge#4245) - refactor: replace find-up dependency with internal implementation by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4248](electron/forge#4248) - fix(template-base): copy over `.oxfmtrc.json` for instantiation by [@erickzhao](https://github.com/erickzhao) in [#4256](electron/forge#4256) - chore: bump version to 8.0.0-alpha.9 by [@erickzhao](https://github.com/erickzhao) in [#4263](electron/forge#4263) - refactor: replace fs-extra with graceful-fs and native fs by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4250](electron/forge#4250) - fix(core): convert absolute paths to file URLs in importSearch by [@erickzhao](https://github.com/erickzhao) in [#4273](electron/forge#4273) - build: add `tsconfig.json` to `clean` script by [@erickzhao](https://github.com/erickzhao) in [#4272](electron/forge#4272) - refactor: inline filenamify utility to remove external dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4249](electron/forge#4249) - refactor(core-utils): inline parse-author and drop dependency by [@MarshallOfSound](https://github.com/MarshallOfSound) in [#4251](electron/forge#4251) - feat(maker-dmg)!: write DMGs to platform/arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4275](electron/forge#4275) - build(deps): use electron-internal/extract-zip by [@erickzhao](https://github.com/erickzhao) in [#4285](electron/forge#4285) - chore: exclude git worktrees from tooling by [@erickzhao](https://github.com/erickzhao) in [#4286](electron/forge#4286) - fix(cli): detect TTY for interactive mode instead of hardcoding true by [@erickzhao](https://github.com/erickzhao) in [#4259](electron/forge#4259) - chore: bump version to 8.0.0-alpha.10 by [@erickzhao](https://github.com/erickzhao) in [#4289](electron/forge#4289) - ci: cancel stale in-progress runs on PR pushes by [@claude](https://github.com/claude)\[bot] in [#4297](electron/forge#4297) - feat(maker-msix): allow overriding output filename by [@claude](https://github.com/claude)\[bot] in [#4295](electron/forge#4295) - ci: fail required-ci when a dependency fails or is cancelled by [@claude](https://github.com/claude)\[bot] in [#4300](electron/forge#4300) - feat(maker): add typed copyright option for deb and rpm makers by [@claude](https://github.com/claude)\[bot] in [#4298](electron/forge#4298) - fix(create-electron-app): mark vite as experimental in bundler chooser by [@claude](https://github.com/claude)\[bot] in [#4307](electron/forge#4307) - feat(publisher-github): show byte-level asset upload progress by [@claude](https://github.com/claude)\[bot] in [#4304](electron/forge#4304) - build(deps): upgrade webpack-dev-server to v5.2.4 on next by [@claude](https://github.com/claude)\[bot] in [#4308](electron/forge#4308) - fix(core): disable concurrency for package subtasks by [@claude](https://github.com/claude)\[bot] in [#4309](electron/forge#4309) - ci: port zizmor audit hardening to next (backport of [#4200](electron/forge#4200)) by [@claude](https://github.com/claude)\[bot] in [#4310](electron/forge#4310) - feat: rename `publish` command to `release` by [@claude](https://github.com/claude)\[bot] in [#4305](electron/forge#4305) - test: add end-to-end tests for `create-electron-app` across all templates and package managers by [@erikian](https://github.com/erikian) in [#4218](electron/forge#4218) - test: retry temp folder removal for tests that spawn Electron by [@erikian](https://github.com/erikian) in [#4316](electron/forge#4316) - fix: avoid duplicate draft releases when publishing multiple dry runs (next) by [@claude](https://github.com/claude)\[bot] in [#4327](electron/forge#4327) - build: Yarn 4.18 and TypeScript 7 stable by [@SpacingBat3](https://github.com/SpacingBat3) in [#4322](electron/forge#4322) - fix(create-electron-app): surface dependency install failures during init by [@erickzhao](https://github.com/erickzhao) in [#4348](electron/forge#4348) - feat(plugin-vite): enable main process hot restart via exported API by [@erickzhao](https://github.com/erickzhao) in [#4346](electron/forge#4346) - test: apply the supply-chain age gate to npm and pnpm in Verdaccio tests by [@erickzhao](https://github.com/erickzhao) in [#4347](electron/forge#4347) - docs: import documentation from electron-forge-docs by [@erickzhao](https://github.com/erickzhao) in [#4345](electron/forge#4345) - fix(typedoc): documentation & API completeness fixes by [@SpacingBat3](https://github.com/SpacingBat3) in [#4321](electron/forge#4321) - feat(plugin-vite): support custom server host in renderer dev server URL by [@erickzhao](https://github.com/erickzhao) in [#4363](electron/forge#4363) - build(deps): bump lint-staged to 17.4.1 by [@claude](https://github.com/claude)\[bot] in [#4366](electron/forge#4366) - feat(template): unify JS/TS templates by [@erickzhao](https://github.com/erickzhao) in [#4229](electron/forge#4229) - test: remove orphaned e2e specs for deleted typescript template packages by [@erickzhao](https://github.com/erickzhao) in [#4374](electron/forge#4374) - ci: shard the slow tests and drop the dead node-gyp setup step by [@erickzhao](https://github.com/erickzhao) in [#4380](electron/forge#4380) - build(deps): bump @electron/\* and electron-installer-\* packages by [@erickzhao](https://github.com/erickzhao) in [#4379](electron/forge#4379) - fix(core): guard against archs dropped by Electron 44 (win32/ia32, linux/armv7l) by [@erickzhao](https://github.com/erickzhao) in [#4377](electron/forge#4377) - feat(plugin-vite): graduate from experimental by [@erickzhao](https://github.com/erickzhao) in [#4382](electron/forge#4382) - feat(maker-pkg)!: write PKGs to arch subdirectories by [@erickzhao](https://github.com/erickzhao) in [#4383](electron/forge#4383) - test(core): stub packager arch list in the dropped-arch warning test by [@erickzhao](https://github.com/erickzhao) in [#4384](electron/forge#4384) - chore: remove Discord links by [@erickzhao](https://github.com/erickzhao) in [#4378](electron/forge#4378) - chore(deps)!: upgrade listr2 to v11 by [@erickzhao](https://github.com/erickzhao) in [#4375](electron/forge#4375) - ci: skip the test jobs on docs-only changes by [@claude](https://github.com/claude)\[bot] in [#4387](electron/forge#4387) - test: add unit coverage for maker-appx and maker-msix make() by [@claude](https://github.com/claude)\[bot] in [#4388](electron/forge#4388) - feat(bundlers)!: emit main and preload bundles as .cjs by [@erickzhao](https://github.com/erickzhao) in [#4393](electron/forge#4393) - feat(plugin-webpack): render compiler output in the terminal with an ink multi-logger by [@claude](https://github.com/claude)\[bot] in [#4389](electron/forge#4389) - build: stop lint-staged failing on oxfmt-ignored files by [@erickzhao](https://github.com/erickzhao) in [#4396](electron/forge#4396) - fix(core): resolve the Forge config once per command by [@erickzhao](https://github.com/erickzhao) in [#4394](electron/forge#4394) - ci: prepare `next` for promotion to `main` as Forge 8 by [@erickzhao](https://github.com/erickzhao) in [#4381](electron/forge#4381) - ci: forward-port GHA improvements from 7.x by [@claude](https://github.com/claude)\[bot] in [#4401](electron/forge#4401) - fix(template-base): accept partial yarn versions when initializing by [@erickzhao](https://github.com/erickzhao) in [#4403](electron/forge#4403) - feat!: replace `release --from-dry-run` with `--from-make`, and `make --skip-package` with `--from-package` by [@erickzhao](https://github.com/erickzhao) in [#4395](electron/forge#4395) - build: bump [@electron/lint-roller](https://github.com/electron/lint-roller) to ^4.0.0 by [@claude](https://github.com/claude)\[bot] in [#4404](electron/forge#4404) - fix(template-vite): use .mts for Vite configs in the TypeScript variant by [@erickzhao](https://github.com/erickzhao) in [#4406](electron/forge#4406) - fix(template): typecheck root-level config files by [@erickzhao](https://github.com/erickzhao) in [#4407](electron/forge#4407) - build(deps): bump vulnerable transitive and direct dependencies by [@erickzhao](https://github.com/erickzhao) in [#4408](electron/forge#4408) - build(deps): upgrade Electron to 44.4.3 by [@erickzhao](https://github.com/erickzhao) in [#4410](electron/forge#4410) - docs: add AGENTS.md guidance for AI coding agents by [@erickzhao](https://github.com/erickzhao) in [#4416](electron/forge#4416) - refactor(maker-appx)!: reimplement as a legacy wrapper over the MSIX maker by [@claude](https://github.com/claude)\[bot] in [#4392](electron/forge#4392) - chore: bump version to 8.0.0 by [@claude](https://github.com/claude)\[bot] in [#4425](electron/forge#4425) - chore: bump version to 8.0.1 by [@claude](https://github.com/claude)\[bot] in [#4426](electron/forge#4426) ##### New Contributors - [@0xlau](https://github.com/0xlau) made their first contribution in [#4167](electron/forge#4167) **Full Changelog**: <electron/forge@v7.10.2...v8.0.1> ##### [v8.0.0](electron/forge@v7.11.2...40b4adf) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Summarize your changes:
Forward-port of #4328 from
maintonext, as part of thenext→maintransition audit. It is a cherry-pick of that commit with the following adaptations fornext:.jsextensions) inpackage.tsandparse-archs.ts.packages/api/coreonnextdid not depend onsemver, so it is added todependencies(already in the lockfile via other workspaces).nextno longer has thePackagerArchcast /Optionstype inpackage.ts, sotargetArchsis passed straight intoPackagerOptions.arch.Behaviour is unchanged from the original:
--arch=allfilters out win32/ia32 and linux/armv7l for Electron >= 44.0.0-alpha.4 with a warning, and explicit requests for those archs fail with a descriptive error instead of a download 404.Verified locally:
yarn build,oxfmt/oxlint,yarn constraints,yarn knip, the fullpackages/api/corefast suite (131 passed), and the two new cases inpackage.slow.spec.ts.Note:
yarn installon currentnextfails inpostinstallbecause of the orphanedpackages/template/{vite,webpack}-typescript/specdirectories left by #4229. #4374 fixes that; this PR's CI will need it merged first.🤖 Generated with Claude Code
https://claude.ai/code/session_01Bb2CkBAwF2iaKw1fjfQd9h
Generated by Claude Code