Games that ask the runtime for controller models (Meta's runtime controller
models) get the Steam Frame controllers instead of Quest Touch ones:
- adapter (render_model.c): emulates XR_FB_render_model when the runtime lacks
it and serves files/framebridge/controller_{left,right}.glb. Off by default;
suggested for games declaring the RENDER_MODEL permission/feature (none of
the 34 catalog games do).
- agent v20: converts the Frame's own SteamVR render models (frame_controller
driver, OBJ+PNG, openxr_grip -> grip space) to glb on the device at install /
set_settings; Valve's models never leave the Frame. `frameport frame
controller-models` lists what it finds.
- xrshim: overport's dispatcher only forwards functions in its own table
("Unknown proc addr"), so OVRPlugin's dlopen("libopenxr_loader.so") string
is pointed at libframe_xrshim.so, which serves the emulated functions and
forwards everything else to overport. Only added with controller_models=1;
other builds differ from known-good only in the adapter binary.
Verified on the device with Toy Master: models converted, adapter emulation on,
all three render-model functions resolved through FrameBridge; launches match
the known-good build. Not yet seen rendering in a game (none requests a model).
FramePort
Play your Meta Quest standalone games on the Valve Steam Frame. FramePort patches a Quest APK so it runs in the Frame's Lepton Android runtime, validates the result, installs it over Wi-Fi and adds it to your Steam library with artwork. Think Morphe/ReVanced Manager, for Quest → Steam Frame:
- Connect your Frame once: the app shows one command to paste into the Frame's desktop terminal (it turns on SSH, trusts the app, and installs Lepton). After that the app finds the Frame on your network by itself.
- Add games: scan a folder of Quest dumps (APK + OBB) or add an APK.
- Review patches: every game gets suggested patches (overport's plus Steam Frame fixes), each with a reason. 34 games have verified recipes; unknown games get heuristics.
- Patch, validate, install: signature/alignment/dependency checks, upload (resumable, skips data already on the Frame), Steam shortcut + artwork, and a headless launch test with log triage that suggests fixes.
FramePort downloads and manages its own tools (Java runtime, overport CLI, apksigner). Nothing is installed system-wide, and no Android SDK/NDK is needed.
Install
- App bundles: download from Releases (Windows x64, macOS
Apple Silicon, Linux x64); see
docs/INSTALL.mdfor the first-launch warning (self-signed / ad-hoc signed) and how to verify a download. Built by CI (.github/workflows/build.yml,flet build). - From source:
uv sync && uv run frameport-gui(CLI:uv run frameport --help).
Status of tested games
See catalog/games/ (and the Library screen): 23 work, 5 work with issues, 6 can't run on the Frame (3 are 32-bit
only; PC VR alternatives are listed). Details and how problems were solved: docs/PLAYBOOK.md.
All 34 recipes were verified by rebuilding from the original dumps (docs/parity-report.md: 34/34 match the
hand-made known-good builds) and reinstalling + launch-testing on a Frame (docs/parity-device-report.md: 0 regressions).
Legal
Use only with games you own. FramePort does not download games. It is GPL-3.0-only because it bundles code derived from GPL-3.0 projects (Quest2Frame's hook technique in the adapter, the Android-XR-Bridge/OVRPort VrApi bridge). overport is downloaded from its official releases and is not redistributed.
Development
See CLAUDE.md (architecture, commands, findings) and docs/ARCHITECTURE.md.