chrisdecember/wow-mac-boost

Fixes WoW running at a third of its frame rate on Apple Silicon Macs: a tiny overlay that keeps macOS from parking the GPU at its minimum clock

Shell

7

2 commits

updated Sep 19, 2026

See the code

See what people are saying

README

wow-mac-boost

A tiny macOS helper that stops World of Warcraft from running at a third of its frame rate on Apple Silicon.

The problem

On an M3 Pro MacBook, the WoW Classic beta client (1.60.1) sat at about 35 fps with the game in front, on AC power, no thermal throttling, Low Power Mode off. Pressing a volume key made it jump to 85 fps for a few seconds, then it fell back.

An Instruments Metal System Trace showed why. With the game as the only thing on screen, macOS held the GPU in its Minimum performance state. The moment any other window was drawn above the game (the volume HUD, or a 32 pixel test window), the GPU went to Maximum and the frame rate more than doubled.

conditionGPU performance statefps
game frontmost, nothing above itMinimum33 to 35
small window drawn above the gameMaximum80 to 89
window removeddecays backtoward 30

The fix

wowoverlay is a 32x32 pixel, 3% opacity, click-through, always-on-top window in the bottom right corner of the screen. That is all it does. While it is up, macOS composites the game with it and keeps the GPU clocked up. It exits by itself when WoW quits.

It does not read, inject into, or modify the game, its memory, its files or its network traffic. It is an ordinary window from a separate process, the same as a volume HUD or a notification.

Requirements

  • Apple Silicon Mac, macOS 13 or later
  • Xcode Command Line Tools for the Swift compiler: xcode-select --install

Install

git clone https://github.com/chrisdecember/wow-mac-boost.git
cd wow-mac-boost
./install.sh

This builds the overlay and puts wowboost, wowoverlay and wowdiag in ~/.local/bin. A stock Mac does not look in that folder for commands, so the installer adds it to your PATH in ~/.zshrc. Close the Terminal window and open a new one after installing, then wowboost will work.

"command not found: wowboost"

Your Terminal has not picked up the new PATH yet. Either open a new Terminal window, or run it by its full path:

~/.local/bin/wowboost

If you installed before this fix was added, run this once, then open a new Terminal window:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

Use

Start the game, then:

wowboost

Or launch the game and the overlay together:

wowboost play beta

play accepts beta, era, anniversary or retail. If WoW is not in /Applications/World of Warcraft, set WOWROOT to its folder first.

Stop it:

wowboost off

If the frame rate sags again while the overlay is on, switch to the animated variant, which redraws 30 times a second:

wowboost off
wowboost animate

Turn on the in-game frame rate counter (Ctrl+R by default) and toggle wowboost on and off to see whether your machine is affected. If nothing changes, you do not have this problem and do not need this tool.

Diagnostics (optional)

wowdiag is the listener used to find the problem. It needs full Xcode for the trace command; everything else works with stock macOS.

wowdiag snapshot          # arch, GPU utilisation, CPU, % of main thread waiting on the GPU, memory, thermals
wowdiag watch 5 60        # the same every 5 s for 60 s, logged to CSV in ~/wowdiag
wowdiag trace 10 mytag    # 10 s Metal System Trace: GPU clock state, fps, GPU ms per frame, top encoders
wowdiag settings          # GPU-relevant settings side by side for every installed client
wowdiag threads           # busiest threads and main thread top frames
wowdiag hud on            # Apple's Metal performance HUD (relaunch the game)

After a trace, python3 ~/.local/bin/persec.py <tables folder> prints fps and GPU performance state for each second.

Other findings for the 1.60.1 beta on Mac

  • Do not change giQuality with /console while in the world. On an M3 Pro it hung the GPU and froze the whole Mac twice, requiring a power button reset. giQuality 0 asserts in WorldGlobalIllumination.cpp:2094. giQuality 1 tints the world green. Leave it at 3.
  • With the GPU at full clock, one global illumination compute pass still runs alone at the start of every frame for 5 to 7 ms, which caps the client around 85 fps on this hardware. Classic Era holds 120 on the same machine.
  • gx.log reports a garbage GPU memory budget (17179869182 GB) on unified memory Macs.
  • The graphics adapter shows as "M3 Pro Low Power". That is Metal's isLowPower flag, not a power mode.

Tested on

MacBook Pro M3 Pro (18 core GPU), 18 GB, macOS 26.6.1, WoW Classic beta 1.60.1.69913. Reports from other machines and clients are welcome in the issues.

Licence

MIT

Contributors

chrisdecember

2 commits

chrisdecember/wow-mac-boost

