OC OCforge GitHub โ†—

Install guide

From bare hardware to a bootable EFI

OCforge scans a machine, works out which macOS release its hardware can actually run, and assembles the OpenCore config.plist, kexts, and SSDTs to match. Two ways to get from there to an installed Mac โ€” pick one below.

Path A

Regular build

The target machine has internet during install โ€” the usual case. Build an EFI with the GUI, boot the normal macOS installer or recovery, done.

Read the steps โ†’

Path B

Offline installer

The target machine shouldn't or can't touch the internet mid-install โ€” air-gapped, metered, or just unreliable Wi-Fi. Stage everything on a USB ahead of time instead.

Read the steps โ†’

Path A

The regular build

The GUI, on Windows: five tabs, no terminal required. It doesn't have to be the target machine itself, though it usually is.

1

Get the app

Grab OCforge-GUI-windows-x64.zip from the releases page and extract it.

2

Launch it

Run the .exe. On first launch it'll prompt you to install OCforge-CLI โ€” accept, the GUI needs it to actually do anything.

3

Detect

Open the Detect tab and press Detect This PC. It reads out your specs โ€” CPU, GPU, network, board, storage.

4

Plan

Switch to Plan, pick the macOS version you want to install, then press Generate Plan. It lays out the SMBIOS model, every kext, every SSDT, and any warnings โ€” scroll all the way down the page to make sure nothing's flagged as broken before moving on.

5

Config

Open Config and press Generate Config.

6

Forge

Open Forge. It'll ask where the EFI should go โ€” make a folder on your desktop, copy its path, and paste it into the textbox. Then you'll see four options:

OptionNotes
Get the recovery image for that macOSWorth leaving on โ€” it's only ~600MB or a bit more, but it can be slow to fetch
Build SSDTs from your machineOnly works on Linux right now โ€” Windows support is still a work in progress
Use the OpenCore debug buildLeave this off unless you specifically need debug logging
Get the offline image for that macOSLeave this off โ€” it takes ages; see the offline installer guide below if you actually need it

Path B

The offline installer

For a target machine that shouldn't or can't touch the internet mid-install. The manual route below uses gibMacOS and UnPlugged โ€” both by corpnewt, credit to them. There's also a one-command version further down if you'd rather let ocforge handle the staging.

1

Get gibMacOS

Download gibMacOS from corpnewt's GitHub and unzip it.

2

Run it

Use gibMacOS.bat โ€” you'll need Python installed for it to run.

3

Pick your build

You'll see a long list of macOS versions. Scroll down first and make sure recovery-only mode is off โ€” it should read R. Toggle Recovery-Only (Currently Off) โ€” then pick the build you want. This downloads the full installer, not just the recovery.

4

Get the installer onto a USB

Once it's done downloading you'll have a handful of files: com_apple_MobileAsset_MacSoftwareUpdate, InstallAssistant.pkg, InstallInfo, MajorOSInfo, UpdateBrain. Only InstallAssistant.pkg matters here. Get a second USB โ€” 20GB or more, formatted ExFAT โ€” and copy that file onto it. Then grab UnPlugged.command (also corpnewt) and put it on the same USB.

5

Run UnPlugged from the installer

Boot the target machine into the macOS installer. Before anything else, open Disk Utility and format the target disk or partition as APFS, giving it any name you like.

Then go to Utilities โ†’ Terminal and find your USB's volume name:

cd /Volumes/
ls

Once you spot it in the list, switch into it and run the script:

cd /Volumes/your-usb-name
./UnPlugged.command

Confirm the detected macOS version with y, choose "Choose a locally discovered Install [macOS version].app", continue, then pick the disk you formatted earlier by its number and press enter.

โšก

Prefer the terminal? One command does steps 1โ€“4

Same spec file as the regular path. This step is slow โ€” it's downloading Apple's full installer image via gibMacOS under the hood.

ocforge offline-installer --spec my-pc.json --out ./offline-installer

What comes out the other side:

