Project note: the app is now branded as OpCore-OneClick. Legacy repo/update coordinates and the persisted app-data path remain unchanged for continuity.
- Stop auto-injecting
itlwm.kextinto modern laptops unless the detected Wi-Fi chipset is actually Intel. Broadcom laptops were incorrectly inheriting the Intel Wi-Fi path before. - Add a conservative Broadcom Wi-Fi policy: supported BCM4352/BCM43602 paths now pull in
AirportBrcmFixup.kexton Ventura and older, while BCM4360 stays on the native-style pre-Sonoma path. - Sonoma and newer now report Broadcom Wi-Fi honestly in compatibility analysis instead of implying a clean native route where OCLP/root patches or a card swap are the real next step.
- Add
AirportBrcmFixup.kextto the app kext registries so the generated Broadcom Wi-Fi path is fetchable and visible in resource planning.
- App Updates: The in-app updater now supports auto-resuming partial downloads and automatically retries requests if the connection drops, eliminating the need to restart large update downloads from scratch on unstable internet.
- API Resilience: GitHub API queries for the latest release versions are now wrapped in an exponential backoff retry mechanism (up to 3 attempts), protecting the app against transient API network drops.
- The app's download utility now automatically catches network drops (
ECONNRESET,ETIMEDOUT, stall timeouts) and seamlessly retries from the exact byte where it left off, up to 5 times. This prevents the entire fallback process from crashing and forcing manual retries on unstable connections. - Fixed a cache policy bug where valid partial downloads under 350MB were being discarded instead of marked resumable.
- Implemented self-healing resume logic in the download utility: if a server returns HTTP 416 during a resume attempt (indicating the local partial file is larger than the server file or otherwise invalid), the app now automatically deletes the local cache and restarts the download from scratch.
- Added specific error classification for HTTP 416 errors to provide clearer guidance if a download mismatch occurs.
- Split Windows diskpart prep into two phases: partition creation (noerr) and format (NO noerr), ensuring format failures surface instead of being silently swallowed.
- Added handle-lock clearing (
detachWindowsDriveLetters) between phases to break Explorer/Shell locks that frequently block FAT32 formatting on new volumes. - Increased Windows flash-prep retries from 2 to 3 with progressive delays (500ms → 1500ms → 3000ms) to handle slow USB controllers and mount-timing races.
- Added dedicated error classification for disk format failures in
main.ts, preventing them from being misclassified as recovery download or generic hardware errors.
- Bundled IntelMausi.kext (1.0.8), ECEnabler.kext (1.0.6), and USBInjectAll.kext (0.7.6) as embedded fallbacks. These were added to the config generator in v2.7.7/v2.7.10 but never bundled, so any GitHub API failure (rate limit, network) hard-failed the build.
- Added USBInjectAll.kext to the kext registry — it was generated by the config generator but had no source entry, causing unconditional build failure on Intel desktop systems.
- Updated ECEnabler.kext repo from 1Revenger1/ECEnabler to averycblack/ECEnabler (GitHub repo transfer).
- Diskpart format failures containing "antivirus scans" in the remediation text were matching the
hardware_scan_failedsuggestion pattern becausem.includes('scan')matched. User saw "Hardware detection failed" instead of actionable format-retry guidance. - Added dedicated
diskpart_format_failedsuggestion pattern with correct remediation (close Explorer, retry, manual Disk Management fallback). - Narrowed
hardware_scan_failedto exclude messages containing diskpart/format/partition/fat32/flash/opencore context. - Widened
flash_write_errorto also matchdiskpartkeyword so diskpart partition failures route correctly after IPC prefix stripping.
- Replaced the PowerShell update worker with a
.cmdbatch script. PowerShell silently failed on systems with restrictive execution policies, leaving the app in an infinite "install again" loop on every relaunch. - The batch approach has no execution policy dependency and uses
cmd.exewithwindowsHide: trueso no visible console window flashes during the install handoff. - Added startup cleanup of stale update-worker scripts from previous versions.
- Suggestion engine's "recovery download" pattern was matching diskpart errors because v2.7.11's compound format message contained "Format-Volume recovery failed" — the word "recovery" + "failed" triggered the wrong pattern.
- Narrowed recovery download pattern to exclude diskpart/flash-usb/partition/format-volume context.
- Renamed "Format-Volume recovery" to "Format-Volume fallback" everywhere to prevent future classifier poisoning.
- Removed duplicate
void checkForAppUpdates()call inhandlePrimaryUpdateAction(introduced in v2.7.11).
electron:devnow pre-compiles electron code before starting concurrently. Electron opens ~300ms after Vite is ready instead of waiting for a full tsc run (~10s) after Vite is up. No more duplicate parallel compilation.- Guard startup updater effects with
'electron' in windowcheck. In browser context (plain localhost:5173), the app no longer throws on mount from trying to callwindow.electron.checkForUpdates()when the preload isn't wired.
- #36: Required kexts with no valid source (e.g. NootedRed offline, no embedded fallback) now fail fast before EFI validation. Removed pre-creation of empty kext directories that masked fetch failures. Stub directories from failed fetches are cleaned up.
- #37A: "Check for updates" button no longer silently does nothing — falls through to
checkForAppUpdates()when no other state matches. - #37B: Flash-usb errors containing "hardware" or "scan" no longer falsely match
hardware_scan_failed. Hardware scan classifier narrowed to actual scan/detection context only. - #37C: Compound diskpart + Format-Volume failures now report both stages failed. Generic diskpart fallback includes stage annotation.
- SIP disabled (csr-active-config /w8AAA==) for the Coffee Lake and newer path used at the time.
- Dual-boot safety: Set UpdateSMBIOSMode to 'Custom' to prevent SMBIOS leaking into Windows.
- Intel NIC stability: Added dk.e1000=0 boot-arg for I219/I225 controllers.
- RTC stability: DisableRtcChecksum=true for Z390/Z370 boards (Fixes BIOS resets).
- Added USBInjectAll.kext for Intel desktop systems to ensure USB port enumeration.
- Added FixupAppleEfiImages quirk for Tahoe (26+) on Coffee Lake and newer.
- Fix simulation hard-blocking on directUrl probe failures (NootRX/NootedRed).
- directUrl unreachable now results in 'may_fail' certainty instead of 'will_fail', allowing build to proceed with warnings.
- Fix NootedRed hard-fail by adding nightly.link direct URL fallback.
- Fix [object Object] error string in kext fetcher logs.
- Added SSDT-RHUB for Alder/Raptor Lake and Comet Lake Z490 boards.
- Added ECEnabler.kext to laptop profiles.
- Added ECEnabler, SMCProcessor, SMCSuperIO, IntelMausi to kext registry.
- Corrected ig-platform-ids, quirks, audio path, and SSDT coverage.
- Fix flash error routing and updater state polling bugs.
- Added an in-app destructive conversion path for selected USB targets that are still MBR, so the app can erase them, convert them to GPT, and leave behind a FAT32
OPENCOREvolume instead of forcing a manual shell step first. - Reused the same Windows GPT/FAT32 preparation logic for both direct conversion and flash preparation so the diskpart path stays consistent across both flows.
- Tightened reuse rules so an existing
OPENCOREvolume is only reused when the disk itself already reports GPT, preventing an MBR disk from slipping through on label alone.
- Downloaded updates now persist as a real staged updater session instead of living only in memory, so reopening the app no longer drops back into a fake “download again” loop.
- Windows installer handoff now records the pending install, closes the app only after a valid detached worker is launched, and relaunches the app after a successful silent install.
- Startup reconciliation now distinguishes applied, failed, interrupted, stale, and already-installed update states and restores the correct updater UI instead of falling back to a generic idle/download state.
- The updater panel now shows an explicit “Applying update…” state while install handoff is in progress.
- The Windows flash watchdog no longer fails an active USB flash after 60 seconds just because a long-running child process is still copying data without app-level progress updates.
- Stalled or cancelled Windows flash tasks no longer fall back to generic USB/admin failure guidance when the real problem is task state handling.
- Flash prepare blockers now stay classified as BIOS, compatibility, or disk-selection/identity precondition failures instead of surfacing as generic USB write failures.
- Diagnostics now retain the selected disk context for prepare-time flash failures, even if the destructive write never starts.
- Made the Windows
diskpartprep script explicit by re-selecting the created partition before formatting and assigning it, instead of relying on implicit focus. - Replaced the old “any partition exists?” + label-only lookup path with deterministic partition-state inspection on the selected disk after
diskpart. - Flash prep now distinguishes real stage failures on Windows: partition creation, FAT32 format, drive-letter assignment, and OPENCORE label lookup.
- Added a partition-based fallback when Windows creates the right FAT32 partition and drive letter but label lookup lags or comes back empty, so that case no longer masquerades as partition creation failure.
- Fixed the direct
gh release createpublish step by passing the repository explicitly in the publish job, which runs without a checked-out.gitdirectory.
- Replaced the Node 20-only release-publish action with a direct
gh release createstep so the release workflow no longer depends on a deprecated Node 20 action.
- Updated release, issue, homepage, and updater lookup URLs to the live
redpersongpt/OpCore-OneClickrepo after the GitHub repo rename landed. - Kept the existing
appIdand persisteduserDatapath unchanged, but stopped relying on GitHub's redirect for updater checks.
- Fixed the SSDT source-policy regression in the in-progress follow-up patch so the Electron build path matches the source-policy module again.
- Added explicit source coverage for the shipped AMD desktop, Coffee Lake, Alder Lake, and Raptor Lake SSDT sets.
- EFI build now fails clearly if a required SSDT has no supported source policy instead of falling into a type/runtime mismatch.
- Updated the release workflow action versions to current Node 24-capable majors to clear the GitHub Actions Node 20 deprecation warnings from the release pipeline.
- The app is now branded as
OpCore-OneClickacross the packaged app, window title, diagnostics, support logs, updater copy, and CLI usage text. - Existing updater/release continuity was preserved. The app still checks releases from
redpersongpt/macOS-One-Clickbecause the GitHub repo slug is unchanged. - Internal compatibility-sensitive paths were intentionally kept where needed. The existing
appId, persisteduserDatapath, and legacymacos-oneclickCLI alias remain in place for continuity.
- The app no longer tells Linux users to run the entire GUI as root. Disk operations now use pkexec (polkit) for per-command elevation, the same model macOS uses with system prompts.
- Removed
--no-sandboxfrom default Linux executable args. The auto no-sandbox workaround is kept only for backwards compatibility when already running as root. - Updated all privilege-related error messages, suggestions, and remediations to say "install polkit" instead of "run with sudo."
- Added a headless CLI entry point (
opcore-oneclick, legacy aliasmacos-oneclick, ornode dist-electron/electron/cli.js). - Commands:
scan,compatible,report,matrix,version. - JSON (
--json) and human-readable output. Correct exit codes (0=ok, 1=error/blocked, 2=usage). --targetflag for specifying macOS version oncompatibleandreportcommands.- Read-only — destructive operations (flash/build) require the GUI.
- Extracted
detectCpuGeneration,detectArchitecture,mapDetectedToProfilefrom main.ts intoelectron/hardwareMapper.tsso both the Electron app and CLI share the same mapping logic.
- Fixed GPT detection on Windows:
Get-Disknow targets the specific disk number and wraps in try/catch so GPT drives are no longer misreported as "unknown partition table." - Improved diskpart error handling: silent
.catch(() => {})on drive-letter assignment replaced with logged error path; retry window widened from 12×500ms to 20×400ms. - Final flash error now distinguishes "partition exists but no letter" from "no partition created at all."
- Added structured error entries for diskpart prep failure and drive-letter assignment failure with actionable remediation copy.
- SMBIOS recomputed on target OS change so Tahoe builds get the correct model.
- SSDT sourcing reads real AML from OpenCore package instead of empty placeholder files.
- VersionStep: "Use {version}" vs "Continue with {version}" button logic; cursor-pointer on all interactive buttons.
- Resource plan no longer blanks while a new plan loads — keeps previous plan visible.
- Recovery download step shows accurate 700 MB copy instead of implying full OS size.
- Added 7 new test files covering diskOps safety commands, structured error classification, flash safety gates, kext source policy, release flow SMBIOS, config generator, and VersionStep button states.
- Fixed EFI build failing on codeless kexts like AppleMCEReporterDisabler that have only an Info.plist and no binary in Contents/MacOS. Both the build validator and the install validator now recognize codeless kexts as valid.
- Rewrote the updater panel to a compact single-row layout so download/install/restart actions stay visible without scrolling.
- Removed dead blank space from compatibility matrix cards (hard min-height floor).
- Tightened spacing and shortened copy across version selection, hardware report, and resource plan screens.
- Made the landing page scrollable so the updater is never clipped below the viewport.
- Added 83 regression tests covering updater action visibility, sidebar single-active state, resource plan persistence across Build EFI re-entry, and compatibility matrix layout invariants.
- Fixed Windows disk identity so
PhysicalDriveNpaths are canonical end-to-end instead of mixingdiskNaliases that broke partition-table and system-disk checks. - Widened USB detection beyond
BusType=USBto catch bridge-backed removable media throughInterfaceType,PNPDeviceID, andMediaType. - Separated partition-table errors from system-disk errors so users see the right remediation instead of a generic safety block.
- Capped FAT32 partition size on drives larger than 32 GB so
diskpartprep does not exceed the FAT32 volume limit. - Added a diskpart retry path for the common Windows lock/mount-handle failure.
- Restored flash authorization from saved scan artifacts on app restart so a valid session survives relaunch.
- Kext resolution now routes explicitly to bundled, GitHub, direct download, embedded fallback, or hard fail — no more fake offline stubs.
- Added direct-download paths for AMD kexts and other non-API-friendly sources.
- Resource plan persists across Build EFI re-entry when the hardware profile has not changed.
- Sidebar highlights exactly one active step instead of allowing duplicates.
- Updater polling runs only during active check/download/install states.
- Shortened recommendation, compatibility, and report copy.
- Fixed USB flash-prep disk identity loss on Windows so valid removable targets keep a stable identity from selection through flash confirmation.
- Fixed a stale disk-info race where an older lookup could overwrite the currently selected USB target.
- Fixed Windows disk info IPC instability by degrading slow removable-media queries safely instead of failing the whole lookup.
- Fixed the remaining EFI-build stall after BIOS Continue by auto-starting the build flow instead of landing on a second manual Begin gate.
- Prevented stale BIOS refresh responses from clearing an accepted BIOS session after Continue, so the non-destructive build path stays coherent until EFI generation starts.
- Added an in-app "Update to latest version" button that opens the latest GitHub release page from both the landing screen and the main shell.
- Timed out BIOS-state firmware probing in the main process and emitted EFI-build progress before BIOS validation so hung firmware reads fail clearly instead of leaving the build screen waiting indefinitely.
- Kept destructive safety unchanged: accepted BIOS sessions still do not unlock partitioning or flashing without a real ready BIOS state.
- Fixed the BIOS-step recovery bug where the combined recheck/continue flow could fall into a generic unknown-error surface instead of staying in a clear BIOS-specific path.
- Split the BIOS step into distinct Recheck BIOS and Continue actions so recheck reruns firmware detection while continue uses the current known checklist state without silently probing again.
- Added BIOS-specific recovery messaging and session persistence for continuing from the current BIOS state, while keeping the later build/deploy safety gates unchanged.
- Fixed a release-blocking EFI build pipeline bug where renderer-side step transitions could read stale state after a successful build and leave the app looking stuck instead of moving forward or failing clearly.
- Added build-flow stall detection, clearer recovery context, and richer issue-report diagnostics for stuck build, kext, and recovery phases without weakening any destructive safety checks.
- Removed the Safe / Exploratory planning-mode split and collapsed the app onto one clearer compatibility guidance path.
- Reworked macOS version selection into a calmer, more professional recommendation layout with a stronger featured starting point and cleaner state presentation.
- Hardened packaged startup recovery so renderer/load failures surface a clean recovery path instead of raw diagnostics or blank-screen dead ends.
- Added sanitized support-log export and cleaner failure recovery messaging without changing flash, BIOS, validation, backup, or destructive authorization rules.
- Refined the macOS selection and BIOS preparation screens for calmer hierarchy, clearer recommendations, steadier back navigation, and better checklist readability.
- Added guided fix suggestions, community match levels, likely failure points, and decision-trace context for Experimental and Risky Hackintosh paths.
- Added Safe Mode and Exploratory Mode planning surfaces so advanced users can stretch community-proven hardware paths without weakening destructive safety.
- Kept destructive write protection unchanged: flash token safety, live disk identity checks, EFI validation, BIOS readiness, backup policy, and confirmation flow are all intact.
- Preserved the packaged startup-path fix so published Windows and Linux builds do not regress into a black-screen launch failure.
- Fixed the packaged startup path so released apps load the renderer bundle from the correct
dist/index.htmllocation instead of opening to a black screen. - Fixed the Electron packaging entry so Windows and Linux packages include the correct compiled main-process bootstrap.
- Split build and packaging scripts so release packaging can target Windows and Linux without producing a macOS package.
- Moved public release packaging to native GitHub Actions runners for Windows and Linux and removed the macOS publish job from the release workflow.
- Hardened diagnostics and issue reporting so build, validation, recovery, disk, simulation, and runtime failures produce sanitized bug-report drafts instead of leaking raw paths or identifiers.
- Sanitized structured logs and diagnostics output to remove tokens, personal paths, raw serial-like values, and full device identifiers from copied reports.
- Tightened renderer failure handling so runtime exceptions surface a stable error overlay instead of silently disappearing.
- Preserved the existing destructive safety architecture while keeping imported profiles, simulation, backup manifests, and resource plans advisory-only.
- Removed renderer-side environment-key injection and cleaned release metadata for public distribution.