Skip to content

Releases

OpCoreForge v2.1.3

Choose a tag to compare

@github-actions github-actions released this 20 Oct 16:58
22c5901
  • Check the two downloads stage 6 makes against their published SHA-256. The OpenCorePkg zip that macrecovery comes from is checked against the hash Dortania's build index lists for it (or the one GitHub's release page shows, when the index cannot be read), and the companion disk image against the digest GitHub's releases API gives for the release file. A mismatch is retried and then refused, so a corrupt or substituted file is never used; the error says so. A release the API lists without the image is skipped instead of trying a URL that can only 404, and only when the API cannot be reached at all is the image downloaded unchecked, as before, with the log saying it is not verified. tools/test_media.py and tools/test_companion.py cover both

OpCoreForge v2.1.2

Choose a tag to compare

@github-actions github-actions released this 20 Oct 16:42
d7f7f80

2.1.2

  • Retry diskpart when Windows says 'Access is denied', and explain it when it keeps saying so. Just after a card or stick is plugged in, Explorer's AutoPlay or an antivirus scan can still have it open, and diskpart's clean then fails with 'Access is denied' even with admin rights; a real report's manual retry four seconds later went straight through. The USB writer now waits three seconds and runs the same script again, up to three tries, and only then stops - with a plain explanation (nothing was written; close what has the drive open, or replug it) above diskpart's own output instead of the raw output alone. Other diskpart errors are reported at once as before. tools/test_media.py covers both

  • Releases are made by GitHub Actions: Actions > Release > Run workflow (.github/workflows/release.yml) builds OpCoreForge.exe on a Windows runner the way BUILD_EXE.bat does, self-tests the finished executable, builds the companion disk image through companion.yml, and publishes v with both attached. The notes come from this changelog through build/release_notes.py and cover every version since the last published release. It refuses a version that is already released

  • README: where to download the executable, how releases are made, the diskpart retry, the plain refusal when the NullMoth driver is declined, and current test counts. The screenshots are retaken from the six-tab window; the published ones still showed the ten tabs of 1.2.6. docs/NVIDIA-DRIVER.md describes the new refusal text

2.1.1

  • Fix a refused machine stopping without saying why. Since 1.3.2 the compatibility step runs upstream's GPU check silently, so when the NullMoth driver was declined for a Turing+ card - the only GPU - upstream's reason never reached the screen and the stop dialog opened on the start of the compatibility listing, with only a vague 'No GPU here can run macOS as configured' at the bottom. It now prints a plain reason naming the card ('macOS has no driver for NVIDIA GeForce GTX 1660 Ti, and macOS cannot be installed without a supported GPU'), carries it on the abort as WorkflowAborted.explanation, and the stop dialog's headline and the stage 1 banner lead with it; the report pane scrolls to it. Upstream's 'do NOT spam my inbox' text still never appears. tools/test_unsupported.py checks all three places

2.1.0

  • Ten tabs become six. macOS, SMBIOS, ACPI and Kexts are one "Configure" stage: the release on top with one line saying what it chose, and the other three as optional review tabs underneath (still reachable by their own keys, so nothing that navigates to them changed). "Finish" is folded into "Install media", where its checklist - BIOS settings, the EFI check, what to do after the install - sits with the step that actually makes the stick, and its manual "copy the EFI to a stick" instructions are gone. config.plist is marked optional and no longer has to be saved before the install media unlocks
  • Install media: "Download recovery" and "Prepare the folder" are one button, "Get macOS and prepare", which skips the download when the recovery on disk is already for the chosen Mac model
  • Ticks mean done. Unlocking a stage used to tick the one before it, and a build unlocks three stages at once, so the USB map and config.plist were ticked the moment the EFI was built. Each stage now ticks itself when its own work finishes. Every stage has a "Next" button, enabled once the next stage is unlocked
  • One message about OC Snapshot instead of three that disagreed: the USB stage updates config.plist itself, so the editor says nothing there is required, rather than warning that a snapshot must be run
  • The config.plist editor is inside the stage 8 tab on Windows again. ProperTree's document window is now created inside a -container frame with -use - Tk's own way of hosting one top-level in another - instead of being demoted from a top-level with wm forget, the step the access violations on Windows all followed. The titlebar tinting skips the embedded window by its flag, since a container-held window still reports 'wm' as its manager. If it does not survive on a machine, the existing marker still catches it and the next start uses a window of its own; 'Own window' still switches by hand. tools/test_embed.py now runs both methods
  • Stage 10 can write to USB hard drives and external SSDs, behind a 'List USB hard drives' box as in Rufus. Drives are now offered by the bus Windows reports (MSFT_Disk), so UAS enclosures that call themselves SCSI are found, and only ever USB ones: SATA, NVMe, SAS, RAID and SD/MMC-bus disks are never listed and are refused whatever is ticked. Also refused: the disk Windows boots from or keeps its system partition on, and any disk with a Windows installation on a partition. Erasing a hard drive asks a second time and lists every partition on it
  • Fix writing to any drive larger than 32 GB: Windows will not format FAT32 that large, so the media now gets a 16 GB partition there and the rest is left unallocated. Fix copying the media onto the wrong drive when two sticks labelled OPENCORE are plugged in: the new volume is now found on the disk that was just formatted, not by its label

2.0.0

  • A major version: OpCoreForge is now two apps, the Windows one that builds the EFI and the install media, and a macOS companion for the machine once macOS is on it.

  • OpCoreForge Companion, a macOS app for the target machine once macOS is installed. It installs OpenCore onto the internal disk's EFI partition so the USB stick is no longer needed to boot: it finds the EFI on the install stick, checks it with the same audit stage 9 uses, sets LauncherOption to Full so OpenCore adds itself to the firmware boot menu, backs up the whole EFI folder, and replaces only EFI/OC and EFI/BOOT - EFI/Microsoft and anything else on the partition is left alone, and a failed copy puts the previous OpenCore back. One administrator password prompt; the script that runs as root is built by a pure function and tools/test_companion.py runs it against stand-in partitions. It can also copy itself into Applications. Built on a Mac by GitHub Actions (.github/workflows/companion.yml) and attached to each published release as OpCoreForge-Companion.dmg

  • Stage 10 puts the companion on the install media: an OpCoreForge folder with the disk image, the EFI exactly as built (the copy at the root of the stick has the install settings, which are wrong for an installed system), media.json and a READ ME. The image is downloaded from the release for this version, then the latest, and cached in OpCoreForge_Data/Companion; a .dmg placed there by hand is used as is. Without it the media is still made, and the READ ME says where to get the app

  • Credits window in both apps: everyone who has committed to OpCoreForge, read live from GitHub (with a built-in list when offline), and the projects it is built on

1.3.3

  • Fix the USB map's "Port N is missing a connector type!" pointing at the wrong port. USBToolBox numbers ports with one running count across every controller, while the table shows each port's own name, so the message could name a port that plainly had a type while the real culprit sat elsewhere (typically an enabled port showing 'not set', or one on another controller). The message now names the port and its controller as the table shows them, and the offending row is selected so its connector type can be set straight away. The inspector's "Companion of port N" now uses the companion's name for the same reason.

OpCoreForge v1.3.2

Choose a tag to compare

@KurdtNervanna KurdtNervanna released this 13 Oct 23:23

NVIDIA Turing and newer on macOS Sequoia

GTX 16, RTX 20/30/40/50, TITAN RTX, Quadro RTX and T-series cards have no Apple driver. When such a card is the only reason a machine would be refused, OpCoreForge now offers the NullMoth driver at the compatibility step. Accept, and the EFI is built for macOS 15 Sequoia with the driver's required OpenCore settings written into config.plist (relaxed SIP, the nvfb/nvaccel boot-args merged with your own, the NVRAM block, IONDRVSupport blocked, SecureBootModel disabled). The kexts are not in the EFI — they install into /Library/Extensions after macOS is up, via the driver's own installer. Declining, or a machine with another supported GPU, keeps upstream's behaviour. The driver is referenced, never redistributed (PolyForm Noncommercial). See docs/NVIDIA-DRIVER.md.

Fixes since 1.3.0

  • Detect Turing+ by PCI device id. Real hardware reports an NVIDIA Codename of "Unknown" (e.g. the GTX 1660 Ti), so matching on codename alone missed the card and the offer never fired. Detection now keys on vendor 10DE, device id ≥ 0x1E00.
  • Clean compatibility verdict. A supported NVIDIA card shows macOS Sequoia 15 (NullMoth driver) instead of the red "Unsupported" / "do NOT spam my inbox" dead-end text.
  • iasl bootstrap. acpica's latest GitHub release can be source-only (no Windows binary); the app now walks releases to find the real iasl-win-*.zip, so it no longer fails at startup with "Could not get latest iasl for Windows".

Windows only. Ships OpCoreForge.exe; also buildable from source with BUILD_EXE.bat.

OpCoreForge v1.3.0

Choose a tag to compare

@KurdtNervanna KurdtNervanna released this 13 Oct 20:25

NVIDIA Turing and newer can now reach macOS Sequoia

GTX 16, RTX 20/30/40/50, TITAN RTX, Quadro RTX and T-series cards have no Apple driver, so OpCore-Simplify dead-ends on them. When such a card is the only reason a machine would be refused, OpCoreForge now offers the NullMoth NVIDIA driver at the compatibility step. Accept it, and the EFI is built for macOS 15 Sequoia with the driver's required OpenCore settings written into config.plist:

  • csr-active-config 430A0000, and the nvfb=1 nvaccel=1 nvfbheads=4 -nvkmsnosmooth amfi_get_out_of_my_way=0x1 amfi=0x80 ipc_control_port_options=0 boot-args (merged with the rest, with nv_disable=1/agdpmod=pikera stripped)
  • NVRAM Add + Delete under 7C436110-AB2A-4BBB-A880-FE41995C9F82
  • Kernel → Block com.apple.iokit.IONDRVSupport (Exclude), Misc → Security → SecureBootModel Disabled

The kexts are not in the EFI — they install into /Library/Extensions after macOS is up, via the driver's own installer. Declining, or a machine that already has a supported GPU, keeps upstream's behaviour unchanged (including its visible stop).

The driver is referenced, never redistributed (PolyForm Noncommercial — personal / research / non-profit use). See docs/NVIDIA-DRIVER.md.

Windows only. This release ships OpCoreForge.exe; you can also build it from source with BUILD_EXE.bat.

OpCoreForge v1.2.6

Choose a tag to compare

@KurdtNervanna KurdtNervanna released this 16 Sep 19:04

Portable Windows GUI combining OpCore-Simplify, USBToolBox, and ProperTree.

Full Changelog: v1.2.5...v1.2.6