For the Steam Frame
Your VR games, on the Steam Frame
FramePort puts Quest games, PC VR games and Android apps on the Steam Frame and in your Steam library. Connect the Frame once; then it's one click per game.
Free and open source · GPL-3.0 · Wi-Fi or USB cable · Proof of concept · Not affiliated with Valve or Meta
com.rrrgames.CaveCrave → Caves
01 How it works
Ten stages between your PC and the Steam Frame
You click once
On your PC
-
scanPoint FramePort at a folder. It finds Quest games, PC VR games, Android apps and Linux apps.
com.Armature.VR4 · APKok -
analyzeChecks what the game is built with, without running it.
Unreal · VrApi · arm64ok -
recipePicks the tested recipe (the patches a game needs), or suggests patches for an untested game.
tested 2026-10-02 · 2 patchesok -
convertOVRPort rewrites the game's Meta VR code for the Frame.
OVRPort · VrApi → OpenXRok -
patchPatches fill in what the Frame lacks, such as passthrough and 360° screens.
OVRPort: remove unreal force quit, setting: Vulkan shader fixok -
signEach game keeps its own key, so updates keep your saves.
own key · VR4ok -
checkProblems that would stop the game are reported before the upload.
v2.3 · arm64-v8aok
On the Frame
-
uploadOver Wi-Fi or a USB cable. A stopped upload continues where it left off.
SSH · resumableok -
libraryThe game shows up in your Steam library with its artwork. Start it like any other game.
"VR4" + artworkok -
testA launch test starts the game and, if it fails, names the likely patch.
passed · FramePort 0.3.4ok
Recipe
OVRPort: remove unreal force quitsetting: Vulkan shader fix
Installs the no-ForceQuit build and fixes a campaign shader that hung the GPU after the opening cutscene.
VR4's recipe from the catalog. Untested games get suggested patches.
02 The app
Try it before you download it
Try FramePort here
A working copy of the app, in your browser
Simplified, with a pretend Frame. Take the one-minute tour or click around on your own.
The real app, screenshot by screenshot
Library Your games with their artwork. Search, filter, install several at once.
1 / 9Prefer to watch? The real app on video
03 Games
Tested on a Steam Frame
97 games work, 14 work with issues and 9 don't run. Each tested game gets its recipe (the patches it needs) automatically; for other games FramePort suggests patches.
- 4XVR Video PlayerOtherOpenXRWorks2026-10-01
Native OpenXR GLES video player. 360 theatres/videos (equirect2 layers, which the Frame lacks) are drawn by FrameBridge's equirect_emul; stable_local/focus_hold stop the menu recentring; scale 0.75 keeps the menu screen at 72 fps (the runtime asks for 4536 px per eye). Confirmed in the headset by the owner (2026-10-01). Its "Internal Storage" list is /sdcard/4XPlayer: send videos with the game page's "Add videos". Settings: equirect_emul (GLES worker draws 360 layers into a projection layer), stable_local, focus_hold, scale 0.75; frame.swapchain_limit for its 7680x3840 theatre swapchains. Its hardware decoding mode (Java MediaCodec, Vr4pMediaPlayer; its own FFmpeg is the software path) gets the Frame's video hardware with frame.hw_video_decode (added 2026-10-09, not yet checked in the headset).
Recipe
frame.hw_video_decodeadapter.equirect_emuladapter.stable_localadapter.focus_holdadapter.scaletested with version 2.0.22 · 2026-10-01
- Accounting+UnityVrApiWorks2026-10-06
Plays normally, including the "press any button" screen after choosing to sit or stand. Unity 2017.4 built-in Oculus support. frame.unity_oculus_check gets VR started (Meta's system-app check and the frame wait its legacy loop never makes, libfp_ovrp.so), ~72 fps. The motion warning after the stance selection waits for a mouse click (Input.GetMouseButtonDown), which a Quest delivers for the controller press and Lepton never does; the same library now counts a newly pressed trigger or A/B/X/Y as that click.
Recipe
frame.unity_oculus_checktested with version 1.24.35 · 2026-10-06
- AgeOfJoyUnityOpenXRWorks2026-10-08
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.haptic_fixtested with version 1.0 · checked with FramePort 0.12.0 · 2026-10-08
- AllInOneSportsUnityOpenXRWorks2026-10-04
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowtested with version 1.9.0 · checked with FramePort 0.6.3 · 2026-10-04
- Asgard's Wrath 2UnrealOpenXRWorks2026-09-28
Very large data set (~31 GiB). Built with disable_space_warp. Reported working on Pico 4 with overport runtime 3.0.x. 83 OBB/pakchunk files (~32 GB).
Recipe
overport.patch_remove_unreal_force_quitoverport.patch_disable_space_warptested with version 12.1.1689309 · 2026-09-28
- AudicaUnityVrApiWorks2026-10-09
Runs with the default patches; nothing special needed.
Recipe
frame.unity_no_msaaframe.unity_oculus_checkframe.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimdevice.text_input_windowadapter.haptic_fixtested with version 1.0.3.4 · checked with FramePort 0.12.0 · 2026-10-09
- BAMUnityOpenXRWorks2026-09-28
Passthrough emulated with the Frame cameras (greyscale). Mixed-reality-only title; relies on passthrough (emulated).
Recipe
overport.patch_force_passthroughtested with version 1.2 · 2026-09-28
- BARTENDER VR SIMULATORUnrealOpenXRWorks2026-09-28
Native Pico build exists (not relevant for Frame).
Recipe
overport.patch_remove_unreal_force_quittested with version 1.9.2.7 · 2026-09-28
- Batman: Arkham ShadowUnityOpenXRWorks2026-09-28
Large data set (~27 GiB) incl. all language packs. Uses Meta XR Audio (Wwise), handled by patch_meta_xr_audio. Cutscenes are 8K HEVC panoramas: frame.hw_video_decode decodes them on the Frame's hardware, adapter.surface_native shows them in stereo (PRs #96, #128). Includes all language packs (~28 GB). sync_guard (to test, GitHub #102) - a reporter's game quit to Steam's waiting screen after the Frame runtime crashed in xrSyncActions (CVRInputLatest::UpdateActionState), the input race Myst had.
Recipe
frame.hw_video_decodeoverport.patch_disable_space_warpadapter.sync_guardadapter.surface_nativetested with version 1.4.1-350961 · 2026-09-28
- BattleGlideUnrealOpenXRWorks2026-10-04
Freezes from the headset's brief focus losses are hidden (focus_hold). The Frame drops the session out of focus for ~0.5 s every few seconds (11 times in 80 s of play) and Unreal pauses each time; focus_hold hides dips up to 1 s once the game has been focused for 1 s. Longer dips (real interruptions) still pause it.
Recipe
adapter.focus_holdtested with version 0.4.1 (BETA) · 2026-10-04
- BattleSistersUnityVrApiWorks2026-10-08
Plays; controller buttons and vibration work, hands follow the controllers (pose_time_fix). Unity 2019.4 with Unity's built-in Oculus support. frame.unity_oculus_check starts VR (Meta's system-app check), adds the frame wait its legacy loop never makes (without it the GPU hung, black screen) and lets Unity's Oculus input accept Lepton's device model (it only reported controllers on a device named "Oculus ...", so buttons were dead). haptic_fix stops the first controller vibration from freezing the Frame (OVRPort's loader read its duration in nanoseconds as seconds and the game ran out of memory). With pose_time_fix the hands follow the controllers - OVRPlugin asked for hand poses at Android's monotonic "now", which on SteamOS 0.4.5 is 2.56 s behind the runtime's XrTime, so the hands lagged far behind.
Recipe
frame.unity_no_msaaframe.unity_oculus_checkframe.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimadapter.haptic_fixadapter.pose_time_fixtested with version 1.2.4 · 2026-10-08
- Beat Saber
com.beatgames.beatsaber.lj369vrUnityOpenXRWorks2026-10-06Purchased DLC isn't detected (ownership comes from Meta's servers).
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimdevice.text_input_windowtested with version 1.40.8_7379 · checked with FramePort 0.11.0 · 2026-10-06
- Beat Saber
com.beatgames.beatsaberUnityOpenXRWorks2026-10-03Purchased DLC isn't detected (ownership comes from Meta's servers).
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 1.40.8_7379 · checked with FramePort 0.6.1 · 2026-10-03
- Beat SaberPC VRUnityOpenXRWorks2026-10-09
Supports SteamVR/OpenXR itself: runs directly, without Revive.
Recipe
pcvr.xr_timefixpcvr.steamvr_tuningchecked with FramePort 0.12.1.dev232 · 2026-10-09
- Beat Saber (co-existence build)UnityOpenXRWorks2026-10-05
A Beat Saber build with its own package name, so a modded and an unmodded Beat Saber can be installed side by side. The submitted build's app label was very long and the game didn't appear in the Frame's Steam library (GitHub issue 27, a shortcut Steam dropped again; fixed in 0.7.0); the recipe's title names it.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 1.45.1_27839 · checked with FramePort 0.6.3 · 2026-10-05
- Blade & Sorcery: NomadUnityOpenXRWorks2026-10-04
The headset's brief focus losses are hidden (focus_hold, up to 2.5 s). The Frame's runtime drops focus now and then (mostly 1.5-7 s, some only milliseconds); the game pauses ("System menu opened", the world freezes) and re-aligns the player when focus returns (Player.OnVRPresence -> Teleport, the sideways jump). They match the headset's wear sensor flickering off while worn (SteamVR "HMD off" 0.5-2 s), which only this game reacts to; focus_hold hides dips up to 2.5 s here. Rendering keeps 72 fps throughout.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.focus_holdadapter.focus_hold_mstested with version 1.3.1 · 2026-10-04
- BodyCombatUnityOpenXRWorks2026-10-05
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 3.0.0 · checked with FramePort 0.9.1 · 2026-10-05
- BONELABUnityOpenXRWorks2026-10-08
Builds 1.2068 and 1.2974 play (owner's headset tests). One recipe serves both builds - 1.2068 needs frame.unity_user_presence (head tracking and controls); 1.2974 also needs frame.slz_vulkan_hooks (72 fps after about 35 s of shader prewarming), which changes nothing on 1.2068. Both builds - the game runs (72 fps), but its player body stayed frozen - no head tracking, the controllers stuck to the model, no buttons - although OpenXR input and OVRPlugin's poses were fine. A few seconds after start (when Unity switches XR loaders) OVRPlugin reports the worn headset as not worn (ovrp_GetUserPresent2 -> 0), and BONELAB's Marrow rig only follows the player while Unity's HMD device reports UserPresence (OpenControllerRig checks XRHMD.IsUserPresent every frame). frame.unity_user_presence reports the headset as worn. Build 1.2974 only - it adds Stress Level Zero's graphics plugin (libSLZQuestNative.so), which hooks Unity's Vulkan start-up (vkCreateInstance/ vkCreateDevice) and vkCreateSampler; on the Frame its vkCreateInstance wrapper calls an invalid pointer right after OVRPlugin's pre-init instance is destroyed (a jump to 0, into an unloaded library, or a hang). frame.slz_vulkan_hooks switches its two registrations off, so Unity starts Vulkan itself; the plugin's pipeline cache isn't used.
Recipe
frame.unity_user_presenceframe.slz_vulkan_hookstested with version 1.2974.57485 · 2026-10-08
- Carve SnowboardingUnrealVrApiWorks2026-09-28
Legacy VrApi via OVRPlugin.
Recipe
overport.patch_remove_unreal_force_quittested with version 1.09 · 2026-09-28
- CavesUnityOpenXRWorks2026-10-10
First cave loads up perfectly, didn't play to unlock other game modes
Recipe
frame.oculusosadapter.haptic_fixtested with version 1.1.4 · checked with FramePort 0.12.0 · 2026-10-10
- ClockworkUnityOpenXRWorks2026-10-09
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimdevice.text_input_windowadapter.haptic_fixtested with version 1.29 · checked with FramePort 0.12.1.dev203 · 2026-10-09
- Cook-OutUnityOpenXRWorks2026-10-03
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 1.20.0.10625-release · checked with FramePort 0.6.1 · 2026-10-03
- CreedUnrealOpenXRWorks2026-10-05
Runs with the default patches; nothing special needed.
Recipe
overport.patch_remove_unreal_force_quittested with version CRU-386950 · checked with FramePort 0.10.0 · 2026-10-05
- cubismUnityOpenXRWorks2026-10-09
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixadapter.scaletested with version 1.8.0 · checked with FramePort 0.12.0 · 2026-10-09
- Deep CutsUnityOpenXRWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.haptic_fixtested with version 1.1.3271 · checked with FramePort 0.12.0 · 2026-10-10
- DemeterUnityOpenXRWorks2026-09-28
Passthrough + Meta scene/room emulated from the Steam guardian (scene_emul=1). Mixed-reality-only; builds its level from the room model, which the adapter emulates from the Steam guardian.
Recipe
frame.meta_permissionsoverport.patch_force_passthroughadapter.scene_emultested with version 1.1.0 · 2026-09-28
- Dinosaur IslandUnityVrApiWorks2026-10-03
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 1.7.5 · checked with FramePort 0.6.2 · 2026-10-03
- Doom3QuestOtherOpenXRWorks2026-10-06
HUD and PDA show with frame.gl_multiview_fbo (Xandrix1987's headset test, GitHub 77, no frame-rate drop with the PDA open). Walking and running can switch when the frame rate drops, which seems to be the game's own behaviour. Doom3Quest compiles every vertex shader for two views (OVR_multiview) and draws its HUD/PDA into single-view framebuffers. Mesa (the Frame's GL) rejects that combination as the spec requires and drops the draw, so they stayed black; frame.gl_multiview_fbo draws those passes with a single-view copy of the shader. Xandrix1987's framebuffer.cpp fix went upstream as a PR to Team-Beef-Studios/Doom3Quest.
Recipe
frame.gl_multiview_fbotested with version 1.4.8 · checked with FramePort 0.12.0 · 2026-10-06
- Down the Rabbit HoleUnityOpenXRWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimdevice.text_input_windowadapter.haptic_fixtested with version 01.04.434 · checked with FramePort 0.12.0 · 2026-10-10
- Eleven: Table Tennis VRPC VRUnityLibOVR+OpenVRWorks2026-10-09
Supports SteamVR/OpenXR itself: runs directly, without Revive (arguments -vrmode OpenVR).
Recipe
pcvr.launch_argspcvr.xr_timefixpcvr.steamvr_tuningchecked with FramePort 0.12.1.dev232 · 2026-10-09
- Espire 2UnrealOpenXRWorks2026-09-28
Launcher repairs unwritable save folders (fixes the setup loop).
Recipe
overport.patch_remove_unreal_force_quittested with version 1.7.13 · 2026-09-28
- GenotypeUnityOpenXRWorks2026-09-28
Needed the GLES/sRGB swapchain fallback. Also available as a native PC SteamVR title.
tested with version 1.8 · 2026-09-28
- GORN2UnityOpenXRWorks2026-10-07
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 1.10.1 · checked with FramePort 0.12.0 · 2026-10-07
- Gravity LabUnityOpenXRWorks2026-10-09
Works great, along with passthrough mode
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimdevice.text_input_windowadapter.haptic_fixtested with version 1.221 · checked with FramePort 0.12.0 · 2026-10-09
- H.U.N.TUnityOpenXRWorks2026-09-28
Runs with the default patches; nothing special needed.
tested with version 0.1.2 · 2026-09-28
- I Am CatUnityOpenXRWorks2026-10-05
Steady view with pose_consistency (the judder is gone). Unity 2022.3 with the Oculus XR Plugin falls back to GLES (Zink) on the Frame, where its single-pass (multiview) rendering drew the right eye wrong (GitHub issue 8); frame.unity_multipass renders each eye in its own pass (OculusSettings.GetStereoRenderingMode + its inlined read in OculusLoader.Initialize). Poses and frame times are consistent, but every frame reaches the runtime one display period late (two passes on Zink) and the game clamps its physics step to 10 ms. The judder came from the game locating its views about three times per frame and getting slightly different poses each time; FrameBridge pose_consistency returns the same views for repeated queries of one display time (proposed in GitHub issue 8). The grey right eye on the loading screen is still open.
Recipe
frame.unity_text_inputframe.unity_multipassdevice.text_input_windowadapter.pose_consistencytested with version 1.4.0.0 · 2026-10-05
- I Am MonkeyUnityOpenXRWorks2026-10-04
Its intro video plays through FrameBridge's video panels. The game plays its intro on a panel that an Android media player (ExoPlayer) draws into (XR_KHR_android_surface_swapchain). The Frame's runtime lists that extension but refuses the call, so the panel had no image and the game stayed black waiting for the video (GitHub issue 25). The adapter's surface_emul (on by default) hands the player a real Android Surface and copies each video frame into an ordinary swapchain the panel shows.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 1.0.5 · 2026-10-04
- In Death: UnchainedUnrealOpenXRWorks2026-09-28
Online leaderboards unavailable. Online leaderboards likely unavailable.
Recipe
overport.patch_remove_unreal_force_quittested with version 1.8.0 · 2026-09-28
- Into The Radius 2UnrealOpenXRWorks2026-10-05
Plays well (owner-verified 2026-10-05). Space warp is off, the headset's brief focus losses are hidden (focus_hold, up to 2.5 s), only Valve's foveation layer is loaded (its render-pass optimizer removed the fog) and an invalid depth resolve in Unreal's render passes is dropped (vk_spec_fixes; it made models flicker and windows show behind them). Needs FramePort 0.10.0 or newer. Loading a save can take over a minute. Unreal Engine 5 game that uses Meta's Application SpaceWarp (extra motion-vector and depth swapchains). OVRPort's patch_disable_space_warp doesn't reach Unreal Engine 5, so FrameBridge's hide_space_warp hides XR_FB_space_warp and removes the space warp info from the eye images. Working config shared in GitHub issue 35. In the headset (2026-10-05) the Frame dropped focus for 0.4 s and 1.0 s within ten seconds and Unreal paused each time; loading a save shows no frames for 40-80 s while the game's Sentry SDK (debug mode) logs its breadcrumbs. Valve's VALVE_rpo (render-pass optimizer) Vulkan layer removes the game's fog (owner-verified 2026-10-05; with only VALVE_fdm_injection loaded the fog renders), which also hid the distance culling; ruled out for the remaining pop-in - Vulkan occlusion query slots, Valve's FDM layer. The cause, found with Khronos' validation layer (vk_validation) - Unreal's render passes use Qualcomm's shader resolve (VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM) together with a depth resolve of a single-sampled depth attachment (VUID-VkSubpassDescription2-flags-04908, -03179), harmless on Quest's driver, wrong depth on the Frame's Mesa; the Vulkan shim's vk_spec_fixes drops that resolve.
Recipe
overport.patch_remove_unreal_force_quitenv.VK_INSTANCE_LAYERSadapter.equirect_emuladapter.hide_space_warpadapter.focus_holdadapter.focus_hold_msadapter.vk_spec_fixestested with version 1.2.4 · 2026-10-05
- Job SimulatorUnityOpenXRWorks2026-10-03
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 1.4.0.6515 · checked with FramePort 0.6.2 · 2026-10-03
- Jurassic World Aftermath CollectionUnityVrApiWorks2026-10-06
Plays (owner's headset test, 2026-10-06).
Recipe
frame.unity_no_msaaframe.unity_oculus_checkframe.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimframe.vrapi_stubdevice.text_input_windowadapter.haptic_fixtested with version v3.16 · checked with FramePort 0.12.0 · 2026-10-06
- Keep Talking and Nobody ExplodesUnityOpenXRWorks2026-10-04
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 1.10.15 · checked with FramePort 0.6.3 · 2026-10-04
- Lambda1VROtherOpenXRWorks2026-10-06
Needs the game data: upload the release's xash folder to the game's storage (Files tab) and set --msaa 1 in xash/commandline.txt. Owner's headset test, 2026-10-06.
Recipe
frame.tbxr_vendortested with version 1.7.3 · checked with FramePort 0.12.0 · 2026-10-06
- LEGO® BricktalesUnityOpenXRWorks2026-09-28
Use VR mode. Has VR and MR modes; use VR mode (passthrough not forced).
tested with version 2.1 · 2026-09-28
- Lucky's TaleUnityVrApiWorks2026-10-05
Plays normally; touching a save slot no longer freezes the Frame (haptic_fix). Touching a save slot vibrates the controller through XR_FB_haptic_amplitude_envelope; OVRPort's OpenXR loader converts that envelope with the duration in nanoseconds read as seconds and allocates an enormous buffer, so the Frame ran out of memory and froze (found by the GitHub issue 9 reporter). FrameBridge's extension shim turns the envelope into a plain vibration before OVRPort's loader sees it (haptic_fix). Brief pauses came from the headset's wear sensor flickering, now hidden by focus_hold (on by default).
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offdevice.text_input_windowadapter.haptic_fixtested with version 1.0.55 · 2026-10-05
- Marvel's Deadpool VRUnrealOpenXRWorks2026-10-01
Unreal (Vulkan): Lepton's Fossilize layer crashed on uninitialized render-pass pNexts; frame.vk_sanitize fixes it. Confirmed working in the headset by the owner (2026-10-01). Needs frame.vk_sanitize (native/vkshim) and frame.swapchain_limit; space warp disabled (32 GiB OVRPlugin game).
Recipe
overport.patch_remove_unreal_force_quitoverport.patch_disable_space_warptested with version 1.0.40.356975.Quest · 2026-10-01
- Marvel's Iron Man VRUnityOpenXRWorks2026-10-05
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 0.1.0-250068 · checked with FramePort 0.9.1 · 2026-10-05
- Max MustardUnityOpenXRWorks2026-10-08
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 1.1.0 · checked with FramePort 0.12.0 · 2026-10-08
- Medieval Dynasty New SettlementUnityOpenXRWorks2026-09-28
Co-op unavailable. Release notes: for DLC use an older version. Co-op likely unavailable.
tested with version 2.4 · 2026-09-28
- Metro AwakeningUnrealOpenXRWorks2026-10-06
Plays (owner's headset test) with the Vulkan shim's fixes, fragment density maps hidden, space warp off and without Valve's VALVE_rpo layer (random jumping polygons in 3D without the last two, as in Into The Radius 2). Unreal 5.2 (Vulkan) quit itself (ForceQuit, use_alt), then crashed three times in the Frame's Vulkan driver (Turnip) on things Quest's driver ignores - a depth resolve in a subpass without a depth attachment, image barriers and image views for a missing image. Unreal turns on fragment-density-map foveation because the driver offers the extension and then expects the density map from the headset, which the Frame never provides; vk_hide_fdm hides the extension from the game (Valve's own foveation layer is unaffected).
Recipe
overport.patch_remove_unreal_force_quitenv.VK_INSTANCE_LAYERSadapter.vk_spec_fixesadapter.vk_hide_fdmadapter.hide_space_warptested with version 1.0-916944 · 2026-10-06
- Mobile Suit Gundam: Silver PhantomUnityOpenXRWorks2026-09-28
Uses Meta XR Audio via FMOD (not covered by patch_meta_xr_audio); if audio is missing, that is the likely cause.
tested with version 1.1.58.402 · 2026-09-28
- NanoUnityOpenXRWorks2026-10-02
Needs Oculus OS telemetry class stubs and the no-ForceQuit build (the normal build quits right after starting).
Recipe
frame.oculusosoverport.patch_remove_unreal_force_quittested with version 1.711 · 2026-10-02
- NEX PlayerUnityOpenXRWorks2026-10-01
Confirmed in the headset by the owner (2026-10-01): 72 fps, local 2D/360/3D videos play (it browses /sdcard/Movies itself). USB-drive browsing can't work in Lepton.
tested with version 1.3.1.0 · 2026-10-01
- NOPE CHALLENGEUnrealOpenXRWorks2026-09-28
Meta XR Audio telemetry patch + nodebug. MR "Reality Breach" mode unavailable. The MR 'Reality Breach' mode needs passthrough; standard VR mode used.
Recipe
frame.nodebugframe.oculusosoverport.patch_remove_unreal_force_quittested with version 1.0.964.7166 · 2026-09-28
- palazzo_santacruzUnityOpenXRWorks2026-10-05
Played a few levels. Passthrough also works.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 3.7.6.10866-release · checked with FramePort 0.9.1 · 2026-10-05
- Path of the WarriorOtherVrApiWorks2026-09-28
Direct VrApi GLES engine: VrApi bridge (GLES) + GL shim. Calls libvrapi directly (no OVRPlugin) with a GLAD-based GLES engine; its shaders need the GL shim on Mesa.
Recipe
frame.gl_shimframe.vrapi_bridgetested with version 21.11.10.358057 · 2026-09-28
- Pistol WhipUnityOpenXRWorks2026-10-08
120 HZ
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 1.6.0.2 · checked with FramePort 0.12.0 · 2026-10-08
- Pistol WhipPC VRUnityOpenVRWorks2026-10-09
Supports SteamVR/OpenXR itself: runs directly, without Revive.
Recipe
pcvr.xr_timefixpcvr.steamvr_tuningchecked with FramePort 0.12.1.dev232 · 2026-10-09
- Please Don't Touch AnythingUnityOpenXRWorks2026-10-08
Seems functional
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 2.2 · checked with FramePort 0.12.0 · 2026-10-08
- PowerWash Simulator VRUnityOpenXRWorks2026-09-28
Recommended pilot title.
tested with version 2.5.0 · 2026-09-28
- QuestCraftUnityOpenXRWorks2026-10-05
Minecraft runs in VR (Vivecraft, about 72 fps; drops while worlds load). Needs FramePort 0.10.0 or newer for the picture (older versions show black). On first start QuestCraft downloads its Java runtime, which didn't unpack on the Frame once (see details). QuestCraft downloads its Java runtime (JRE.zip from QuestCraft's GitHub releases) into files/runtimes/JRE on first start; on the Frame that step once left nothing behind ("libjvm.so not found"; unpacked by hand). Two Frame fixes, both owner-verified 2026-10-05. (1) Minecraft 1.21.5 checks GL errors strictly and aborted with "OpenGL error 1282", an error the Frame's Mesa (Zink) reports where Quest's driver doesn't; QuestCraft's GL-to-GLES layer (LTW) ignores GL errors when LIBGL_NOERROR is set, which Lepton passes from LEPTON_ENV_LIBGL_NOERROR. (2) LTW passes desktop GL_DEPTH_COMPONENT32 through, which Mesa rejects, so every framebuffer was incomplete and the picture black; frame.ltw_depth (automatic for APKs with libltw.so) loads GLES through a shim that asks for GL_DEPTH_COMPONENT32F. Left over, harmless so far - Mesa still reports about 4 GL_INVALID_OPERATION per frame ("in glthread", so the call is unknown; mesa_glthread=false would name it).
Recipe
frame.unity_text_inputdevice.text_input_windowenv.LEPTON_ENV_LIBGL_NOERRORtested with version 6.0.0-RC4 · 2026-10-05
- Racket: NxUnityVrApiWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimdevice.text_input_windowadapter.haptic_fixtested with version 2.8.31 · checked with FramePort 0.12.0 · 2026-10-10
- RC Pilot TrainerUnityOpenXRWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.haptic_fixtested with version 0.7.0.2 · checked with FramePort 0.12.0 · 2026-10-10
- RetronikaUnityOpenXRWorks2026-10-07
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 3.2.601 · checked with FramePort 0.12.0 · 2026-10-07
- RetropolisUnityOpenXRWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.haptic_fixtested with version 0.87 · checked with FramePort 0.12.0 · 2026-10-10
- Richie's Plank ExperienceUnityOpenXRWorks2026-10-07
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.haptic_fixtested with version 2.3.585 · checked with FramePort 0.12.0 · 2026-10-07
- Rick and Morty: Virtual Rick-alityPC VRUnityOpenVRWorks2026-09-29
Runs on the Frame under Proton without Revive (this build talks to SteamVR directly). Slight stutter. The dump's executable already uses SteamVR (OpenVR), so it is installed as it is; Proton's VR bridge only starts with FramePort's OpenXR layer (the Frame runtime accepts OpenXR 1.0 apps only). Confirmed in the headset.
Recipe
pcvr.xr_timefixtested with version v2288226 · 2026-09-29
- RivenUnrealOpenXRWorks2026-10-04
Plays as expected.
Recipe
overport.patch_remove_unreal_force_quitadapter.equirect_emultested with version 1.9.0 · checked with FramePort 0.6.3 · 2026-10-04
- Robo RecallUnrealVrApiWorks2026-09-28
Needed the LAUNCHER category fix. Source APK is a community 'patch+savefix+90Hz' build. Shares Vader Immortal's Unreal 4 Oculus input (GitHub 49) - thumbs follow the touches (frame.unreal_thumb_touch) and controller poses are located at the right time (pose_time_fix); added 2026-10-09 from Vader's headset results, not yet checked in this game.
Recipe
frame.unreal_thumb_touchoverport.patch_remove_unreal_force_quitadapter.pose_time_fixtested with version 1.0 · 2026-09-28
- RUINSMAGUSUnityVrApiWorks2026-10-07
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 1.2.3 · checked with FramePort 0.12.0 · 2026-10-07
- Shores of LociUnityOpenXRWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 1.2 · checked with FramePort 0.12.0 · 2026-10-10
- Sniper Elite VRUnityVrApiWorks2026-10-07
Plays with controllers that follow the hands (owner's headset test, Quest 1 build 35713). Unity 2019.4 on its built-in Oculus VR (no Oculus XR Plugin). Its legacy frame loop never waited for frames (GPU hang, zink: DEVICE LOST) and Unity reported only Go controllers: frame.unity_oculus_check. Its frame wait then deadlocked at the Init scene (Unity skipped beginning a frame) and the physics-step pose update located the controllers in the past (hands lagged): both fixed in that patch (revision 5), switched on for this game by ovrp_begin_gate and ovrp_hold_physics. Grabbing an object in the tutorial vibrates the controller; OVRPort's envelope conversion then allocated ~1 GB/s until the memory cap ended the game: haptic_fix. The Quest 1 build has no arraysources_assets.hd, which the game loads on the Frame (it detects a Quest 2) and then skips the .sd bundle: textures are missing unless the .sd file is also present under the .hd name in the game's obb folder.
Recipe
frame.unity_no_msaaframe.unity_oculus_checkadapter.haptic_fixadapter.ovrp_begin_gateadapter.ovrp_hold_physicstested with version 1.03 · 2026-10-07
- Sniper Elite VR: Winter WarriorUnityOpenXRWorks2026-09-28
Runs with the default patches; nothing special needed.
tested with version 1.0.1 · 2026-09-28
- Space Pirate Trainer QuestUnityVrApiWorks2026-10-04
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offdevice.text_input_windowtested with version 1.97 · checked with FramePort 0.6.3 · 2026-10-04
- Star Wars Pinball VRUnrealVrApiWorks2026-10-08
Plays (owner's headset test); one short audio hiccup seen. Unreal 4.25 (GLES) built against OVRPlugin 1.44. Four Frame problems in a row: Zink crashed on Unreal's multisampled render-to-texture (fault addr 0x10000 on the RHIThread): frame.unreal_gl_shim, which keeps Unreal's multiview and draws those passes single-sampled; OVRPort's OVRPlugin lacks ovrp_GetPTWNear, so Unreal's Oculus module never started VR (then a null pointer in GetMultiViewSceneColor): frame.unreal_ovrp_entrypoints; the engine's OpenSSL assembly has unpaired return-address checks the Frame's CPU enforces (SIGILL on the HttpManager thread): frame.pac_hints. Needs its OBB (main.10765).
Recipe
frame.unreal_gl_shimframe.unreal_ovrp_entrypointsframe.pac_hintsadapter.haptic_fixtested with version 1.4 · 2026-10-08
- StremioUnityOpenXRWorks2026-10-03
Unity 6 VR media centre (its interface is web pages in Vuplex 3D WebView). Text fields closed at once on the Frame (no system keyboard): frame.unity_text_input keeps them selected and device.text_input_window shows the Android window so Steam's on-screen keyboard (or Type on Frame from the PC) types into them; confirmed in the headset by the owner (2026-10-03), who confirmed it working. Note: the add-ons page can stay blank in VR (the add-on sync itself succeeds). "Play in an external player" can't reach another app: Lepton sends every link to Steam's browser. Patches: frame.unity_text_input (TMP_InputField.TouchScreenKeyboardShouldBeUsed -> false, isKeyboardUsingEvents -> true; uGUI InputField too), device.text_input_window (lepton-show-flatscreen).
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 0.7.5 · 2026-10-03
- SUPERHOT VRPC VRUnityOpenXRWorks2026-10-05
Supports SteamVR/OpenXR itself: runs directly, without Revive. Older builds with both Oculus and SteamVR support (SUPERHOTVR.exe) start with -vrmode OpenVR.
Recipe
pcvr.launch_argspcvr.xr_timefixpcvr.steamvr_tuningchecked with FramePort 0.6.3 · 2026-10-05
- SUPERHOT VRUnityVrApiWorks2026-10-04
Quest version. Needs FramePort's launcher from agent 41 (reinstall once) so the game can write its saves. Unity 2018.4 with built-in Oculus support (GLES). Its eye swapchains (GL_RGBA8, then a 16-bit format) are created as sRGB by the adapter's swapchain_fix. The game creates its cloud save folder with mode 1700 and quits at start when it can't write there ("Something failed to initialize. Quitting!"); the launcher now gives every folder in the game's storage owner and group write permission. On the very first start it creates that folder and checks it in the same moment (GitHub 120), so the recipe creates the folder at install (device_files) and the launcher fixes it before the game starts.
Recipe
frame.unity_no_msaaframe.unity_oculus_checkframe.unity_text_inputframe.unity_runtime_msaa_offdevice.text_input_windowtested with version 1.161 · 2026-10-04
- SynthRidersUnityOpenXRWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.controller_modelsadapter.haptic_fixtested with version 3.6.7a1 · checked with FramePort 0.12.0 · 2026-10-10
- TetrisEffectUnrealVrApiWorks2026-10-05
Opened the game, messed around with the menu, and played the first level. Works great.
Recipe
overport.patch_remove_unreal_force_quittested with version 2.0.2 · checked with FramePort 0.9.1 · 2026-10-05
- The Boys VRUnityOpenXRWorks2026-10-06
Plays with space warp off (owner's headset test, 2026-10-06; black screen reported before).
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixadapter.hide_space_warptested with version 1.1.0.345 · checked with FramePort 0.12.0 · 2026-10-06
- The Climb 2CryEngineVrApiWorks2026-09-28
CryEngine direct VrApi (Vulkan): VrApi bridge + platform compat; user.cfg disables VRS. CryEngine calls libvrapi directly; overport cannot translate it, so the VrApi bridge replaces libvrapi.so.
Recipe
frame.vrapi_bridgetested with version 2.2 · 2026-09-28
- The Room VRUnityVrApiWorks2026-10-05
Plays normally (it used to stay on a grey screen). Unity 2018.4 with built-in Oculus support. It started VR only with frame.unity_oculus_check, then Unity's render thread crashed in the GL driver (Zink) when OVROverlay copied a 4x4 fade texture into its overlay layer; frame.unity_no_overlay_copy skips that copy (the fade still works). frame.unity_runtime_msaa_off keeps the eye buffer at one sample (also GitHub issue 38).
Recipe
frame.unity_no_msaaframe.unity_oculus_checkframe.unity_text_inputframe.unity_runtime_msaa_offframe.unity_no_overlay_copydevice.text_input_windowtested with version 1.02 · 2026-10-05
- The Tale of OnogoroUnityOpenXRWorks2026-10-08
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 1.1.0248 · checked with FramePort 0.12.0 · 2026-10-08
- Time Crisis VR (Experimental)OtherOpenXRWorks2026-10-06
Fully playable at 120hz
Recipe
frame.sdl_clipboardtested with version 0.8.3 · checked with FramePort 0.12.0 · 2026-10-06
- Toy MasterUnityOpenXRWorks2026-09-28
Runs with the default patches; nothing special needed.
tested with version 1.1.2 · 2026-09-28
- Under CoverUnityOpenXRWorks2026-09-28
Layers with failed swapchains are dropped by the adapter.
tested with version 1.1.3r2 · 2026-09-28
- Vader Immortal: Episode IUnrealVrApiWorks2026-10-09
Plays (owner's headset test): loading card, grip/trigger, hands and the lightspeed sequence fixed. Thumbs follow the touches with frame.unreal_thumb_touch (Klownicle's engine fix). Unreal Engine 4 (GLES). Found and verified in gameplay on a Frame by Klownicle (GitHub issue 49); FramePort reimplements them as patches that match the game's code exactly and change nothing when it differs. The engine's Quest checks (IsRunningOnSantaCruz) answer "not a Quest" on the Frame - the menu waited for a Quest-only shader precompile that never starts (frame.unreal_quest_precompile makes the non-Quest branch report 100 %), and the game's key map picked the empty Gear VR controls (frame.unreal_quest_keymap keeps the Quest set). Two lightspeed shaders, as the Frame's GL driver (Zink) compiles them, read loop counters and accumulators before setting them and hang the GPU; a Vulkan layer under Zink inserts the stores that zero them (frame.zink_shader_fix, zink_shader_fix; the captured modules are from Lepton 2.8.14 and stop matching if a Frame update changes the driver's output - the layer logs that). OVRPlugin asks for poses at its own clock (pose_time_fix). Unreal's Oculus input animates the thumbs from near-touch, which the Frame never reports (frame.unreal_thumb_touch reads the touches instead; binding the proximity to the touch inputs in FrameBridge didn't reach the game). The Frame's SteamVR runtime leaks about 20 MB a second while the game runs (reported to Valve).
Recipe
frame.unreal_quest_precompileframe.unreal_quest_keymapframe.unreal_thumb_touchframe.zink_shader_fixoverport.patch_remove_unreal_force_quitadapter.pose_time_fixadapter.zink_shader_fixtested with version 1.1.1+667256.cl.387770 · 2026-10-09
- Vader Immortal: Episode IIUnrealVrApiWorks2026-10-09
Plays (owner's headset test, 2026-10-09) with Episode I's fixes, which FramePort finds in this episode's code too. Unreal Engine 4 (GLES), the same engine build as Episode I: the Quest-only shader precompile and key map (frame.unreal_quest_precompile, frame.unreal_quest_keymap), thumbs from the capacitive touches (frame.unreal_thumb_touch) and poses at OVRPlugin's clock (pose_time_fix). Episode I's lightspeed shader fix doesn't apply. The campaign intro once stayed black with its dialogue playing; it rendered on the next run.
Recipe
frame.unreal_quest_precompileframe.unreal_quest_keymapframe.unreal_thumb_touchoverport.patch_remove_unreal_force_quitadapter.pose_time_fixtested with version 2.0.3+667261.cl.387778 · 2026-10-09
- Vader Immortal: Episode IIIUnrealVrApiWorks2026-10-09
Plays (owner's headset test, 2026-10-09) with Episode I's fixes, which FramePort finds in this episode's code too. Unreal Engine 4 (GLES), the same engine build as Episode I: the Quest-only shader precompile and key map (frame.unreal_quest_precompile, frame.unreal_quest_keymap), thumbs from the capacitive touches (frame.unreal_thumb_touch) and poses at OVRPlugin's clock (pose_time_fix). Episode I's lightspeed shader fix doesn't apply. The campaign intro starts on a black screen with only dialogue: that is the game, not a bug.
Recipe
frame.unreal_quest_precompileframe.unreal_quest_keymapframe.unreal_thumb_touchoverport.patch_remove_unreal_force_quitadapter.pose_time_fixtested with version 3.0.3+667263.cl.387932 · 2026-10-09
- VR HOT QuestUnityOpenXRWorks2026-10-08
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.controller_modelsadapter.haptic_fixtested with version 0.8.8.1 · checked with FramePort 0.12.0 · 2026-10-08
- VR4UnrealVrApiWorks2026-10-02
Installs the no-ForceQuit build and fixes a campaign shader that hung the GPU after the opening cutscene. Entering the campaign gave a black screen, slowing audio and a crash (Mercenaries loaded). One fragment shader reads a loop counter before setting it, which hangs the GPU; the Vulkan shim zeroes it (vk_shader_fix). The no-ForceQuit build is kept. Diagnosed and confirmed on a Frame by the reporter of GitHub issue 10.
Recipe
overport.patch_remove_unreal_force_quitadapter.vk_shader_fixtested with version 2.3 · checked with FramePort 0.3.4 · 2026-10-02
- Walkabout Mini GolfUnityOpenXRWorks2026-10-08
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.controller_modelsadapter.haptic_fixadapter.scaletested with version 6.7 · checked with FramePort 0.12.0 · 2026-10-08
- Wallace & Gromit in The Grand GetawayUnrealOpenXRWorks2026-09-28
Missing Meta platform functions stubbed.
Recipe
overport.patch_remove_unreal_force_quittested with version 1.0.34 · 2026-09-28
- Waltz of the Wizard: Extended EditionUnityOpenXRWorks2026-10-05
From what I tested, it just works. My only complaint is that the haptics go pretty crazy. But I don't remember what it was like when I played it in my Quest. So it could be fine. 100% playable.
Recipe
frame.unity_text_inputdevice.text_input_windowtested with version 5.0.8.1578 · checked with FramePort 0.9.1 · 2026-10-05
- WanderUnityOpenXRWorks2026-10-04
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.unity_runtime_msaa_offdevice.text_input_windowtested with version 0.3569 · checked with FramePort 0.6.3 · 2026-10-04
- ZombielandVRUnityVrApiWorks2026-10-10
Runs with the default patches; nothing special needed.
Recipe
frame.unity_text_inputframe.vrapi_stubdevice.text_input_windowadapter.haptic_fixtested with version 1.7.0 · checked with FramePort 0.12.1.dev252 · 2026-10-10
- Ancient_DungeonMultiplayer isn't available (offline).UnityOpenXRWith issues2026-10-10
Multiplayer isn't available (offline).
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version ea0.1.10.2 · checked with FramePort 0.12.0 · 2026-10-10
- ArcsmithRight eye distorts during movement (unresolved; swap, tracking, Valve layers, depth and pacing ruled out).UnityVrApiWith issues2026-09-28
Right eye distorts during movement (unresolved; swap, tracking, Valve layers, depth and pacing ruled out). Legacy VrApi via OVRPlugin; overport swaps in an OpenXR OVRPlugin. Do not remove VrApi.
tested with version 1.128 · 2026-09-28
- Assassin's Creed NexusSome launch warning text is still upside down; the rest of the UI is fixed by flip emulation.UnityOpenXRWith issues2026-09-28
Some launch warning text is still upside down; the rest of the UI is fixed by flip emulation. Ubisoft login may not work. Ubisoft online login may not work. Data folder holds raw assets (start0..2, .climb, bundles), not .obb files; install to obb as-is.
Recipe
overport.patch_ac_nexus_no_appsw_90tested with version MAIN.450412.207706.final · 2026-09-28
- Does it Stack?Mixed reality mode does not work (works on Demeo), everything else seems to be OKUnityOpenXRWith issues2026-10-09
Mixed reality mode does not work (works on Demeo), everything else seems to be OK
Recipe
frame.unity_text_inputframe.oculusosdevice.text_input_windowadapter.haptic_fixadapter.refresh_ratetested with version 1.02 (3683) · checked with FramePort 0.12.0 · 2026-10-09
- End SpaceControls stop responding after the first mission loads.UnityVrApiWith issues2026-10-10
Controls stop responding after the first mission loads.
Recipe
frame.unity_oculus_checkframe.unity_text_inputframe.unity_runtime_msaa_offframe.unity_gl_shimdevice.text_input_windowadapter.haptic_fixtested with version 1.0.6.1 · checked with FramePort 0.12.0 · 2026-10-10
- ExploreVRThe 3D world warps and shifts with head movement (wrong perspective).UnrealVrApiWith issues2026-10-10
The 3D world warps and shifts with head movement (wrong perspective).
Recipe
frame.nodebugoverport.patch_remove_unreal_force_quitadapter.haptic_fixtested with version 1.2.1 · checked with FramePort 0.12.0 · 2026-10-10
- FreedomVolume can't be changed in the game.UnityOpenXRWith issues2026-10-10
Volume can't be changed in the game.
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 1.0.2950 · checked with FramePort 0.12.0 · 2026-10-10
- MystMinor graphical glitches on some objects.UnrealOpenXRWith issues2026-10-04
Minor graphical glitches on some objects. The crash is in the Frame's SteamVR runtime (vrclient.so CVRInputLatest::UpdateActionStateInternal via xrSyncActions) on the first input sync after focus, in 2 of 4 headset sessions. sync_guard serialises input syncs with event polling and pauses them for 250 ms after focus returns (confirmed in the headset, no crash). The object glitches are not application space warp (turning it off didn't change them and ran slightly worse).
Recipe
overport.patch_remove_unreal_force_quitadapter.sync_guardtested with version 3.3.0 · 2026-10-04
- Phantom: Covert OpsDLC/store button crashes (no Meta store).UnrealVrApiWith issues2026-09-28
DLC/store button crashes (no Meta store). Installs the no-ForceQuit build. The regular build quits itself on the Frame (System.exit after a failed platform check), so the no-ForceQuit build is installed. Shares Vader Immortal's Unreal 4 Oculus input (GitHub 49) - thumbs follow the touches (frame.unreal_thumb_touch) and controller poses are located at the right time (pose_time_fix); added 2026-10-09 from Vader's headset results, not yet checked in this game.
Recipe
frame.unreal_thumb_touchoverport.patch_remove_unreal_force_quitadapter.pose_time_fixtested with version 1.2 · 2026-09-28
- Pinball FX VRPlays; mixed reality mode not working yet.UnrealOpenXRWith issues2026-10-05
Plays; mixed reality mode not working yet. Space warp off (fewer stutters).
Recipe
overport.patch_remove_unreal_force_quitadapter.equirect_emuladapter.hide_space_warptested with version 1.9 · checked with FramePort 0.9.1 · 2026-10-05
- SilhouetteHand-tracking game; the Frame synthesizes hands from controllers, so it is janky.UnityOpenXRWith issues2026-09-28
Hand-tracking game; the Frame synthesizes hands from controllers, so it is janky. Hand-tracking-only game; Steam Frame has no optical hand tracking. Built with controller_fix=0 so hand data passes through if the runtime ever provides it.
Recipe
adapter.controller_fixtested with version 1.3.0 · 2026-09-28
- The Light BrigadeJudder in weaponsUnityOpenXRWith issues2026-10-09
Judder in weapons
Recipe
frame.unity_text_inputdevice.text_input_windowadapter.haptic_fixtested with version 746 · checked with FramePort 0.12.0 · 2026-10-09
- Time StallBoth eyes distort during movement (unresolved).UnrealVrApiWith issues2026-09-28
Both eyes distort during movement (unresolved). Legacy VrApi via OVRPlugin. Shares Vader Immortal's Unreal 4 Oculus input (GitHub 49) - thumbs follow the touches (frame.unreal_thumb_touch) and controller poses are located at the right time (pose_time_fix); added 2026-10-09 from Vader's headset results, not yet checked in this game.
Recipe
frame.unreal_thumb_touchframe.nodebugoverport.patch_remove_unreal_force_quitadapter.pose_time_fixtested with version 1.0 · 2026-09-28
- WiiCompiled VRTo add a game: in FramePort's Files tab, upload your .wcgame file to this game's storage, folder Android/data/org.wiicompiled.quest/files/WiiCompiledOpenXRVR…OtherOpenXRWith issues2026-10-04
To add a game: in FramePort's Files tab, upload your .wcgame file to this game's storage, folder Android/data/org.wiicompiled.quest/files/WiiCompiledOpenXRVR/Import, then open WiiCompiled (it imports the newest file there; one at a time). Once your game is imported, turn on "Start straight in VR" (and off "Show the app's Android window") and update it on the Frame: it then opens in VR without the flat launcher window, which otherwise stays in view (turn it off again to import another game). The right eye jitters during races. A native Mario Kart Wii recompilation (needs your own disc as .wcgame files built by the WiiCompiled launcher on a computer). Lepton's Android has no document picker, so the launcher's "Import from computer" and "select disc image" buttons fail (ActivityNotFoundException for OPEN_DOCUMENT); its Import folder is read when the launcher opens instead. The game's libmain.so has its own OpenXR loader and talks to the Frame's runtime directly (FrameBridge isn't in its path); the right-eye jitter in races comes from its stereo replay of the race view, so it needs a fix in WiiCompiled itself. The launcher is a flat Android window (shown with lepton-show-flatscreen) that stays in view after it starts the VR part (QuestActivity, process :game); frame.start_activity makes QuestActivity the start activity (owner-verified 2026-10-05, opens straight in VR), but it skips the launcher's import step, so it stays off by default.
Recipe
frame.sdl_clipboardframe.vk_sanitizedevice.text_input_windowtested with version 0.4.0-quest · 2026-10-04
- BlazeRushStarts and reaches the menu room, but the room shows no controllers and ignores all input (it all reaches the game); no fix yet.OtherVrApiDoesn't run2026-10-06
Starts and reaches the menu room, but the room shows no controllers and ignores all input (it all reaches the game); no fix yet.
Recipe
frame.vrapi_bridgeframe.avatar_stubtested with version 1.0.349 · checked with FramePort 0.12.0 · 2026-10-06
- Eleven Table TennisStops at the splash screen.UnityOpenXRDoesn't run2026-10-10
Stops at the splash screen. The game needs Meta's online services after start, which aren't available on the Frame.
2026-10-10
- Espire 1: VR Operative (Quest Edition)Mesa GL driver crash during texture upload.UnrealVrApiDoesn't run2026-09-28
Mesa GL driver crash during texture upload. Legacy VrApi via OVRPlugin.
Recipe
overport.patch_remove_unreal_force_quittested with version 1.13.36 · 2026-09-28
- GOLF+Black screen.UnityOpenXRDoesn't run2026-10-10
Black screen. The game's servers reject the login on this platform (Authentication not supported).
2026-10-10
- HITMAN 3 VR: ReloadedVulkan driver crash (freedreno), even without Valve layers.OtherOpenXRDoesn't run2026-09-28
Vulkan driver crash (freedreno), even without Valve layers. Glacier engine, Vulkan renderer; Quest 3-only title. Release notes: may require a CLEAN install (remove any previous install first).
tested with version 0.0.3469 main-14813cc56 · 2026-09-28
- Journey of the Gods32-bit only; the Frame has no AArch32.UnrealVrApiDoesn't run2026-09-28
32-bit only; the Frame has no AArch32. 32-bit (armeabi-v7a) only; the Frame has no AArch32. UE4 cannot be rebuilt for arm64.
Recipe
overport.patch_remove_unreal_force_quittested with version 1.0.479431 · 2026-09-28
- RobloxCrashes on its first VR frame on the Frame.OtherOpenXRDoesn't run2026-10-04
Crashes on its first VR frame on the Frame. SIGSEGV on Roblox's render thread right after it re-creates its eye swapchains (format 37, which the Frame doesn't offer, retried as sRGB 43) — in its own code or inside the runtime's xrBeginFrame. No integrity or login check involved; also needs an online login once it runs.
tested with version 2.741.1051 · 2026-10-04
- Shadow Point32-bit only; the Frame has no AArch32.UnityVrApiDoesn't run2026-09-28
32-bit only; the Frame has no AArch32. 32-bit (armeabi-v7a) only; the Frame has no AArch32. 64-bit conversion was researched and dropped (IL2CPP + FMOD + custom rasterizer).
tested with version 1.4 · 2026-09-28
- Sports Scramble (Santa Cruz)32-bit only; the Frame has no AArch32.UnrealVrApiDoesn't run2026-09-28
32-bit only; the Frame has no AArch32. 32-bit (armeabi-v7a) only; the Frame has no AArch32.
Recipe
overport.patch_remove_unreal_force_quittested with version 1.0 · 2026-09-28
No tested game matches. It may still work: FramePort suggests patches.
04 Compared
Open source, and it patches the games that don't just work
Other tools install an app as it is. FramePort also patches Quest games that wouldn't run on the Frame.
-
Free and open source
FramePortGPL-3.0. Read it, build it, change it, share it.
FrameDropFree (donationware). Source not published.
Valve's toolsFree, from Valve.
-
Quest games that don't run as they are
FramePortPatches them for the Frame, with a tested recipe for 90+ games.
FrameDropInstalls the APK as it is.
Valve's toolsInstalls the APK as it is.
-
Your PC
FramePortWindows, macOS and Linux.
FrameDropWindows.
Valve's toolsDepends on the tool.
-
Wi-Fi or a USB cable
FramePortHome Wi-Fi, the Frame's own hotspot or a USB cable.
FrameDropSame Wi-Fi network.
Valve's toolsWi-Fi, or adb.
Show all 12 differencesHide the full table▾
| Question | FramePortThis project | FrameDropSideloader by CadeXR | By hand with Valve's toolsSteamOS Devkit Client, or adb with Lepton Development |
|---|---|---|---|
| What does it cost, and can I see the code? | Yes: Free, open source (GPL-3.0) | Partly: Free (donationware), source not published | Yes: Free, from Valve |
| Which PC can I use? | Yes: Windows, macOS, Linux | Partly: Windows | Partly: Depends on the tool |
| How do I connect the Frame the first time? | Yes: Run one line in the Frame's Konsole, click Allow on your PC. No password | Partly: Turn on Developer Mode, then Settings → Developer → Pair new host | Partly: Turn on Developer Mode and pair, or use Android's debug tool (adb) |
| Wireless or cable? | Yes: Wi-Fi, the Frame's hotspot or a USB cable | Partly: Same Wi-Fi network | Partly: Wi-Fi, or adb |
| Will a Quest game that doesn't run on the Frame work? | Yes: Converted and patched for the Frame | No: Installs the APK as it is | No: Installs the APK as it is |
| Does it know which patches a game needs? | Yes: A tested recipe for 90+ games, updated without an app update | Not stated: Not stated | No: No |
| Will the game be in my Steam library? | Yes: Yes, with artwork and tags | Partly: As a "Devkit Game" shortcut | Partly: As "Devkit Game: <title>"; not with adb |
| Android apps, Linux apps, Windows programs? | Yes: All three; FramePort installs Proton for Windows programs | Yes: All three; you install Proton first | Partly: Yes; 2D Android apps need an extra file |
| PC VR games? | Yes: On your PC; some also on the Frame | No: Not supported | No: Not supported |
| Do "Install with …" buttons on websites work? | Yes: Its own and FrameDrop's | Yes: FrameDrop's (it defined them) | No: No |
| What if a game doesn't start? | Yes: A launch test reads the logs and suggests a patch | Partly: A log viewer shows the log | No: No help |
| Can I see and use the Frame from my PC? | Yes: Live view, Monitor, Files, Screenshots, Type on Frame | Not stated: Not stated | No: No |
Other tools as their own pages describe them, checked 2026-10-09: FrameDrop: about · FrameDrop: how-to · FrameDrop: install buttons · Valve: loading games on Steam Frame. Out of date? Report a problem
05 Install
From the download to your first game
Step 1 · On your PC
Download FramePort
Windows, macOS or Linux. Unpack it anywhere and start it. No installer; it updates itself.
First start: open FramePort.exe. If Windows says "Windows protected your PC", choose More info → Run anyway.
Release notes and checksumsStep 2 · On your PC
Steam Frame → Start setup
FramePort shows the setup line and waits for the Frame. Both need the same Wi-Fi, the Frame's hotspot or a USB cable.
Try it: click Start setup in the window.
curl -sL frameport.app/s | bash
Waiting for your Frame to ask…
Step 3 · On the Frame, once
Run the setup line
Open Konsole: SteamVR dashboard → Launch a program → Desktop, then app menu → System → Konsole. Run this line:
$curl -sL frameport.app/s | bashNo keyboard? Open the setup page in Chromium on the Frame (Steam's + on the taskbar installs it) and copy the line.
Open Settings → Developer → Pair new host on the Frame and approve FramePort in the headset. Nothing to click on the PC; skip step 4.
Step 4 · On your PC
Allow it when the codes match
Konsole and FramePort show the same 4 digits. Click Allow. Nothing changes on the Frame before that.
Try it: the Frame here shows 4831.
Step 5 · On the Frame, by itself
The setup finishes on its own
Developer Mode turns on and Steam restarts once. If Steam asks to install Lepton (Valve's Android app support), confirm it. FramePort connects within a minute.
Step 6 · Every game
Add games, install, play
Add games → Scan a folder…, pick a game, click Install on Frame. It shows up in the Frame's Steam library. Play it from FramePort or in the headset.
▶ Watch the videoOther ways to connect, such as a USB cable, are on the setup page.
For game makers
An "Install with FramePort" button
Put it on your download page. A click opens FramePort, which installs your game on the visitor's Frame.
How to add the button<a href="https://frameport.app/install/?manifest=https%3A%2F%2Fexample.com%2Fmy-game.json">
<img src="https://frameport.app/media/install-with-frameport.svg"
alt="Install with FramePort" width="216" height="60">
</a>
06 What's new
FramePort 0.12.0
- Controller vibration feels like on a Quest (vibrations stop when the game says so); new per-game "Vibration strength" setting
- New fixes: Team Beef ports (e.g. Lambda1VR), games that ship Meta's VrApi or avatar libraries, missing VrApi functions, multisampled rendering in GL games
- Contributor fixes from UnicronNL: microphone crash, BONELAB controls, Metro Awakening's Vulkan crashes
- Per-game choice for Valve's eye-tracked foveation
- 0.11.1 BattleSisters works: controller buttons, and no more freeze on the first vibration (#48)
- 0.11.0 Fixes a start-up loop that made FramePort open slowly or crash after updating to 0.10.0 (#58)
- 0.10.0 Set up with a USB cable; each Frame is listed once, with its fastest connection