./offline-installer/EFI/ โ€” your usual EFI, unchanged ./offline-installer/com.apple.recovery.boot/ โ€” the boot environment ./offline-installer/ExFAT/InstallAssistant.pkg โ€” the actual installer ./offline-installer/ExFAT/UnPlugged.command

Format your USB with a FAT32 partition (~1 GB โ€” holds EFI/ and com.apple.recovery.boot/) and an ExFAT partition (the rest โ€” everything under ExFAT/), then follow step 5 above from Terminal. Or skip the manual formatting and let ocforge do both:

ocforge offline-installer --spec my-pc.json --usb /dev/sdX

UnPlugged itself still has to run from inside a booted macOS installer/Recovery โ€” it's a bash script using diskutil/installer/asr, real macOS APIs nothing outside that environment has, so ocforge can't run it for you. It only handles getting everything into the layout UnPlugged expects.


After either path

Map your USB ports

Both paths above ship USBToolBox.kext โ€” the driver โ€” but not a map of your physical ports, which is specific to this exact board and has to be built once. Skip it and USB mostly works anyway; do it properly and every port reports the right speed and there's no 15-port ceiling surprise later.

1

Get the mapping app โ€” on Windows

Not the kext you already have โ€” a separate tool, USBToolBox/tool. Download Windows.zip from its releases and run Windows.exe โ€” a terminal-style menu opens. Mapping happens on Windows, not macOS: only Windows can auto-detect USB2/USB3 companion port pairs and guess port types, and macOS 11.3+ has a broken XhciPortLimit that makes mapping from within macOS more painful. No Windows install handy? Boot a Hiren's BootCD PE USB and run the tool from its cmd (Shift+F10).

2

Discover every port

Press D for Discover Ports. Plug a device into one port at a time, wait for it to show up in the list, then unplug and move on โ€” don't rush this.

Test each type properly:

Port typeWhat to do
USB 3 Type-AOne device is usually enough (companion detection works on Windows); use a USB2 and USB3 device if you want to be sure
USB-CPlug in, note it, unplug, flip the plug over, plug it back in โ€” orientation can enumerate differently
Legacy USB 1.1 (old OHCI/UHCI boards)Plug in a mouse or keyboard โ€” most modern USB2 devices skip straight past the 1.1 personality
Internal-only (headers, built-in webcam/BT)No device needed โ€” just leave it typed correctly, you'll mark it internal below
3

Type your ports and mind the 15-port cap

Press S for Select Ports. For each detected port, set its real type and mark it internal or external. Apple caps every USB controller at 15 mapped ports โ€” most modern boards physically expose more, so the tool will warn you if you're over. Disable ports you'll genuinely never use (an unwired header, a dead legacy port) rather than cutting the last N in the list at random โ€” check what each one is actually wired to first.

4

Build the map

Press K to build. Pick the USBToolBox kext format โ€” it pairs with the USBToolBox.kext driver you already have installed. (The alternative, AppleUSBHostMergeProperties, is a native-Apple-style injector if you'd rather not depend on the third-party driver.) Out comes UTBMap.kext โ€” a real kext folder, generated for this board specifically โ€” plus a Ports.txt summary worth keeping for reference.

5

Add it to your EFI

Copy the whole folder in:

EFI/OC/Kexts/UTBMap.kext

Then add a matching entry under Kernel โ†’ Add in config.plist โ€” OCforge doesn't generate this one for you automatically, since it's tied to a map that doesn't exist until you've built it. The Editor tab's plist tree view (or ocforge plist show / save) is the quickest way: duplicate the existing USBToolBox.kext entry, change BundlePath to UTBMap.kext, leave everything else the same shape. Order matters โ€” USBToolBox.kext must load before UTBMap.kext.

6

Reboot and check

Every port you mapped should now show its correct type in About This Mac โ†’ System Report โ†’ USB, instead of the generic fallback behavior USBToolBox uses with no map at all โ€” and the boot log shouldn't show any "no personality found" or over-the-limit warnings.