This is the latest, open and most up-to-date list of games that are compatible with the M1 Mac, whether it uses the original M1 chip or the M1 Pro or M1 Max. Compatibility is broken down to Native ARM, Rosetta 2, iOS, CrossOver or Parallels.
The wiki is free to add information to, you can edit any page without an account. If you have any questions please read the Editing guide or come to the Discord.
I wrote a static recompiler that translates the game's code to C and builds it as a native arm64 app. You still need Rosetta installed, but only for a small helper that compiles the shaders.
I got around 80-110 FPS on my M1 Max at 4k resolution.
You need your own Steam copy of the Mac version. The repo has no game files. One script checks your Mac, translates your copy and builds the app. It takes about 5 minutes.
Press Cmd+F in game and you'll see the FPS counter.
let me know if you find any bugs and try it out.
I'm planning to do the same for LEGO Harry Potter whenever I have time!
Thank you to everyone who has tried and tested Mac-ever!
In just a week we've hit over 1000 downloads across CurseForge and Wago which is absolutely amazing, but I know there are more Mac gamers out there who are struggling with in-game optimisation.
For those who don't know, Mac-ever is the addon that measures your World of Warcraft: Forever setup against your Apple Silicon Mac, and works out the best settings for the frame rate you want.
If you have any feedback, please favourite Mac-ever on CurseForge or Wago and leave a comment. This will help spread the message that there is a way to improve the WoW: Forever Mac experience.
Equally, if you have troubleshooting queries, please get in touch on CurseForge (preferably), or here on Reddit, so I can try and work it out.
My 8BitDo Ultimate 2C Wireless worked in some games on macOS but was invisible to every game that uses Apple's GameController framework. I fixed it in the firmware. The controller now identifies as an Xbox Elite v2 over Bluetooth, so games see a fully supported controller with no drivers and no background software.
What the patch does
The controller now advertises itself as an Xbox Elite v2 over Bluetooth, which is an identity macOS already supports.
It sends input reports in the real Xbox Bluetooth format, so every button, stick, and trigger lands where Apple's driver expects it.
Rumble works. The stock Bluetooth rumble path was broken in a way that macOS could never use, and the patch repairs it.
Everything works except L4 and R4. The controller sends them, and SDL-based readers can see them, but macOS does not expose paddle button, so GameController-native games won't see them. If you want them in a game, remap them to standard buttons on the controller itself. Tested on an M5 Mac running macOS 27.
Caveats
This modifies firmware, so flash carefully. The script backs up your flash first, and the official 8BitDo updater can restore stock firmware over USB, but nothing is guaranteed. Flash at your own risk.
I built this with AI assistance, including the reverse engineering.
It only accepts the official 1.06 beta as the base image. Other versions are refused.
I only tested Apple Silicon on macOS 27. It may work on other devices as this patch is done in the controller firmware. If you try it on something else, I would like to hear what happens.
I have minimal programming knowledge, but since nobody else is working on this, I thought I'd give it a shot using AI. Since OpenEmu was brought to Apple Silicon this way, I figure, maybe I can use AI to get Azahar and OpenEmu to talk to each other...? I'm currently in the midst of getting the Vulkan renderer to talk to OpenEmu, and I've made good progress. Aside from that portion of the project, I have successfully built a 3DS plugin for OpenEmu - and I designed an icon (without AI!) for it too. For the moment, games are software-rendered and not really playable due to their speed (2-3fps on an M3 Max processor), but again, hardware rendering is in the works. Hopefully I can get it working. Stay tuned...
I made lp-engine, a native macOS runtime for LovePlus+, the Japanese Nintendo DS dating sim that never received an English release.
I developed it on an M5 MacBook Pro. The release includes a universal macOS app for both Apple Silicon and Intel Macs, alongside Windows and Linux builds.
This is not an emulator. It runs the original game from your own Japanese LovePlus+ BOXJ ROM, while replacing the DS hardware environment with a native desktop runtime. Nothing from the game is included in the app or repository. On first launch, it asks for your ROM, reads the necessary data into its own folder, and leaves the original file unchanged.
The native version includes the full English translation, higher resolution 3D, texture filtering, smoother toon shading, anti aliasing, optional smoother character motion, mouse touch input, keyboard and gamepad controls, microphone support, ordinary save files, and an in game clock that follows your Mac’s time.
The goal was not simply to put a DS image in a window. The original game logic and data are kept wherever possible, while the presentation can look much sharper than it ever could on the DS. The two screens stay side by side and upright, as if you are holding the console.
The English work covers the dialogue, menus, system messages, and redrawn interface graphics. LovePlus+ was built around fixed width Japanese text, so the runtime also adds proportional English layout and handles places where translated text interacts with original game logic.
In the latest instrumented playthrough, 96 percent of execution ran natively. The remaining original ARM functions run through an interpreter that shares the same memory model with the native Rust side.
I used AI extensively during the reverse engineering, implementation, and documentation work, but the result is checked against original game code, emulator recordings, replay fixtures, and differential tests.
I will put the download, source, and detailed reverse engineering documentation in the first comment. I would love to hear how it runs on other Macs, especially Intel machines.
Been pretty excited with the developments lately with NotProton and even the recent WINE drop... but I noticed that UTM 5.0.8 was just released, and some of the advances they've made throughout the 5.0 development cycle seem worth looking at!
For anyone who hasn't been following UTM recently, a few particularly interesting developments:
DirectX 11 acceleration for Windows 11 VMs, using DXMT.
(WOW!) Experimental DirectX 12 support, using Apple's D3DMetal.
Vulkan 1.3 support for Linux VMs, through VirtIO Venus and Mesa.
Continued improvements to GPU compatibility, rendering, and performance, including fixes for high-refresh-rate displays and graphics-related hangs.
Improved VM snapshots and other virtualization capabilities.
I think what interests me most is that we're seeing open-source virtualization on Apple Silicon progress beyond simply running Windows toward actually accelerating modern graphics APIs.
Obviously, this isn't to suggest that UTM has suddenly become a replacement for CrossOver (+NotProton) or Parallels for gaming. The Windows graphics driver is still experimental, and game compatibility remains limited. But the underlying progress seems pretty awesome, particularly considering how limited graphics acceleration used to be in UTM.
I'm curious whether anyone here has been experimenting with the newer UTM releases? Have you managed to get any interesting Windows games running, or noticed meaningful improvements compared with earlier versions?
Thanks to GPTK 4 beta 3, AC Black Flag Resynced now playable on Crossover. I'm using Crossover 26.3 with GPTK 4.0b3 on Medium Settings with DLSS Quality on 1600x1200 iPad display ratio. Got around 24-27 FPS. I could lower it or turn on frame gen to boost the FPS, but frame gen on metal still produce some graphic glitches sometime.
Sorry took the photos from my iPad, I'm using Sunshine & VoidLink on iPad with PS4 Controller as display and to control my Mac Mini M4. Took some screenshots on mac but it turns out to be a screenshot of another application.
With a custom patched of CrossOver 26.3 (26.3.0.39832), DXMT 0.80, Black Ops 2 (Steam Version running with Plutonium windows version) is working on M1 Pro MBP 14” 16GB. Video uploaded shows it running on external display G80SD HDR on even the game does not use it (1080p scaled on mac OS and in game at 1080p).
Also wined3d works too but I wanted to drop Vulkan/MoltenVK layer by using DXMT.
BO2 is 32 bits, the patches seems to have fixed some 32 bit programs that used to freeze or be really slow.
Game works well in multiplayer too, very smooth with built-in MBP display at 1512x982
My patch works at first with Plutonium r5354 too. I did not test a lot running BO2 without Plutonium but it works. I still have some dig up to do.
Few days ago I posted a multiplayer on plutonium r5354 offline only that I remove when I saw hours later that the description of the post wasn’t added by me… my bad for removing the video and creating confusion, i couldn’t properly edit the post...
Also the quality of the recording is bad my bad too… also the gameplay...
Looking for good MacOS games on a M1 Air that play well with just the trackpad and keyboard, no controllers. Prefer native apps but I have a crossover subscription if necessary. Have a 6 hour flight tomorrow
Has anyone noticed a real jump in Oblivion Remastered performance since GPTK 4.0b3?
I last played it about a year ago. It was playable, but I had to run 1080p with FSR on performance, and it never felt great (m3 pro 12 cpu/18gpu/36gb ram).
I’m curious whether that’s changed. Has anyone really min-maxed their setup, specific in-game settings or bottle variables? Anything you’d call secret sauce is welcome. I'm fine with sticking to Skyrim, Elden Ring and Clair Obscur as well, so perfectly fine to tell me I should simply move on.
Hey guys this is my first post ever on reddit.I've been a long time lurker looking at peoples cool projects and always wanted to contribute my self.However while I love researching and tinkering I have 0 coding and developer experience.This project is based of the efforts of other talented people who have landed the ground work for this all I am is a middle man with a ChatGPT Plus subscription and desire to play games like Rocket league and Dead by daylight on my Mac.Using GPT 6.1 Sol "I" (I know people will be triggered by "AI Slop" but I did look through various forums and do my research to fix certain issues preventing launching) have compiled a few fixes to get Rocket League and Dead by daylight running with full anti-cheat compatibility.This is a guide for Rocket league since I am working on Dead by daylight since performance is a work in progress and I have modified Steamac to get playable performance.I assure you it will come soon.I want to give huge credits to the talented devs that facilitated this I should not get credit you should give it to these guys:
- https://github.com/StonkGuy/eac-arm64-emulation-poc
- https://github.com/fxgl/steamac
As for performance on Rocket League it is pretty good getting around 140-150fps on 1080p max settings on my M5 MacBook Pro 24GB 10 core CPU and 10 Core GPU.Note this is running a virtual machine so you will likely need a minimum of 16GB RAM. Initally when you launch there will be a lot of stuttering due to shader compilation which in my experience after playing a few games will smoothen out.Also while this patch doesn't modify the anticheat or tamper with it there is still a chance you could get banned however I don't think you will but play with caution. To the best of my knowledge while I can't guarantee every anti cheat game will run and each game may require separate fixes or may not run I think StonkGuy's EAC patch could be expanded to other titles and if it works through proton on linux then it may be able to be run through this setup.Again its a hypothetical but after this Im a bit more optimistic. As for EA games with EA's proprietary anti-cheat will most likely not run through this setup as EA doesn't even support linux.I have seen a separate project that works on anticheat support for ARC Raiders and The Finals.This gives me hope for the future of Mac gaming. https://www.reddit.com/r/macgaming/comments/1x52ffb/arc_raiders_running_on_mac_not_cloud_gaming/ https://www.reddit.com/r/macgaming/comments/1x7l6tq/the_finals_also_working_on_macos/
I've Uploaded Gameplay Please excuse my horror gameplay I haven't played since It stopped working on Mac and my wifi is horrible (Precisely why I hate when people say "Use Geforce Now its latency is good" NOT FOR ME 😭 its a non-solution.). https://youtu.be/VJp97UEk_Ck
Since Its a Patch to the FEX translation layer I'm curious to see if it would work through Crossover Preview 27 without the VM for better performance. since it has an implementation of FEX.Unfortunately I can't test this out since I can't buy crossover so if someone more talented can that would be cool. Also I hope an actual dev can further this project; it’s still in its early stages. Just to Preface the guide I've attached Is completely AI generated based on the chat history of the conversation in which I implemented the fixes and everything I learnt along the way like bugs because its kinda long and tedious process of getting it setup.If you have any issues I most likely won't be able to help since I'm not an actual dev or anything but if you have access to ChatGPT subscription or Claude it can be really helpful for bug fixing and solving issues.If you do have access then you could just copy paste the guide and give the AI permissions if you feel comfortable with tAlso show some resilience and don't just go straight asking for help take the time to research and actual understand the issue and what's happening.I
Now I have a mini-rant on some things skip this if you wanna go straight to the guide:
After observing this subreddit for a while it really annoys how many people rant about "Ai-slop" and complain about vibe coded projects and hate anything besides Crossover.People completely lack nuance and are completely pessimistic.When any new technology comes out there always those people who fear-monger or make it seem 'cool' to not try out and tinker new stuff.While Ai can be negative people seem to completely overlook the positives.Yes I also dislike the Ai slop vibe coded launchers with 0 effort however there are many positive projects coming out the use of AI like decomps recomps and might incentivise developers to port games to the Mac because it becomes easier with AI.Also this crossover glazing needs to stop.While Codeweavers have done an amazing job with crossover and really deserve the praise and support not everyone is in a privileged position to spend 70USD which may not seem much but to people in different parts of the world or a kid who's 15 and his parents just got him a MacBook Air for school who wants to enjoy a few games on the side.Gaming should not be locked down to those who can afford it. Futhermore The people who constantly lack nuance and bring down genuine projects like Steamac which is linked above and Varmint https://github.com/kisasexypantera94/varmint which I used the Neptune virtualisation idea to get Dead By daylight running at decent performance.Options and competition is always great as it provides ingenuity and innovation and each person has unique ideas and perspectives that can help further progress the mac-gaming community.Just the fact we have options we should be grateful and this projects are what lead to new innovations in this mac-gaming space.If I was like ehh I can't run anti-cheat games I guess il just stick to geforce now I would never get this running and same with the talented people who made the foundational projects that have facilitated this.If the Steamac dev was like yea Il just stick to crossover none of this would have happened.vIm sorry guys lol I know its a loaded paragraph but its a externalisation of my frustration with those pessimistic type people who completely lack nuance on this sub and can't see that nothing is black and white things can be both good and bad like AI.
Rocket League on Apple Silicon: Steamac + StonkGuy FEX + Legendary
This guide installs the Epic Games version of Rocket League inside Steamac's SteamOS virtual machine. It uses the public Steamac app, StonkGuy's patched FEX and Proton Experimental.
The same steps apply to Apple Silicon MacBook Air, MacBook Pro, iMac, Mac mini, Mac Studio and Mac Pro models that meet Steamac's macOS requirements. Commands use your SteamOS home folder automatically; no Mac username, chip-specific setting or fixed game-install folder needs to be substituted.
Where to type: after Step 3, every command goes in Konsole inside SteamOS, unless a step explicitly says on your Mac. Run one command block at a time and wait for it to finish. Copy commands only—not terminal prompts or example output.
Step 1 — Prepare your Mac
You need:
An Apple Silicon Mac: M1 or newer.
macOS 15 or newer for Steamac.
16 GB RAM or more is recommended for this setup.
A Steam account and an Epic Games account.
Rocket League added to your Epic Games library.
Internet access and enough storage for SteamOS, Steam tools, the FEX build and Rocket League. Set aside roughly 100 GB of free Mac storage as a planning allowance; check the installer's actual space requirements before downloading.
On your Mac, visit the Rocket League Epic Games page, sign in, and add the game to your library if you haven't already.
Download the FX Steam Launcher.dmg. The source-code archives are not the app installer.
Open the DMG and drag FX SteamLauncher.app to Applications.
Open FX Steam Launcher from Applications.
The public release checked for this guide is 1.9.1. Its release page lists Apple Silicon and macOS 15+ support. Steamac releases
Step 3 — Create your SteamOS disk
In FX Steam Launcher on your Mac:
Choose Create New Disk….
Select the stable SteamOS branch if asked.
Review and accept the displayed agreements.
Choose where to save the disk image. A folder on the Mac's internal APFS drive is a straightforward choice.
Choose 128 GiB for the home/game storage area if space permits.
Set and remember the SteamOS user password if prompted.
Start creation and wait until SteamOS finishes booting.
Sign in to Steam inside the VM.
If macOS asks for microphone permission, allow it so the VM's audio input can initialise.
Leave VM CPU and RAM settings on their defaults initially. Keep SSH disabled; the steps below use the VM's own terminal.
Use Steamac's built-in Vulkan graphics path. If your version offers a Graphics path selector, choose Vulkan (classic). If it only offers a Vulkan driver selector, leave the default driver selected initially. Keep the initial display resolution at its default until the game launches; set your preferred resolution afterwards.
To find the Mac app's settings, click FX Steam Launcher → Settings… in the macOS menu bar, or press Command+,. Changes marked for the next start need a VM restart. Steamac settings and disk documentation
Step 4 — Open Desktop Mode and Konsole
Inside SteamOS:
Open Steam's main menu.
Select Power → Switch to Desktop.
Wait for the KDE desktop.
Open the application menu at the bottom left.
Search for Konsole and open it.
Click inside Konsole before entering commands. To paste, use right-click → Paste or Ctrl+Shift+V.
Check that you are in the Linux VM:
uname -m
The normal SteamOS guest result is:
aarch64
Keep Steam running in the background. Steamac's Desktop Mode runs inside the existing guest. Desktop Mode documentation
Step 5 — Install the Steam compatibility tools
Inside SteamOS, open Steam's Library, enable the Tools filter, and install these tools to the default SteamOS drive:
FEX-Emu: The FEX emulator tool
Proton Experimental: The standard x86-64 tool; not a tool labelled ARM64
Steam Linux Runtime 4.0: The standard runtime; not the separate ARM64 edition
Proton EasyAntiCheat Runtime: The Steam runtime tool
If a tool is hard to find, paste the corresponding command into Konsole, press Enter, then complete its installation dialog in Steam:
Install FEX-Emu:
steam steam://install/3127680
Install Proton Experimental:
steam steam://install/1493710
Install Steam Linux Runtime 4.0:
steam steam://install/4183110
Install Proton EasyAntiCheat Runtime:
steam steam://install/1826330
Wait until all four downloads finish. Opening an install dialog does not mean the tool has finished installing.
Valve documents runtime 4.0 as the runtime for Proton 11 and newer. StonkGuy's setup identifies Steam's FEX tool and Proton EAC Runtime. Valve runtime documentation, FEX setup
Each command should print a version. The SteamOS image used by the public FEX instructions includes the build tools. If one says command not found, stop here and check the FEX requirements instead of continuing with an incomplete build environment.
Step 7 — Download StonkGuy's public FEX setup scripts
This downloads the scripts. It does not build or replace the Mac app.
If the folder already exists from an earlier attempt, use that folder; do not paste the clone command repeatedly.
Step 8 — Build the patched FEX
Close any running games. Keep Konsole open.
Run:
cd "$HOME/steamac-fex-setup/fex-eac"
JOBS=2 sh build-fex.sh
Wait for the build to finish. This can take a while. The final output should include a line beginning with staged:.
If the compiler is killed because it runs out of memory, rerun with one job:
JOBS=1 sh build-fex.sh
The public script downloads the pinned eac-2610.2 FEX source and builds it inside SteamOS. You do not need to edit its source or apply individual patch files yourself. Public build script
Step 9 — Install the patched FEX
With games closed, run:
cd "$HOME/steamac-fex-setup/fex-eac"
sh install-fex-tool.sh
Check the installation:
sh install-fex-tool.sh status
The installer should report that the build was installed or is already installed. It backs up Valve's original files and verifies the replacement. Do not continue if it reports an incomplete stage or installation. Public installer
If it reports FEXServer running, close games, shut down and restart the VM, reopen Desktop Mode and Konsole, then rerun the install command before starting another game.
You should see Legendary's version. This installs the Python application into your home folder. You do not need an x86-64 AppImage or a separate Epic Games Launcher installation. Legendary requires Python 3.10+. Legendary project, Python package configuration
Open the login URL Legendary displays. If no browser opens automatically, copy the URL into the browser inside SteamOS.
Sign in to the Epic account that owns Rocket League.
Complete any two-factor authentication prompt.
Look for the returned authorizationCode.
Copy only the code's value into Legendary's terminal prompt and press Enter.
The result may be a plain page containing JSON. You do not need to navigate to the redirect URL yourself. If the code expires or fails, rerun auth --disable-webview and obtain a new one. Keep login codes private. Legendary authentication instructions
Confirm that Rocket League is in your library:
"$HOME/.local/share/legendary-env/bin/legendary" list
Find Rocket League. Its app name in this setup is Sugar. The listing is output, not a command—do not paste the whole listing back into the terminal.
Rocket League should appear with its installation folder. If your library lists a different app name, use the identifier actually shown for Rocket League and update the Sugar key/launch command in Step 13 accordingly. Legendary uses app identifiers for installation and launch. Legendary CLI documentation
Step 13 — Create the Rocket League Proton launcher
This helper connects Legendary's launch command to the installed Steam FEX, runtime and Proton tools. Legendary still supplies the game's executable and Epic authentication arguments.
In Konsole, paste the entire block below once, including the first and last lines:
cat > "$HOME/rocket-proton-wrapper.py" <<'PY'
#!/usr/bin/env python3
"""Epic Rocket League via stock Steam tools and the installed FEX tool.
This launch configuration does not patch Steamac, Proton or the game.
Legendary supplies the original executable and fresh authentication arguments.
"""
import json
import os
from pathlib import Path
import shlex
import sys
def prepare(home, arguments, inherited):
roots = [home / '.local/share/Steam', home / '.steam/steam', home / '.steam/root']
steam = next((p.resolve() for p in roots if (p / 'steamapps').is_dir()), roots[0].resolve())
common = steam / 'steamapps/common'
fex = common / 'FEX-Emu/fex-compat-tool'
runtime = common / 'SteamLinuxRuntime_4/_v2-entry-point'
proton = common / 'Proton - Experimental/proton'
eac = common / 'Proton EasyAntiCheat Runtime'
for label, path in [('FEX-Emu', fex), ('Steam Linux Runtime 4.0', runtime),
('Proton Experimental', proton), ('Proton EasyAntiCheat Runtime', eac)]:
if not path.exists():
raise ValueError(f'Missing {label}. Install it in Steam on the default SteamOS drive, then retry.')
for wine in [proton.parent / 'files/bin/wine64', proton.parent / 'files/bin/wine']:
if wine.is_file():
with wine.open('rb') as stream:
header = stream.read(20)
if header[:4] == b'\x7fELF' and header[5:6] == b'\x01' and int.from_bytes(header[18:20], 'little') == 183:
raise ValueError('This is ARM64 Proton. Install standard x86-64 Proton Experimental instead.')
config = Path(inherited.get('XDG_CONFIG_HOME') or home / '.config')
database = config / 'legendary/installed.json'
try:
game = Path(json.loads(database.read_text())['Sugar']['install_path'])
except (OSError, ValueError, KeyError, TypeError):
raise ValueError('Rocket League is not registered as Sugar in Legendary. Complete its installation first.')
if not game.is_dir():
raise ValueError('The Rocket League install folder is missing. Check Legendary list-installed --show-dirs.')
prefix = home / '.local/share/rocket-epic-prefix-experimental'
environment = dict(inherited)
environment.update({
'STEAM_COMPAT_DATA_PATH': str(prefix),
'STEAM_COMPAT_CLIENT_INSTALL_PATH': str(steam),
'STEAM_COMPAT_INSTALL_PATH': str(game),
'PROTON_EAC_RUNTIME': str(eac),
'EAC_LAUNCHERDIR': str(prefix / 'pfx/drive_c/users/steamuser/AppData/Roaming/EasyAntiCheat'),
'FEX_NEEDSSECCOMP': '1', 'PROTON_USE_XALIA': '0',
'PROTON_LOG': '0', 'WINEDEBUG': '-all',
'SteamAppId': '0', 'SteamGameId': '0', 'STEAM_COMPAT_APP_ID': '0',
})
chain = [str(fex), 'run', '--', str(runtime), '--verb=waitforexitandrun', '--']
if arguments == ['--check']:
return None, environment, game, prefix
if arguments == ['--probe']:
command = chain + ['/usr/bin/uname', '-m']
elif arguments:
command = chain + [str(proton), 'waitforexitandrun'] + arguments
else:
raise ValueError('Launch through Legendary, or use --check / --probe for setup checks.')
return command, environment, game, prefix
def main():
if sys.argv[1:] == ['--launch']:
legendary = Path.home() / '.local/share/legendary-env/bin/legendary'
if not legendary.is_file():
print('Install Legendary using Step 10 first.', file=sys.stderr)
return 1
wrapper = shlex.join([sys.executable, str(Path(__file__).resolve())])
os.execv(str(legendary), [str(legendary), 'launch', 'Sugar', '--no-wine', '--wrapper', wrapper, '-dx11'])
return 0
try:
command, environment, game, prefix = prepare(Path.home(), sys.argv[1:], os.environ)
except ValueError as error:
print(f'Setup check: {error}', file=sys.stderr)
return 1
if command is None:
print('Setup paths found.')
return 0
prefix.mkdir(parents=True, exist_ok=True)
# Legendary selects the executable's working directory. Preserve it so
# relative game/DLL paths behave as they do in its standard launch.
os.execve(command[0], command, environment)
if __name__ == '__main__':
raise SystemExit(main())
PY
chmod 700 "$HOME/rocket-proton-wrapper.py"
Wait until the normal terminal prompt returns. If the terminal shows a > continuation prompt, the closing PY line has not been entered correctly; it must be on a line by itself with no spaces before it.
The helper detects common Steam root locations, reads Rocket League's install path from Legendary and creates a separate Proton prefix in ~/.local/share/rocket-epic-prefix-experimental. Keep the four Steam compatibility tools in the default SteamOS library as instructed in Step 5. Rocket League itself can be installed in another folder selected through Legendary. The helper preserves Legendary's working directory and leaves the installed game files alone. Its launch chain follows the public FEX→Steam Runtime→Proton arrangement; --no-wine tells Legendary that the wrapper handles Proton. FEX launch-chain explanation, Legendary wrapper options
Step 14 — Check the launcher
In Konsole:
python3 "$HOME/rocket-proton-wrapper.py" --check
Expected message:
Setup paths found.
Then check the FEX/runtime chain:
python3 "$HOME/rocket-proton-wrapper.py" --probe
The architecture result should be x86_64. Other startup messages may appear first.
If a tool is missing, return to Step 5, finish its download, and keep the tools on the default SteamOS drive. If the Rocket League installation is missing, return to Step 12.
Step 15 — Launch Rocket League
Keep Steam running. In Konsole, run:
python3 "$HOME/rocket-proton-wrapper.py" --launch
Allow the first launch time to prepare its Proton prefix. Leave Konsole open while playing.
Use this command each time you launch. It obtains fresh Epic launch authentication. Do not add--offlinefor online play, and do not launch RocketLeague.exe directly. Do not add VRChat-specific Steam launch options or substitute a different executable.
If the game asks you to accept its agreements or finish linking/signing in, complete those prompts in the game. Test Training → Free Play, then join an online match. Treat menu access, gameplay and a successful online match as separate checks.
Step 16 — Make a desktop shortcut
After the terminal launch works, paste this block into Konsole:
Double-click Rocket League on the SteamOS desktop. If KDE asks whether to trust or execute the shortcut, review it and allow it. Steam should remain running.
After Steam updates FEX-Emu: close games and reinstall the staged patched build:
cd "$HOME/steamac-fex-setup/fex-eac"
sh install-fex-tool.sh
sh install-fex-tool.sh status
Restore Valve's original FEX if needed:
cd "$HOME/steamac-fex-setup/fex-eac"
sh install-fex-tool.sh restore
Keep ~/steamac-fex-setup and ~/fex-eac-work; the latter contains the staged build and backup. The public FEX instructions explain that Steam tool updates can overwrite the patched installation. FEX maintenance instructions
Troubleshooting — Find the matching symptom
syntax error near unexpected token '(': A library listing or explanatory text was pasted as a command. Press Ctrl+C, then paste only the relevant command block.
uv: command not found: Use the Python virtual-environment installation in Step 10; it does not require a uvcommand.
legendary: command not found: Use the full "$HOME/.local/share/legendary-env/bin/legendary"path shown in this guide.
Exec format error after downloading a Linux AppImage: Remove that AppImage from this procedure and use Step 10's Python installation inside SteamOS.
Epic login ends on a page with JSON or a redirect: Return the authorizationCode value to Legendary's prompt, as explained in Step 11.
Sugar is missing from the account: Confirm the Epic account and add Rocket League to its Epic library; rerun legendary list using the full command path.
Missing FEX, Proton or runtime path: Finish Step 5 downloads in the default SteamOS library. The ARM64 runtime is not the x86 runtime used here.
Helper reports ARM64 Proton: Install the standard x86-64 Proton Experimental listed in Step 5, rather than an ARM64 variant.
FEXServer running during installation: Close games, restart the VM and install patched FEX before starting another game.
VM says disk full while the Mac has free space: On the Mac choose FX Steam Launcher → Settings → Advanced → Grow Disk…, enlarge the existing home area, and let it restart. Do not recreate the disk.
White/black window or graphical corruption: Finish downloads, keep the built-in Vulkan path, and verify Proton Experimental's files in Steam → tool Properties → Installed Files. Restart the VM before retrying.
Game opens but cannot connect online: Close it, repeat Epic authentication, update/verify Sugar, then use Step 15 without --offline. Record the game's exact error if it persists.
Missing MSVCP140.dll or VCRUNTIME140.dll: Follow the prerequisite step below.
Optional repair — Install Microsoft's Visual C++ runtime
Use this only if the game reports missing Visual C++ runtime DLLs. Close Rocket League, then run in Konsole:
I've been building VeRantyx, which lets you play Windows PC VR games on an Apple Silicon Mac.
I started it in May, paused for five months, and picked it back up recently.
The latest version ("vxrt") uses no Wine: the Windows game and the real Windows SteamVR run on
VXRuntime, a Windows runtime written from scratch for Apple Silicon, with its own Direct3D 11 →
Metal shader translator. Steam is the normal Mac Steam client with your own account.
Video: MacBook Pro M1 Max (left) vs MacBook Air M5 (right), both via the Vision Pro's ALVR app.
Full video: https://youtu.be/YwznYiAXqBg
This isn't a benchmark – the two recordings were made separately, so please look at how smooth
each one is, not loading times. Sorry it's mostly dark areas: I love games but I'm not very good
at them, and I've only reached Chapter 2.
Game frame rate from the logs:
- M1 Max (32-core GPU, 64 GB), 3K preset (1440×1620 per eye): ~50–55 fps
- M5 MacBook Air (10-core GPU, 24 GB), ALVR defaults: ~30 fps
Recommended settings:
- Pro/Max Macs: VERANTYX_ALVR=1 VXRT_VR_QUALITY=3k (Vision Pro app: VXRT_VR_QUALITY=3k, 60 fps on M1 Max)
- MacBook Air / base chips: VERANTYX_ALVR=1 with no preset. Heavier presets make the picture warp
when you turn your head (the headset shows 90 Hz and stretches older frames).
- 5 GHz Wi-Fi (80 MHz channel helps a lot)
Headsets: Vision Pro with its own app (hand tracking + Joy-Con, no PS VR2 controllers needed), or
any ALVR client – tested with the Vision Pro's ALVR app, with game audio and hand tracking.
** Quest owners: could you test it? ** I don't own a Quest, so it's untested there. It should work
(VeRantyx uses ALVR's open-source streaming core v20.14.1, unchanged, and Quest's ALVR client
speaks the same protocol), but I can't check controllers or buttons myself.
1. Install the ALVR client v20.x on the Quest (ALVR's GitHub releases or SideQuest)
2. On the Mac: scripts/setup_vxrt.sh (see README), then VERANTYX_ALVR=1 scripts/launch_vxrt_alyx.sh
(first start builds the ALVR part; needs Rust: https://rustup.rs)
3. Open ALVR on the Quest on the same 5 GHz Wi-Fi – it connects by itself
Please tell me your Mac and Quest model, and what works (picture, tracking, controllers, buttons,
audio). If something fails, attach ~/Library/Application Support/VeRantyx/ALVR/session_log.txt.
No haptics yet; USB is untested (use Wi-Fi).
Runs: Half-Life: Alyx, The Lab, Google Earth VR. Not yet: Direct3D 12, Vulkan, most other titles;
anti-cheat is never worked around. You need your own SteamVR and games – nothing from Valve or
Microsoft is included.
Hi, I am solo-developing Knights of Frontier Valley, a low-fantasy RPG with gridless tactical combat, deep character customization, complex NPC behavior, and procedural world building. You explore a new valley each game run, solve quests, make meaningful choices, and gain riches and glory while trying to stay alive.
The engine was written from scratch. All art is hand-made with no AI involved. Music was made by top composers including Kevin Manthei (Neverwinter Nights, Jagged Alliance 2, Wizardry 8...)
It's currently running native on Intel, and with no issues on Apple silicon through Rosetta. Once I receive my new MacMini, I'll look into a native Apple release.
The second Playtest just ended, but the Demo is coming out soon.
Update: Due to demand there is now a website where you can grab the App from: https://swonmac.com/. With dedicated discord to add support to ppl without GitHub knowledge. Site contains all the information and it is tracking release notes aswell (files are always downloaded from github releases).
I made SWTOR on Mac, a free, open-source macOS app that sits on top of the official SWTOR Mac app and swaps its graphics layer for a faster one. You install SWTOR as usual, open SWTOR on Mac, click Install, and keep playing from the official app. There's no Wine bottle to set up.
It's unofficial. Broadsword doesn't endorse or support it, so please read the fine print at the bottom before you try it.
Getting started
Install (or assuming you already have installed) SWTOR from swtor.com as usual and log in once, so the official Mac app is set up.
Download the DMG from the latest release (about 7 MB) and drag SWTOR on Mac into Applications.
Open it, accept the notice and click Install. It downloads a newer Wine engine (about 270 MB) and sets everything up, which takes about a minute. Your game settings, UI layouts and key bindings come along.
Start SWTOR from the official app as usual. The first minutes of play may stutter while shaders are compiled and cached.
The app is signed and notarized by Apple, so it opens like any other Mac app. It doesn't ship or change any SWTOR files: the launcher and game client are Broadsword's, installed by them and run unmodified. Uninstall puts the official app back exactly as Broadsword ships it, and copies your game settings back.
What works
The game renders through d9mt straight to Metal 4 at full Retina resolution, with vsync and Game Mode. On my M5 Max at 4K it holds a locked 60 fps in zones and stays smooth in a busy fleet apart from players loading in. If the official launcher updates its Wine, SWTOR on Mac hooks itself back in. The app checks for updates once a day, never while you're playing, and installs them when you click Install. Settings let you switch Retina, vsync, Game Mode, the Metal HUD and a memory profile. If something goes wrong, SWTOR on Mac → Collect Logs… saves a zip to your desktop.
Compared with the official Mac app
The official app runs the Windows client in an older Wine (CrossOver 23.7 based), and Direct3D 9 goes through Wine's OpenGL renderer, which Apple deprecated years ago. That's where the tearing and uneven frame rates come from. SWTOR on Mac keeps Broadsword's launcher and game exactly as they are and replaces only that layer: a newer Wine and a Direct3D 9 to Metal 4 driver, plus a few macOS fixes.
Technical bits
Game: a Wine engine built from CrossOver 24.0.7 sources (Sikarugir build), running the 64-bit client under Rosetta 2, with msync.
Graphics: d9mt, a Direct3D 9 to Metal 4 driver. I maintain the fork of neo773's d9mt-v2; its SWTOR fixes include missing lights and effects (shader switches were frozen), black specks in clouds, broken MSAA, stretched skinned models, a 3 GB memory leak, background shader compiling with a persistent cache, and pacing fixes for vsync and hidden windows.
Launcher: Broadsword's own Mac launcher, unmodified. SWTOR on Mac hooks into the Wine it starts, keeps the launcher frozen in the background while you play (otherwise it takes the game's Wine down with it when it quits) and cleans up after the game.
Shipping: Developer ID signed and notarized; updates via Sparkle 2, EdDSA-signed, with delta downloads; a small launchd job (it only runs when the launcher's Wine folder changes) re-applies the hook after launcher updates.
License: zlib for the app's code and d9mt, LGPL for d9mt's Wine bridge.
Limitations and fine print
Not affiliated. SWTOR on Mac isn't made, endorsed or supported by Broadsword. Broadsword doesn't support third-party modifications. Use it at your own risk.
Support comes only from me, as a GitHub issue or to Pharaphobia on Discord. Please don't send SWTOR on Mac problems to SWTOR customer support. They can't help with it.
Apple silicon only, macOS 26 or later. You need the official SWTOR Mac app installed first.
Rosetta: Apple keeps it fully available through macOS 27. macOS 28 (expected fall 2027) keeps only a subset aimed at older games, and both the official Mac app and this one depend on Rosetta today. My plan is a native arm64 Wine with x86 emulation and an arm64 build of d9mt, tested well before macOS 28. And of course unless we get DX12 working in the meantime.
Maybe someone encountered a similar issue and have a solution how to fix it:
crossover
As you can see, there are triangles and squares in the sky instead of the normal stones and whatever else is there. I wouldn't be bothered much, but in cutscenes there are missing objects. This is how it's supposed to look like:
steamdeck
This happens both on M1 8GB (most likely obviously, I just wanted to test in any case) and M4 Pro 24 GB devices.
In Crossover I tried Auto, D3DMetal and DXMT, the result is the same. I'm definitely missing something here.
I have a MacBook Pro m2 16gb and would like to know how I can play Silent Hill 2 remake, Silent Hill Townfall, and the upcoming Alien Isolation 2. I don't mind medium-low settings and 720p if my fps is good. I'm thinking of getting a 1 or 2 month boosteroid or airgpu sub and then canceling when I complete the games.
It seems pretty obvious to me that Apple could have easily thrown their weight and money around and compelled companies to run anti-cheat on Mac. This whole saga with the RTX Spark made me not only appreciate the miracle that is Apple's M chip. It also made it clearer that Apple doesn't really give a shit about gaming. It makes it all the more impressive to see what is possible despite Apple's arrogant support. They will create things like GPTK and Rosetta, but then they will refuse to work with the most prominent companies to actually make gaming on Mac happen.
But aside from apple, would running anti-cheat on Spark help the Mac situation in any way?
I've been experimenting with a custom Vulkan implementation using Dozen + D3DMetal in my WineForge project, and I've finally managed to get Enshrouded to launch and reach the main menu on macOS! This is still a very early experimental test. There are graphical glitches, rendering issues, and plenty of optimization work ahead. However, the fact that the game can reach the main menu is already a promising first step. The bigger picture is much more interesting. If I can get this implementation stable and properly optimized, it could potentially open the door for other Vulkan-based games, including Detroit: Become Human, which currently presents significant compatibility challenges on macOS. The goal isn't just to make Enshrouded work. It's to build a more general Vulkan compatibility solution for macOS gaming. There's still a long way to go, and I can't promise anything yet. But I'm curious to see how far I can push this. Let's see how much performance and compatibility we can squeeze out of it.
My controller connected over Bluetooth, but games and mapping tools couldn’t see it. Setting SDL_JOYSTICK_MFI=0 fixed detection, so I asked Codex for a small installer that applies it at login and includes an undo option.
Download the ZIP, extract it, run Enable Compatibility.command, then fully quit and reopen your games.
Tested over Bluetooth with SDL2 Gamepad Tool and CrossOver’s SDL library on macOS 27.2. This helps SDL-based apps; Apple GameController-only apps remain unsupported.
If you try it, please share your macOS version, controller model, and which apps worked