Skip to content

Mac compatibility: per-game settings, badges in the library and store, launch rules - #305

Draft
marcshawco wants to merge 2 commits into
NotProtonNot:mainfrom
marcshawco:mac-compatibility
Draft

marcshawco wants to merge 2 commits into
NotProtonNot:mainfrom
marcshawco:mac-compatibility

Conversation

@marcshawco

Copy link
Copy Markdown

Draft, and a best effort that needs your review. It is large, it touches the dylib and the run script, and it was built with Claude Code over one long session, so please treat the comments and this text accordingly. I use NotProton daily and wanted to stop guessing at settings per game.

What it does

  • Reads the Mac (chip, GPU cores, memory, display) and each installed game (word size, which Direct3D it loads, anti-cheat, launcher, engine) and picks settings: D3D12 to D3DMetal, D3D11 to DXMT, D3D9 to DXVK, a MetalFX factor and frame cap from the hardware. Applied at launch only where the user set nothing.
  • Records how each session ended and turns that into a verdict.
  • Shows an Apple badge on every library tile, a stat on the game page, and a "Use Recommended" row on the Compatibility page. Games that are not installed get a badge from Valve's Steam Deck results in the local appinfo.vdf, so an anti-cheat game is red before it is downloaded.
  • Launch rules in ~/Library/Application Support/notproton/rules/*.conf, on the plugin grammar.
  • The same on store and wishlist pages.
  • Two switches under Steam → Preferences → Compatibility.

docs/mac-compatibility.md has the detail and a table of which file does what.

Things you should decide, not me

  1. The store part turns on Steam's web debugger. Store pages are remote, so the only way in was to start the web helper with --remote-debugging-port=27101 --remote-debugging-address=127.0.0.1 (in hook_spawn.c). Loopback only, but any local program can use it while Steam runs. It has its own switch and is on by default in this branch. You may well want it off by default, or not at all.
  2. The badge is the Apple logo, which is Apple's trademark.
  3. store.c is a small HTTP and WebSocket client in the dylib. That is new surface.
  4. Deck "verified" is shown as "Likely", never as verified on the Mac.

Two fixes found on the way

  • A DXMT_CONFIG with two clauses was dropped before reaching the page, because is_setting_value refused ;.
  • make dobby failed in a checkout path containing spaces.

Tested

31 make check targets pass locally, including new ones (tuning-check, verdict-check, advice-check, game-check, rules-check, catalog-check, store-check) and additions to panel-behavior, envcheck and buildcheck. l10ncheck and the Swift app tests were not run. Verified by hand in Steam client build 1794536281 on an M4 Max, one account, one library. Not tested: multiple libraries, multiple accounts, FEX tools, Intel.

🤖 Generated with Claude Code

marcshawco and others added 2 commits November 14, 2026 05:39
… block

Works out how each game should be run on this Mac and how likely it is to
run, and shows it where Steam shows the Steam Deck's.

- machine.c, tuning.c: read the Mac (chip, GPU cores, memory, macOS,
  display) and turn it into settings the defaults whitelist accepts.
- game.c: read an installed game's files: word size, which Direct3D it
  loads, anti-cheat, launcher, engine, native macOS build.
- verdict.c: a tier from the sessions the run script now records.
- advice.c: Mac + game + history into settings, launch arguments, a badge
  and a reason. D3D12 goes to D3DMetal, D3D11 to DXMT, D3D9 to DXVK.
- rules.c: launch rules from ~/Library/Application Support/notproton/rules,
  on the plugin grammar (new conf kind).
- catalog.c: one pass over the library. Uses Valve's Steam Deck results
  from appinfo.vdf (appinfo --compat) for games that are not installed.
- webpatch.c: badge on library tiles, stat on the game page, "Use
  Recommended" on the Compatibility page, two switches in Preferences.
- store.c, store_page.js: the same on store and wishlist pages, through
  the web helper's debugger on 127.0.0.1:27101. Has its own switch.
- compat_run.sh: records sessions, applies advice and rule arguments at
  launch after anything the user set.

Also fixes two things found on the way: a DXMT_CONFIG with two clauses was
dropped on its way to the page (is_setting_value refused ';'), and
`make dobby` failed in a path with spaces.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
docs/mac-compatibility.md covers what each badge means, where the answers
come from, the switches, launch rules, how the store part works and what
its debugger port costs, and the files involved. README points to it.

Co-Authored-By: Claude Fable 5.2 <noreply@anthropic.com>
@NotProtonNot

NotProtonNot commented Nov 14, 2026 •

Copy link
Copy Markdown
Owner

I don't want to use the Steam web debugger. That is developer functionality that could go away at any time and opens a user up to certain kinds of attacks.

Relying on Steam Deck data for anti-cheat is not really reliable for us; there are many games (all EAC games, among others) that work on Linux/Proton but do not work on macOS. There are also games that work specifically on SteamOS but do not work on any other Linux distro.

The hard part with auto-applying compatibility settings is getting the data in the first place. Where would I source which compatibility settings are correct? Just because the game starts with a specific graphics backend does not mean that the game started correctly - it could have visual issues, etc. A human needs to look and see.

Plus, lots of games need fixes (MacGameFix, etc) in order to work correctly.

The rest of the idea itself is not a bad idea. The biggest problem is using the Steam web debugger. That's not how the rest of NotProton works. :\

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants