Skip to content

fix: add macOS helper extension support - #115

Open
GrantWasil wants to merge 2 commits into
BossSloth:mainfrom
GrantWasil:fix/macos-support
Open

fix: add macOS helper extension support#115
GrantWasil wants to merge 2 commits into
BossSloth:mainfrom
GrantWasil:fix/macos-support

Conversation

@GrantWasil

Copy link
Copy Markdown

Summary

  • Detect LuaJIT's OSX platform explicitly and use Steam's macOS browser-profile path.
  • Sign Chromium tracked preferences on macOS using the local IOPlatformUUID and Steam CEF's empty HMAC seed.
  • Treat Secure Preferences as authoritative on macOS, validate its extension/developer-mode/super MACs, and safely re-sign cleanup changes.
  • Replace the Linux shutdown path with a detached macOS restart targeting only Steam Helper and steam_osx.
  • Add macOS paths and relaunch guidance to the README.
  • Keep the contributor-facing installer in sync and add canonical HMAC golden tests.

Root cause

The installer treated every non-Windows platform as Linux. On macOS this selected ~/.steam/steam/config/htmlcache/Default, invoked Linux-only process/UI commands, and skipped Chromium preference signing.

There was also an existing tracked-preference bug: the developer-mode MAC was written to protection.ui.developer_mode. Chromium stores path hashes beneath protection.macs, so the correct location is protection.macs.extensions.ui.developer_mode.

User impact

With a macOS-capable Millennium build, Extendium can now locate the real Steam CEF profile and install its helper extension with valid tracked-preference signatures. Failed or stale helper entries no longer produce a false installed state from Preferences alone.

The persistent machine identifier is read locally only for Chromium's HMAC calculation and is never logged or transmitted.

Validation

  • bun test — 3 passed, including developer-mode and super-MAC golden vectors plus canonical serialization.
  • Lua syntax parsing passed for all modified backend modules.
  • Focused TypeScript checking passed for the installer and its tests.
  • The implemented HMAC functions reproduced a valid extension MAC and the super MAC from this Mac's existing Steam Secure Preferences in a read-only check.
  • An isolated fixture exercised install, status validation, Preferences-only rejection, invalid-path cleanup, unrelated-MAC preservation, re-signing, failure-before-write, and macOS restart command construction.
  • millennium-ttc reported a completed production bundle with the repository's existing circular-dependency warning; its process retained an open event loop and was stopped after completion.
  • bun run lint still reports the pre-existing eslint.config.mjs:19 unsafe-assignment error. That file is unchanged by this PR.

Dependency

This fixes Extendium's side of macOS support. Testing inside Steam still requires a macOS-capable Millennium build; upstream restoration is currently tracked in SteamClientHomebrew/Millennium#841.

Closes #113

@GrantWasil
GrantWasil marked this pull request as ready for review July 30, 2026 22:29
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.

[Feature] macOS support

1 participant