A standalone, interactive Install → Patch → Enable → Revert tool for getting NVIDIA's legacy Web Driver 387.10.10.10.40.140 working on Pascal-class GPUs under macOS versions where Apple no longer ships or supports NVIDIA drivers.
Supported Pascal GPUs include:
- NVIDIA GeForce GTX 1050
- NVIDIA GeForce GTX 1060
- NVIDIA GeForce GTX 1070
- NVIDIA GeForce GTX 1080
- NVIDIA TITAN X (Pascal)
- NVIDIA TITAN Xp
- NVIDIA Quadro P-series
- Other Pascal-based NVIDIA GPUs supported by the legacy Web Driver
The project is a simplified, self-contained implementation inspired by the model-specific NVIDIA Web Driver patching approach used by OpenCore Legacy Patcher.
This is not a replacement for OpenCore Legacy Patcher.
OCLP handles many additional aspects of unsupported macOS installations, including APFS system-volume snapshots, re-sealing, re-blessing, root patches, configuration management, and hardware-specific edge cases that this tool does not handle.
The tool uses a simple numbered terminal menu.
No command-line arguments are required.
After starting the program, select an operation by entering its number:
========================================================================
NVIDIA Pascal Web Driver 387.10.10.10.40.140
========================================================================
Platform: Darwin
Dry run: OFF Force GPU check: CHECK Rebuild KC: ON
Workdir: nvidia_webdriver_work
Pkg URL: https://...
------------------------------------------------------------------------
[ 1] Install (download + expand driver package)
[ 2] Patch (copy kexts into place, back up originals)
[ 3] Enable (set NVRAM flag, rebuild kernel collection)
[ 4] Revert (undo Patch/Enable from backup)
[ 5] Run All (Install -> Patch -> Enable)
[ 6] Toggle dry run [OFF]
[ 7] Toggle skip GPU check [OFF]
[ 8] Toggle rebuild kernel collection [ON]
[ 9] Edit working directory
[10] Edit package URL
[11] Select local .pkg file
[12] Quit
------------------------------------------------------------------------
[ 0] Quit
Choose an option:
The interface is designed to be usable directly from Terminal without needing to remember command-line flags.
The tool provides five main operations.
| Operation | Description |
|---|---|
| Install | Downloads or uses a local NVIDIA Web Driver .pkg and extracts its driver components. |
| Patch | Backs up existing files, installs the Pascal Web Driver components, and removes the stock NVDAStartup.kext. |
| Enable | Sets the nvda_drv=1 NVRAM variable and optionally rebuilds the kernel collection. |
| Revert | Restores the original files from the backup, removes the nvda_drv NVRAM variable, and optionally rebuilds the kernel collection. |
| Run All | Performs Install → Patch → Enable automatically. |
Selecting:
[5] Run All
performs:
Install
↓
Patch
↓
Enable
Revert is never automatically included in Run All.
Use option 4 when you explicitly want to undo the patch.
| Operation | macOS | Windows | Linux |
|---|---|---|---|
| Install | ✅ | ✅ | ✅ |
| Patch | ✅ | ❌ | ❌ |
| Enable | ✅ | ❌ | ❌ |
| Revert | ✅ | ❌ | ❌ |
| Run All | ✅ | Install only | Install only |
macOS is the intended platform for the complete tool.
The following operations require macOS:
- Patch
- Enable
- Revert
- Run All beyond the Install stage
The program can still be started on Windows or Linux.
Install can download and retain the NVIDIA Web Driver package.
However, Patch, Enable, and Revert will refuse to execute because they depend on macOS-specific components such as:
.kextkernel extensions/System/Library/Extensions/Library/Extensionskmutilnvramcsrutil
A Windows or Linux installation cannot load a macOS .kext.
If you download the .pkg on Windows, you can transfer it to the Mac afterward.
For the complete Patch / Enable / Revert workflow:
- A real Mac running a compatible macOS version.
- Python 3.
- Root access.
- Internet access for downloading the Web Driver, unless using a local
.pkg. - SIP disabled for operations that modify protected system locations.
- A recovery method available before modifying the system.
Run the program with:
sudo python3 NVDA-Patch.py.pyDepending on the filename you use, for example:
sudo python3 NVDA-Patch.pyBefore attempting to patch protected macOS system files, SIP must be disabled.
Boot into macOS Recovery and run:
csrutil disableFor systems using a sealed system volume, the script also expects:
csrutil authenticated-root disableThen reboot back into macOS.
Check the current SIP state with:
csrutil statusThe program also performs its own SIP check before non-dry-run patching operations.
Important: Disabling SIP reduces macOS security. Do this only when you understand the consequences.
Place the script somewhere convenient, for example:
~/Downloads/NVDA-Patch.py.py
Navigate to the directory containing the script:
cd ~/Downloadssudo python3 NVDA-Patch.py.pyThe recommended first step is:
[6] Toggle dry run
Turn Dry Run ON.
Then use:
[5] Run All
Dry Run allows the script to show what it intends to do without making the actual system modifications.
Downloads the NVIDIA Web Driver package and expands it into the configured working directory.
The default driver version is:
387.10.10.10.40.140
The default package URL is:
https://us.download.nvidia.com/Mac/Quadro_Certified/387.10.10.10.40.140/WebDriver-387.10.10.10.40.140.pkg
The downloaded package is stored in:
./nvidia_webdriver_work/
The expanded payload is stored under:
./nvidia_webdriver_work/expanded/
On Windows or Linux, automatic macOS package extraction is skipped. The .pkg is retained so it can be transferred to a Mac or manually inspected with a suitable archive tool.
Patch installs the Pascal-specific NVIDIA Web Driver components.
Before changing anything, the script backs up existing files.
The main system locations are:
/System/Library/Extensions
/Library/Extensions
The following system-volume bundles are installed:
GeForceAIRPluginWeb.bundle
GeForceGLDriverWeb.bundle
GeForceMTLDriverWeb.bundle
GeForceVADriverWeb.bundle
The following extensions are installed:
GeForceWeb.kext
NVDAGP100HalWeb.kext
NVDAResmanWeb.kext
NVDAStartupWeb.kext
The stock:
NVDAStartup.kext
is removed so that the Web Driver can take priority.
Enable sets the following NVRAM variable:
nvda_drv=1
This is the flag checked by the NVIDIA Web Driver.
If Rebuild Kernel Collection is enabled, the script also runs:
kmutil install --volume-root / --update-allAfter enabling the driver, reboot the Mac.
Revert attempts to undo the changes made by Patch and Enable.
It:
- Restores backed-up system files.
- Restores backed-up data-volume extensions.
- Restores the original
NVDAStartup.kextif one existed. - Removes files that did not exist before patching.
- Clears:
nvda_drv
- Optionally rebuilds the kernel collection.
Run Revert if you need to return to the pre-patch state.
Run All executes:
Install
↓
Patch
↓
Enable
This is the easiest option for a complete installation.
First:
[6] Toggle dry run → ON
[5] Run All
Review the output.
If everything looks correct:
[6] Toggle dry run → OFF
[5] Run All
The script will request confirmation before performing destructive operations.
Dry Run prevents actual filesystem/NVRAM modifications.
When enabled, the menu shows:
Dry run: ON
Use this before performing the real patch.
By default, Patch checks for a Pascal-class NVIDIA GPU using:
system_profiler SPDisplaysDataTypeThe script looks for Pascal-related identifiers such as:
GTX 1050
GTX 1060
GTX 1070
GTX 1080
TITAN X (Pascal)
TITAN Xp
Quadro P
P100
If your GPU is not detected automatically but you know it is compatible, enable:
[7] Toggle skip GPU check
The status will change to:
Force GPU check: SKIP
Do not enable this option unless you know your GPU is compatible with the driver.
Controls whether the script rebuilds the kernel collection after Enable or Revert.
When enabled:
Rebuild KC: ON
The script uses:
kmutil install --volume-root / --update-allThe default working directory is:
./nvidia_webdriver_work
It contains the downloaded package and extracted driver payload.
You can change it from the menu:
[9] Edit working directory
For example:
/Users/sten/NVIDIA-WebDriver
The default URL points to NVIDIA's legacy Web Driver package.
You can replace it with another package URL using:
[10] Edit package URL
This is useful if the original NVIDIA download location becomes unavailable.
If you already have:
WebDriver-387.10.10.10.40.140.pkg
you do not need to download it again.
Choose:
[11] Select local .pkg file
and enter the full path.
For example:
/Users/sten/Downloads/WebDriver-387.10.10.10.40.140.pkg
The next Install operation will use the local package instead of downloading it.
Backups are stored at:
/Library/Application Support/patch_nvidia_pascal/backup
The structure is:
backup/
├── system_extensions/
├── data_extensions/
└── system_removed/
backup/system_extensions/
contains backups of existing files from:
/System/Library/Extensions
backup/data_extensions/
contains backups of existing files from:
/Library/Extensions
backup/system_removed/
contains files such as the original:
NVDAStartup.kext
if they existed before patching.
Existing backups are not overwritten by subsequent Patch operations.
This is intentional.
It means the backup represents the state from before the original patch rather than the state from the most recent patch attempt.
After Patch and Enable complete, reboot the Mac.
After reboot, check the NVRAM setting:
nvram nvda_drvExpected:
nvda_drv 1
You can also check loaded NVIDIA extensions:
kextstat | grep -i nvdaDepending on the macOS version and driver-loading mechanism, output can vary.
If you did not enable automatic rebuilding, you can manually run:
sudo kmutil install --volume-root / --update-allThen reboot.
This tool directly modifies locations under:
/System/Library/Extensions
Modern macOS versions use a sealed APFS system volume.
As a result, simply copying files into the filesystem may not be enough for the changes to persist or become bootable.
This project does not fully manage:
- APFS system snapshots
- System-volume sealing
- Re-sealing
- Re-blessing
- Snapshot selection
- OpenCore root patching
This is one of the major differences between this project and OCLP.
If the Mac fails to boot after patching, Recovery may be required.
This project intentionally has a narrow scope.
It does not attempt to replace OpenCore Legacy Patcher.
It does not:
- Manage OpenCore
config.plist - Install or configure OpenCore
- Manage APFS system snapshots
- Automatically re-seal the system volume
- Automatically re-bless the system
- Restore
GPUCompiler.frameworkfor OpenCL compatibility - Handle every NVIDIA GPU generation
- Handle Tesla-specific driver files
- Handle Kepler-specific driver files
- Guarantee compatibility with every macOS release
- Guarantee that NVIDIA's legacy download URL remains available
- Automatically recover an unbootable system
The driver version is specifically:
387.10.10.10.40.140
and the project is specifically focused on Pascal-class NVIDIA hardware.
The Web Driver was designed for older macOS releases.
A working installation depends on more than simply copying .kext files.
Compatibility can depend on:
- macOS version
- kernel version
- GPU model
- system architecture
- framework versions
- driver signing
- SIP configuration
- APFS system-volume state
- NVRAM
- kernel collections
Therefore, successful execution of the script does not guarantee that the NVIDIA driver will actually load.
If your GPU is compatible but system_profiler does not report one of the expected names:
No Pascal GPU detected via system_profiler.
Enable:
[7] Toggle skip GPU check
Then retry Patch.
Start the program with:
sudo python3 NVDA-Patch.py.pyBoot into Recovery and run:
csrutil disable
csrutil authenticated-root disableThen reboot.
Check:
nvram nvda_drvThen:
kextstat | grep -i nvdaAlso check:
system_profiler SPDisplaysDataTypeIf the system volume is sealed, the files may not be active even though they were copied successfully.
Do not repeatedly run Patch.
Boot into macOS Recovery and use the available recovery options.
If a backup exists, the script's Revert operation can restore the files it changed:
[4] Revert
However, Revert cannot guarantee recovery from problems caused by APFS system snapshots or other boot-level changes.
For serious boot problems, Recovery, Time Machine, reinstalling macOS, or OCLP's root-patch removal/recovery mechanisms may be required.
This program modifies critical macOS components.
It can modify:
/System/Library/Extensions
/Library/Extensions
NVRAM
Kernel collections
These changes can cause:
- Driver loading failures
- Graphics problems
- Kernel panics
- Boot failures
- Loss of hardware acceleration
- An unbootable system
Make sure you have:
- A current backup
- Access to macOS Recovery
- A working keyboard
- A way to boot the Mac without the NVIDIA driver
- Familiarity with Recovery Terminal
Always perform a Dry Run first.
The safest workflow is:
sudo python3 NVDA-Patch.py.py[6] Toggle dry run
[5] Run All
Make sure the detected GPU and paths look correct.
[6] Toggle dry run
[5] Run All
Confirm the destructive operations when prompted.
After the operation completes, reboot macOS.
nvram nvda_drvand:
kextstat | grep -i nvdaThis project is provided for testing, research, and educational purposes.
It modifies protected macOS system files and NVRAM and can potentially make a system unbootable.
Use it at your own risk.
The author does not guarantee compatibility with any particular Mac, NVIDIA GPU, macOS version, kernel version, or system configuration.
For production or daily-driver systems, OpenCore Legacy Patcher is recommended because it provides a considerably more complete and tested root-patching workflow.
See the repository's license file for licensing information.