Fixes WoW running at a third of its frame rate on Apple Silicon Macs: a tiny overlay that keeps macOS from parking the GPU at its minimum clock

Shell

7

2 commits

updated Sep 19, 2026

See the code

See what people are saying

README

wow-mac-boost

A tiny macOS helper that stops World of Warcraft from running at a third of its frame rate on Apple Silicon.

The problem

On an M3 Pro MacBook, the WoW Classic beta client (1.60.1) sat at about 35 fps with the game in front, on AC power, no thermal throttling, Low Power Mode off. Pressing a volume key made it jump to 85 fps for a few seconds, then it fell back.

An Instruments Metal System Trace showed why. With the game as the only thing on screen, macOS held the GPU in its Minimum performance state. The moment any other window was drawn above the game (the volume HUD, or a 32 pixel test window), the GPU went to Maximum and the frame rate more than doubled.

conditionGPU performance statefps
game frontmost, nothing above itMinimum33 to 35
small window drawn above the gameMaximum80 to 89
window removeddecays backtoward 30

The fix

wowoverlay is a 32x32 pixel, 3% opacity, click-through, always-on-top window in the bottom right corner of the screen. That is all it does. While it is up, macOS composites the game with it and keeps the GPU clocked up. It exits by itself when WoW quits.

It does not read, inject into, or modify the game, its memory, its files or its network traffic. It is an ordinary window from a separate process, the same as a volume HUD or a notification.

Requirements

  • Apple Silicon Mac, macOS 13 or later
  • Xcode Command Line Tools for the Swift compiler: xcode-select --install

Install

git clone https://github.com/chrisdecember/wow-mac-boost.git
cd wow-mac-boost
./install.sh

This builds the overlay and puts wowboost, wowoverlay and wowdiag in ~/.local/bin. A stock Mac does not look in that folder for commands, so the installer adds it to your PATH in ~/.zshrc. Close the Terminal window and open a new one after installing, then wowboost will work.

"command not found: wowboost"

Your Terminal has not picked up the new PATH yet. Either open a new Terminal window, or run it by its full path:

~/.local/bin/wowboost

If you installed before this fix was added, run this once, then open a new Terminal window:

echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc

Use

Start the game, then:

wowboost

Or launch the game and the overlay together:

wowboost play beta

play accepts beta, era, anniversary or retail. If WoW is not in /Applications/World of Warcraft, set WOWROOT to its folder first.

Stop it:

wowboost off

If the frame rate sags again while the overlay is on, switch to the animated variant, which redraws 30 times a second:

wowboost off
wowboost animate

Turn on the in-game frame rate counter (Ctrl+R by default) and toggle wowboost on and off to see whether your machine is affected. If nothing changes, you do not have this problem and do not need this tool.

Diagnostics (optional)

wowdiag is the listener used to find the problem. It needs full Xcode for the trace command; everything else works with stock macOS.

wowdiag snapshot          # arch, GPU utilisation, CPU, % of main thread waiting on the GPU, memory, thermals
wowdiag watch 5 60        # the same every 5 s for 60 s, logged to CSV in ~/wowdiag
wowdiag trace 10 mytag    # 10 s Metal System Trace: GPU clock state, fps, GPU ms per frame, top encoders
wowdiag settings          # GPU-relevant settings side by side for every installed client
wowdiag threads           # busiest threads and main thread top frames
wowdiag hud on            # Apple's Metal performance HUD (relaunch the game)

After a trace, python3 ~/.local/bin/persec.py <tables folder> prints fps and GPU performance state for each second.

Other findings for the 1.60.1 beta on Mac

  • Do not change giQuality with /console while in the world. On an M3 Pro it hung the GPU and froze the whole Mac twice, requiring a power button reset. giQuality 0 asserts in WorldGlobalIllumination.cpp:2094. giQuality 1 tints the world green. Leave it at 3.
  • With the GPU at full clock, one global illumination compute pass still runs alone at the start of every frame for 5 to 7 ms, which caps the client around 85 fps on this hardware. Classic Era holds 120 on the same machine.
  • gx.log reports a garbage GPU memory budget (17179869182 GB) on unified memory Macs.
  • The graphics adapter shows as "M3 Pro Low Power". That is Metal's isLowPower flag, not a power mode.

Tested on

MacBook Pro M3 Pro (18 core GPU), 18 GB, macOS 26.6.1, WoW Classic beta 1.60.1.69913. Reports from other machines and clients are welcome in the issues.

Licence

MIT

Contributors

chrisdecember

2 commits

Languages

Shell

72.4%

Python

20.5%

Swift

7.1%