Skip to content

Add support for ARM64 Proton - #503

Open
matte-schwartz wants to merge 6 commits into
Matoking:masterfrom
matte-schwartz:arm64-proton-support
Open

matte-schwartz wants to merge 6 commits into
Matoking:masterfrom
matte-schwartz:arm64-proton-support

Conversation

@matte-schwartz

Copy link
Copy Markdown

ARM64 Proton ships its Wine executables in files/bin-arm64 instead of files/bin, and the official Valve ARM64 builds ship no files/bin at all. Add a SteamApp.proton_bin_path property that prefers bin-arm64 and falls back to bin, mirroring the existing files/dist fallback in SteamApp.proton_dist_path. The Wine proxy scripts receive the directory in a new PROTON_BIN_PATH environment variable.

ARM64 compatibility tools are also declared in a Steam Play manifest of their own rather than the main one, so names such as proton-experimental-arm64 can't be resolved. Search every appinfo.vdf section declaring compatibility tools instead of only the main manifest. The main manifest is searched first so that existing installations keep resolving as before, and a tool's own name now takes precedence over the same name used as an alias by a tool in an earlier manifest, as proton-experimental is an alias in both manifests.

ARM64 Proton ships its Wine executables in `files/bin-arm64` instead of
`files/bin`, and the official Valve ARM64 builds ship no `files/bin` at
all. Add a `SteamApp.proton_bin_path` property that prefers
`bin-arm64` and falls back to `bin`, mirroring the existing
`files`/`dist` fallback in `SteamApp.proton_dist_path`. The Wine proxy
scripts receive the directory in a new `PROTON_BIN_PATH` environment
variable.

ARM64 compatibility tools are also declared in a Steam Play manifest of
their own rather than the main one, so names such as
`proton-experimental-arm64` can't be resolved. Search every `appinfo.vdf`
section declaring compatibility tools instead of only the main manifest.
The main manifest is searched first so that existing installations keep
resolving as before, and a tool's own name now takes precedence over the
same name used as an alias by a tool in an earlier manifest, as
`proton-experimental` is an alias in both manifests.
@Matoking

Matoking commented Sep 20, 2026 •

Copy link
Copy Markdown
Owner

Thanks for the PR!

How have these changes been tested? I don't have a Steam Frame myself, though I'm on the waitlist for one.

The SteamOS ARM package repos are now public and it might be possible to setup an emulated ARM environment using libvirt to test these changes, though it might be a tad slow. I'll look into testing these changes that way, assuming it doesn't turn out to be too difficult or slow.

@matte-schwartz

matte-schwartz commented Sep 20, 2026 •

Copy link
Copy Markdown
Author

Yeah, I've had a Frame for a bit now which is what I tested this with. I used flatpak-builder to build a full flatpak bundle on the device and then tested it on there.

There's one unrelated issue with the file picker inside of gamescope that I'm working on fixing, but that's an OS issue and not an issue with protontricks.

justradical added a commit to armada-os/armada that referenced this pull request Sep 23, 2026
justradical added a commit to armada-os/armada that referenced this pull request Sep 23, 2026
@Matoking

Copy link
Copy Markdown
Owner

I got the Steam client working in an ARM64 VM. A bit slow but enough to let me test this. ;)

steamos3-arm-deltarune

Incidentally, the very first game I picked (DELTARUNE) was one of the fifteen to have a Steam Frame specific compatibility profile that Protontricks didn't detect yet; I've added the commits for parsing them so the correct Proton version is chosen.

@matte-schwartz

Copy link
Copy Markdown
Author

very nice! thanks for working on this

Comment thread src/protontricks/steam.py
Comment thread src/protontricks/util.py Outdated
We will be adding one more function for Steam Frame detection
Steam now has Steam Frame specific compatibility profiles that will
(presumably) only be used on Steam Frame. Add a function to detect this.
Same as with Steam Deck, Valve has created compatibility profiles for
certain games that determine what Proton version should be used by
default.
@Matoking

Matoking commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

OK, quickly amended and force-pushed to fix the Steam Frame detection. I'll avoid touching the branch for now if you want to update the compat tool lookup. Thanks for the contributions so far!

EDIT: force-pushed for real now.

@Matoking
Matoking force-pushed the arm64-proton-support branch from 3c7c8e3 to 462bf4c Compare September 24, 2026 19:07
@matte-schwartz

Copy link
Copy Markdown
Author

@Matoking got it, will try to get to this later today since I leave on vacation tomorrow afternoon.

Steam looks for a compatibility tool with the '-arm64' suffix first and
falls back to the name without it. Steam Frame compatibility profiles
refer to Proton versions without the suffix, so Protontricks resolved
them to the x86_64 installation, which is not installed on a Steam
Frame.

Check for the suffixed name first on ARM64 and fall back to the original
name, which is still needed for custom compatibility tools that do not
use the suffix.
A Steam Frame running SteamOS 0.5.0 has `VARIANT_ID="vr"` in
/etc/os-release, so the existing check is correct.
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