Releases: hackmatelabs/hackmate
Release list
HackMate v4.0.0
[4.0.0] - 2026-09-09
The biggest correctness pass since 2.0.0. Most of it is hardware detection: whole families of CPUs, GPUs, and NICs were being misidentified, and the wrong identification quietly produced an EFI that booted but had the wrong SMBIOS, the wrong framebuffer, or a NIC/audio device that never came up. Also ships HackMate-Core (a branded graphical boot picker) and a "why" explanation for every choice the generator makes.
Fixed
CPU / platform identification
- Intel gen-11 desktops (Rocket Lake) were labeled Tiger Lake, which cascaded into the wrong GPU and platform handling.
oc_platformwas also being computed before platform detection had run. - Intel Core Ultra 100-series (Meteor Lake) was unrecognized and silently fell back to a Kaby Lake framebuffer.
- Ryzen 2000/3000-series G/U-suffix APUs were classified as a later Zen architecture than they are.
- AMD Zen 4/5 desktops were given the Intel-only
CpuTopologyRebuildkext, and a desktop chassis was being misdetected as a laptop running on a UPS. - Pentium/Celeron CPUID spoofing now follows the CPU generation, and those chips are capped at Monterey (the last release they can run).
GPU
- macOS GPU detection, when it saw both an iGPU and a dGPU, discarded whichever one it decided was the "loser" entirely instead of keeping both.
- AMD RX Vega APUs were classified as discrete cards; modern
NNNM-style iGPU names weren't recognized as APUs at all. - Intel iGPU + AMD dGPU desktops never got
NootRX/RadeonSensorfor the discrete card. nv_disable=1was never applied on Optimus laptops (Intel iGPU + Nvidia dGPU).- An unsupported Nvidia GPU was blocking every macOS version, which defeated the GOP-passthrough fallback that exists for exactly that case.
- GOP passthrough was never enabled for systems with no GPU at all, and there was no warning either.
SMBIOS
- AMD laptops were handed Intel-only
MacBookPro16,xSMBIOS models.
Storage / networking / audio device properties
- The NVMe "built-in" device property was hardcoded to one fixed PCI path — wrong on many boards.
- I225/I226 spoofs and the Realtek / I219 built-in properties were likewise pinned to fixed PCI paths.
- Linux ethernet detection had no I225/I226 branches, so those NICs were left unidentified.
- Linux audio detection could pick a GPU's HDMI audio function over the real onboard codec.
- Onboard audio
layout-idwas injected on the Intel PCH path only, leaving AMD boards silent.
ACPI
SSDT-AWACandSSDT-PMCwere being injected on every modern AMD desktop, where neither belongs.
BIOS guidance
- The BIOS checklist was missing IOMMU guidance for AMD and, in one path, suggested disabling the system's only GPU.
Kext database
- Full audit against live GitHub data fixed ~11 kexts that were silently broken (repo renamed/deleted, or the release asset pattern stopped matching) — including FakeSMC, VoodooHDA, NullEthernet, and the whole BrcmPatchRAM Bluetooth family.
- 3 kexts removed that no longer have a working source anywhere.
Other
- CI suite is green again (had 7 pre-existing failures).
Added
- HackMate-Core — a branded graphical OpenCore boot picker built on an OpenCanopy theme (the picker chrome only; the OpenCore binaries are unmodified). On by default with a first-run notice, wired through both the TUI and CLI build paths, with a QEMU test harness and a
--minimalpreview mode. - Rationale / explain — every decision the config.plist generator makes now comes with a plain-language reason and a link to the relevant Dortania section.
ocvalidate— OpenCore's own validator is run against the generated config as part of the build.- Live AMD_Vanilla patches — the AMD kernel patches are fetched from upstream with a 24-hour cache, falling back to the bundled copy offline.
- GitHub release metadata caching — release lookups are cached on disk, and
GH_TOKEN/ theghCLI are used for auth when available (avoids rate limits). - Hardware spec files — describe a target machine in a file to generate an EFI for hardware you're not currently running on.
- Pre-build hardware warnings for configs that simply won't boot: AMD laptop CPUs, mobile Atom/Celeron/Pentium, Rocket Lake with no dGPU (no video out), Atheros WiFi past High Sierra.
- Chipset-aware SSDT selection, closer to Dortania's prebuilt SSDT matrix;
SSDT-GPI0now targets the real GPIO controller path pulled from the DSDT. - 6 new kexts in the database.
- Test coverage for previously untested modules:
discord_prompt,config_editor,project_stats,efi_doctor,oc_log. - HackMate Community — a Reddit-style discussion board hosted on GitHub Pages.
Changed
- Kext load order (
LOAD_ORDER) is now complete, and touchpad kext selection trustsprofile.touchpad_type. - Cleaned up comment bloat across the codebase.
v3.3.4 — CPU/macOS version fix, USB enumeration, standalone recovery download
Prompted by community testing feedback (Discord).
- Fixed macOS Monterey requiring 5th-gen+ Intel CPUs — Sandy Bridge, Ivy Bridge, and Haswell all support Monterey as their last native version per Dortania's CPU guide; they're no longer wrongly excluded from the version list.
- Fixed USB drives not being enumerated on Windows when blank/unpartitioned or when Windows didn't auto-assign a drive letter — these previously vanished from the list entirely even though they were detected.
- Added a standalone "Download Recovery" screen (both the Flutter and Tkinter GUIs) to fetch a recoveryOS image from Apple directly, without needing the full build wizard or running macrecovery.py by hand.
v3.3.3 — log checker no longer repeats advice you already followed
Fixes #57.
The "Recovery image root hash check failed" diagnostic always told you to set SecureBootModel to Disabled — even when your config.plist already had it Disabled. The log checker now reads the config.plist next to the log you're analyzing and, if that setting is already correct, points you at the actual likely causes instead (AMD kernel patch mismatch, DmgLoading/ScanPolicy, or a genuine hang after ExitBootServices).
v3.3.2
Fixes CPU-generation detection (was misreporting incompatible macOS versions on some CPUs, e.g. Pentium/Celeron, due to a hardware-scan ordering bug) and a Build EFI wizard bug where the hardware review screen was skipped instead of waiting for confirmation.
v3.3.1
hotfix for v3.3.0 — the flutter gui zip didn't actually work standalone.
it only ever contained the flutter app itself. worked every time i tested it because i was always running it from inside the repo, where the python backend was sitting a few folders up for it to find. extract the zip anywhere else (like literally anyone downloading it off the release page) and it just said "bridge is not running."
fixed: the python backend now gets compiled into its own exe and bundled alongside gui_flutter.exe in the zip. tested by extracting to a folder with nothing else nearby — connects clean now.
v3.3.0
Two new packaged GUI exes, on top of the existing terminal HackMate.exe.
HackMate-GUI.exe — the tkinter gui, packaged for the first time. previously you had to run it from source (hackmate_gui.py); now it's a standalone windowed exe just like the TUI one, self-elevates via UAC on launch.
flutter gui, zipped and attached to every release. the newer alternative frontend (shoutout GaM1ngN0tDev) — build history, log checker, efi health check, disk map, restore, usb mapping, config editor, and the full build efi wizard. windows only for now; linux/macos have platform scaffolding in place but are untested on either.
fixed a self-update bug this introduced. the auto-updater used to grab "whichever .exe is listed first" on a release — harmless with one exe, wrong the moment there were two. it now matches the exe you're actually running by name, so the tkinter build won't tell you to download the TUI's exe or vice versa.
as always: nothing here touches how macos itself is installed — this is still the same automate-the-Dortania-guide approach with the same underlying tools (macrecovery, ssdttime, acidanthera kexts).
v3.2.0
Adds a second desktop GUI (Flutter, `gui-flutter/`) alongside the existing Textual TUI and Tkinter GUI, backed by a new JSON-RPC bridge over the same Python backend. Covers build history, log checking, EFI health check, disk map, restore, USB mapping, config editing, and the full guided/manual EFI build wizard. It's a separate opt-in frontend, not a replacement — the TUI and Tkinter GUI still work exactly as before, and this release's exe is still built from the TUI.
Auto-include XHCI-unsupported kext for OEM Coffee Lake desktops. B365/Q370/C246 (and similar OEM Coffee Lake boards) need this kext for USB to work correctly out of the box; HackMate now detects and includes it automatically instead of requiring a manual add.
Fixed HfsPlus.efi validation, added a DSDT registry fallback on Windows. A valid HfsPlus.efi was being incorrectly rejected in some builds; also added a registry-based fallback for dumping the DSDT on Windows when the usual method isn't available.
USB partition sizing now respects actual disk capacity. Formatting no longer tries to allocate more space than a drive actually has, fixing failures on smaller USB sticks.
As always: nothing here touches how macOS itself is installed — this is still the same automate-the-Dortania-guide approach with the same underlying tools (macrecovery, SSDTTime, acidanthera kexts).
v3.1.0
Feature release — ported over the best ideas from comparing HackMate against RapidEFI-Tool, another OpenCore EFI builder.
Real PCI-SIG/USB-IF hardware database. HackMate now bundles the actual pci.ids/usb.ids databases instead of relying only on whatever the host OS reports — fixes GPU names showing up as generic "Device" placeholders on minimal Linux environments or driverless Windows installs.
Build history. Every successful build now saves a snapshot (hardware, macOS version, config.plist location) to a new "Build History" screen, so you can look back at a past build and reopen its config.plist instead of starting over.
Auto-disable unsupported Realtek WiFi. Realtek PCI WiFi cards have no macOS driver on any version. HackMate now detects this and generates an SSDT that disables the card outright (when it can identify it unambiguously in your DSDT) instead of just warning and leaving it enabled to potentially cause boot issues.
Bigger config editor. The Advanced tab in Edit Config now lets you toggle individual kexts and SSDTs on/off, and edit Serial/MLB/System UUID directly — on top of the existing boot-args, SIP, framebuffer, and audio-layout tools.
Multi-language UI. English, Spanish, Portuguese, and Simplified Chinese, switchable from the welcome screen.
As always: nothing here touches how macOS itself is installed — this is still the same automate-the-Dortania-guide approach with the same underlying tools (macrecovery, SSDTTime, acidanthera kexts).
v3.0.3
Fixes another real boot hang, found from a full OpenCore debug log this time (not just a screenshot).
The bug: HfsPlus.efi is fetched from a raw GitHub URL (OcBinaryData, unpinned, no release asset to size-check against) with zero validation and a single attempt — unlike every other download in HackMate. A truncated or corrupted response got written straight into EFI/OC/Drivers/HfsPlus.efi. The log showed OpenCore loading OpenRuntime.efi fine, then hanging partway through loading HfsPlus.efi — before the boot picker ever appeared.
The fix: the download is now validated (minimum size + PE header check) and retried up to 3 times, matching the pattern already used for the OpenCore zip itself. Bad byte-for-byte downloads get rejected and re-fetched instead of silently bricking the boot.
Also includes the v3.0.2 SSDT-PLUG safety fix from the same user's earlier rebuild.
Found via a real user's full boot log in the Discord.
v3.0.2
Fixes a boot hang found via a real user's rebuild after v3.0.1.
The bug: when HackMate couldn't read a machine's DSDT at all (no ACPI dump available, SSDTTime unreachable), it still injected the bundled fallback SSDT-PLUG — which hardcodes _SB.PR00 as a legacy Processor object. If that doesn't match the board's real CPU object, OpenCore can hang loading ACPI tables, before the boot picker ever shows up. That's exactly what happened: EFI generation completed clean (32/32 checks passed), but the machine froze right after "Watchdog status is 0" with no picker.
The fix: when the DSDT can't be read, HackMate no longer guesses — SSDT-PLUG is reported as an error with instructions to retry the build or run SSDTTime manually, instead of silently injecting a possibly-wrong SSDT that can hang the boot.
Found via a real user's rebuild in the Discord.