8 min read
Highball: run Windows games on Apple Silicon, honestly
How Highball runs Windows games on Apple Silicon Macs: the Wine engine, bottles, per-game renderers and an open compatibility database. What works, what never will, and how to install and use it.
Running Windows games on a Mac has always come with the same question, and it is never "can Wine start?". It is "will my game run, with which settings, and will I find out before or after downloading 80 GB?". Highball is a free, open-source macOS app and command-line tool by Gauthier Piarrette that answers that question first, then sets everything up for you.
This note covers what Highball is, how it works under the hood, and how to install and use it.
| Item | Details |
|---|---|
| What | Native macOS app (SwiftUI) plus a CLI that does everything the app does |
| Runs on | Apple Silicon, macOS 14 or newer |
| Price | Free, with no paid tier planned |
| Licence | App and CLI GPL-3.0, compatibility data CC0 |
| Launchers | Steam and Epic out of the box, more on the Wine 11 engine |
| Status | Beta, notarized, auto-updating |
| Links | Website · GitHub · Database |
#The problem it solves
A Windows game talks to Windows APIs and draws with DirectX. macOS offers neither, and Apple Silicon adds a different CPU architecture on top. Getting a game running means stacking three translations: Rosetta 2 for x86 code, Wine for Windows system calls, and a graphics layer that turns Direct3D into Metal.
The tools for each layer exist. The hard part is choosing the right combination for each game and knowing in advance whether it will work at all. Until now the choices were a paid product (CrossOver), hand-built Wine setups, or community wrappers like Whisky, which was archived in 2025. Highball is designed to avoid the ways those projects tend to stall: it does not fork Wine, it does not host its own engine binaries, and its most valuable part, the compatibility data, is public.
#How it works, from download to game
Drawing the diagram
- Install. You drag the app into Applications and press Get started. Highball installs Rosetta 2 if it is missing.
- Engine. It downloads a Wine engine assembled from pinned upstream releases and checks it against a recorded SHA-256 checksum before using it.
- Bottle. It creates a Windows environment on your own disk. No Windows licence and no virtual machine are involved.
- Launcher. You install Windows Steam with one click, connect your Epic account, or point it at a Windows installer you already own. Common runtimes such as .NET and Visual C++ are one click too.
- Verdict. Each game in your library shows what the open database knows about it. Where a verified fix exists, Highball applies it.
- Play. The launch uses the renderer the database recommends for that game, plus the faster in-process synchronisation path (msync) when the game tolerates it.
#Inside: engines, bottles, renderers and recipes
The app and the CLI are thin layers over a shared Swift library called HighballKit. Four ideas carry the whole design.
Drawing the diagram
Engine. A bundle of Wine, its runtime libraries and the renderer overlays, laid out under engines/<id>. Engines are described in a manifest and pulled from pinned, checksummed upstream releases. When a game needs a patch nobody ships yet, such as a MoltenVK change for Red Dead Redemption 2, the patch and its build script live in the repository, the build is a checksummed release asset, and the fix is sent upstream. Updating an engine is a JSON pull request.
Bottle. A standard WINEPREFIX plus a bottle.json file describing it. It is the Windows environment a game lives in.
Renderer. Each graphics translation layer is a directory overlay chosen at launch time through WINEDLLPATH_PREPEND, so switching renderer for one game does not rebuild anything.
Recipe. A declarative list of JSON steps (installer, registry, winetricks, sync mode, renderer, pin, copy, file, note) applied to a bottle. "Steam needs sync: none" or "this game needs DXVK" is data, not code, and anyone can reuse it.
#The four renderers
| Renderer | What it translates | Worth knowing |
|---|---|---|
| WineD3D | Direct3D to OpenGL | Wine's built-in fallback |
| DXVK | Direct3D 9, 10 and 11 to Vulkan, then MoltenVK to Metal | Some fixes live in the MoltenVK layer |
| DXMT | Direct3D 10 and 11 straight to Metal | Open source, by 3Shain |
| D3DMetal | Direct3D 11 and 12 to Metal | Part of Apple's Game Porting Toolkit; you accept its licence explicitly and Highball never redistributes it |
#Will my game run? The open database
This is the heart of the project. Every game carries one of four verdicts, and they are never mixed together:
- Verified: tested by hand on real Apple Silicon hardware.
- Reported: results reported upstream or by the community.
- Predicted: derived from ProtonDB reports crossed with anti-cheat data.
- Blocked: known to be impossible, usually because of kernel anti-cheat.
At the time of writing the site lists 16 games verified by hand, 19 reported upstream, 77 from community consensus, 41 marked impossible and more than 12,000 predictions. Every claim records where it came from and when, and verified recipes store a lastVerified field (engine, macOS version, chip) so stale data is visible rather than silently wrong.
A few concrete examples from the project:
- Portal 2 froze on every map load. The cause was traced to a MoltenVK bug in Source's HDR path, so the recipe now turns HDR off automatically and the game runs at around 210 fps.
- Cyberpunk 2077 runs at 60 to 82 fps on an M5 with D3DMetal and FSR 2.1.
- Red Dead Redemption 2 plays on an M1 Pro after a MoltenVK fix that is now an upstream pull request.
The curated data is CC0, prediction data derived from ProtonDB is ODbL 1.0, and anti-cheat data comes from AreWeAntiCheatYet under MIT. You can browse the database before installing anything.
#How to install and use it
#Requirements
An Apple Silicon Mac (M1 or newer) running macOS 14 or later, a few gigabytes of free space for the engine and launcher, plus whatever your games need.
#1. Install the app
Download the notarized Highball.dmg and drag it to Applications, or use Homebrew:
brew install --cask gauthierpiarrette/highball/highball#2. Run the first setup
Open Highball and press Get started. Be patient on the first run: the engine is a few hundred megabytes and Steam unpacks its own client of about 235 MB under Rosetta, so expect 15 to 25 minutes. A progress strip at the bottom of the window shows the current step, the elapsed time and the usual range. If it stalls, relaunch the app and it resumes where it stopped. After that, launches are instant.
#3. Bring your games
Choose where your games come from:
- Steam: installs Windows Steam in one click. You log in with your normal account and use your existing library.
- Epic: connect your account and your library plays through the open-source Legendary client.
- Anything else: run a Windows installer you own, for example a DRM-free GOG offline installer.
#4. Check the verdict, then play
Every game in the cover grid shows its source and its database verdict. Open a game to see the recommended renderer and any fix Highball will apply. Frame-rate caps and asynchronous shader compilation are one toggle away if a game stutters.
#Keyboard and files
- Command+C, Command+V and Command+A work inside Windows apps because Command is mapped to Ctrl, and Option to Alt so Alt-based game bindings still work. You can switch back to Wine's default per environment in Settings, then Environments.
- Everything lives in
~/Library/Application Support/Highball/. Nothing is written to/usror/Library, so deleting that folder is a complete uninstall. - There is no account and no telemetry. Highball does not ask you to log in and does not phone home.
#Using the CLI
If you prefer the terminal, the CLI can do everything the app does. Clone the app and the database side by side, build, then create a bottle with the Steam recipe:
git clone https://github.com/gauthierpiarrette/highball && cd highball
git clone https://github.com/gauthierpiarrette/highball-db ../highball-db
swift build -c release
# install the engine described in the manifest
.build/release/highball engine install spike/engine-manifest.json
# optional: accept Apple's licence to enable D3DMetal
.build/release/highball engine accept x64-sikarugir10.0_6-r2 apple-gptk-license-2023-08-17
# create a bottle from the Steam recipe and launch it
.build/release/highball bottle create play --recipe steam
.build/release/highball run play SteamRun every command from the highball repository root: recipe and database paths are resolved relative to the current folder, with highball-db expected as a sibling.
#Launcher support
| Launcher | Status |
|---|---|
| Steam | Works on the default engine |
| Epic Games | Works through Legendary |
| Rockstar | Signs in and runs GTA V and Red Dead Redemption 2 on the Wine 11 engine |
| EA app | Signs in and runs The Sims 4 on the Wine 11 engine |
| Ubisoft Connect, Battle.net | Sign-in window appears, no game confirmed yet |
| GOG Galaxy | Window stays black; use GOG offline installers instead |
The Wine 11 engine is built from the CrossOver 26.3 source tree. Highball offers it when a game needs it, and you can move an environment to it in Settings.
#What will never work: kernel anti-cheat
Games such as Valorant, Fortnite, Destiny 2 and Call of Duty load Windows kernel drivers for anti-cheat. No compatibility layer can provide those, on any Mac, in any app. Highball marks these games as blocked before you download them and links to an explanation of why, instead of letting you discover it after a long install.
#Contributing
- Report a game result: after playing, run
highball report <bottle> "<title>" --rating N. It opens a pre-filled report on highball-db, and accepted reports are merged by CI. - Report a bug in Highball itself: use Report a Problem in the Highball menu, which attaches system info and the log.
- Share a recipe: open a pull request on
highball-db/recipeswith the CLI output attached. - Bump an engine: submit a manifest pull request with a verification note.
#Why I think the design is right
Most compatibility tools treat "does it run" as tribal knowledge spread across forums. Highball turns it into versioned, machine-readable, CC0 data with provenance on every line, and it keeps the engine layer replaceable instead of betting on one Wine build. That is the same principle that makes any system maintainable: separate the data from the code, pin and verify what you depend on, and be explicit about what fails. It also stays generous to the ecosystem it stands on: bugs go upstream, donation links point at Gcenx and DXMT, and it openly recommends CrossOver if you want paid support.
#FAQ
Is Highball really free?
Yes. The app and CLI are GPL-3.0 and the compatibility data is CC0. There is no paid tier, no account and no telemetry.
Do I need a Windows licence or a virtual machine?
No. Highball uses Wine to run Windows programs directly on macOS, with Rosetta 2 for x86 code and a translation layer from Direct3D to Metal.
Does it work on Intel Macs?
No. It requires an Apple Silicon Mac running macOS 14 or newer.
Do I have to buy my games again?
No. You sign in to Windows Steam or connect your Epic account and play the library you already own.
Why can't I play Valorant or Fortnite?
They rely on kernel-level anti-cheat drivers that no compatibility layer can provide on macOS. Highball marks them as blocked before you download them.
How do I uninstall it completely?
Delete the app and the folder ~/Library/Application Support/Highball/. Nothing is installed anywhere else.
#Links
- Website: gethighball.com
- Source code: github.com/gauthierpiarrette/highball
- Compatibility database: gethighball.com/database and highball-db on GitHub
- Install guide: gethighball.com/docs/install
- Troubleshooting: gethighball.com/docs/troubleshooting
- Anti-cheat explained: gethighball.com/docs/anti-cheat
- Credits and sponsors: gethighball.com/docs/credits
Did this land?
Conversation
Building something like this?
Tell me what you are working on. I reply within a day.