I have developed several immersive applications using Unity and Needle Engine, all of which have previously performed reliably.
However, following recent Meta updates, I have encountered a significant issue when switching to VR mode within the Meta Browser. The application initially runs as expected, but after entering VR mode, the camera functions properly for a few frames before the display turns black or, in some instances, only the background is rendered. Additionally, when I press the menu button and the “Quit VR” option appears, the camera appears to be repositioned outside the scene geometry. Upon selecting “Quit VR,” the experience resumes normal operation within the browser.
This issue began last week on my updated Quest 3. When testing on a Quest Pro that had not yet been updated, VR mode worked without issue. After updating the Quest Pro, it began exhibiting the same problem as the Quest 3.
Based on community discussions, it appears this may be related to recent Meta browser updates that interfere with Three.js-based frameworks.
Has anyone else experienced similar behavior? If so, are there any available patches, workarounds, or configuration changes that resolve this issue?
Here’s a structured plan to address your issue and possible action steps:
Step-by-step Investigation & Workaround Plan
-
Confirm Known Issue:
- Gather reports from other Needle Engine/three.js-based apps in Meta browser VR mode after recent updates.
- Check Needle Discord, Meta Quest Browser Issues and Three.js Github discussions for recent bug threads.
-
Technical Testing:
- Test a minimal three.js WebXR sample in the Meta browser VR mode (e.g., Three.js WebXR example). See if the issue persists outside Needle Engine.
- If the sample fails similarly, it’s a broader WebXR/Meta browser issue beyond Needle/Unity.
-
Inspect Application Logs:
- Use the Needle Engine dev tools (
F12
in Meta Browser or remote logging) to check for errors/warnings when entering VR.
- Look for: WebXR session errors, lost context warnings, or frame loop halts.
-
Adjust and Patch:
- Try forcing a full canvas resize or camera reset upon WebXR session start (
onSessionStart
callback).
- In Unity Needle projects, test updating the camera properties (e.g., resetting camera position, FOV, and culling mask) on XR session start.
-
Disable Potential Conflicting Features:
- Temporarily disable post-processing, custom render targets, or advanced scene effects to narrow down the issue.
-
Alternative Browsers/Devices:
- If possible, test the application in alternative WebXR-enabled browsers on Quest to determine if it’s exclusive to Meta Browser.
-
Community Action:
Example: Forcing Full Camera Reset on Session Start
Pseudocode:
- Listen for WebXR Session Start.
- Reset camera transform and reapply settings.
- Force canvas resize or renderer reset.
TypeScript Example:
import { WebXR, Camera } from "@needle-tools/engine";
export class WebXRSessionWatcher {
start() {
WebXR.onSessionStartedObservable.add(() => {
const cam = this.context.mainCameraComponent;
cam.resetTransform(); // Pseudocode, replace with actual reset
cam.needsUpdate = true;
window.dispatchEvent(new Event("resize"));
});
}
}
Adjust according to your app structure. This may sometimes remedy state desynchronization on certain platforms.
Tips for Further Questions
- Share Unity version, Needle Engine version, and app logs for targeted help.
- Provide minimal reproduction links (public WebXR sample).
- Report specific frame timing or error logs if possible.
Let me know if you need:
- Example code for Unity Needle project setup to handle WebXR events.
- Help with creating a minimal reproduction for Meta bug tickets.
- More advanced debug strategies.
Review the Needle Engine WebXR docs and share additional context if you have custom camera or rendering behaviour!
4 replies left
thread_3CHhCcvLlTb9XP5k1giz1S0j
Reply to this post directly if you need further help (bottom right button)
Hey, that sounds problematic.
I can talk to our Meta contacts, but could you please provide
- links to pages that are now broken, and to those other places of discussion you found
- an answer to (2) above – would be great if you could verify if this is with needle only or also with three
- exact Quest OS and browser version
Thanks!
Hello.
I was going to provide a short vid of the issue. But whoops, can’t upload. You will not get to hear my beautiful voice. Sorry. 
I will provide screenshots and some links to a couple sample experiences. Unfortunately, I cannot post a link to the actual project since it is for a customer.
Unity 6.0.48f1
Needle Engine 4.4.3
Horizon OS 76.1025
Meta Browser 38.x (Chromium 134.x)
Access the experience:
Enter VR:
Exit VR:
Camera displacement.
Here is a second experience built with an older version of Unity and Needle Engine:
Unity 2022.3.41f1
Needle Engine 3.44.6
Horizon OS 76.1025
Meta Browser 38.x (Chromium 134.x)
Access the experience:
Enter VR:
Exit VR:
And you can see the camera is not displaced.
That is only one issue I ran into and it is not a critical one since the experiences built with the newer tech still works.
But, the other issue I am seeing and unfortunately it is intermittent, is that when entering VR in the first experience listed above, the camera will render the scene for a second or two and then the screen goes white or sometimes black. Also, sometimes it will render and the teleport will work just fine, but then the controllers stop responding.
I am only seeing console warnings and no errors.
Based on this, I was looking for information on whether or not the reference to the scene context is being lost. And therefore, camera displacement and other odd behaviors can occur.
The following is according to a few AI searches, but I am not sure if this is related. That is why I am asking if anyone has seen similar behavior. The cited items seem to be related to PCVR over a wire. So I am not convinced that it is the same issue I am seeing, but it also causes a similar camera displacement.
In the current experience that I cannot post, I have also noticed that an error in an FBX import into Unity seems to consistently cause the rendering issues when entering VR in the browser as mentioned above.
Now I did try this in my Quest Pro as well and that had an older version of the OS. I think before the Horizon OS rollout. I did not see the issues mentioned above. Unfortunately, I forgot the headset was set on Auto Update and the new OS was installed. Tried the experiences again and now I am seeing the same problems as on the Quest 3. That is also another reason why I am querying if this is a Meta Browser update issue. It seems that there are some problems that do exist after the April 24th rollout.
Any advice or thoughts are certainly appreciated and most welcome.
Recent Meta updates to the Quest 3 and Quest Pro have introduced instability in WebXR experiences, particularly affecting Three.js and Needle Engine projects. Here’s a breakdown of the issues and their causes:
WebXR Context Loss and Camera Displacement
- Context Loss in Three.js
A confirmed issue arises when using Three.js’s makeXRCompatible()
method, which asynchronously prepares the WebGL context for XR. This triggers a ContextLost
error on Meta Quest Link (PCVR) setups, crashing the experience56. The root cause appears to be a conflict between Meta’s runtime and Three.js’s approach to context compatibility.
- Workaround: Initialize the WebGL context with
xrCompatible: true
at creation instead of relying on makeXRCompatible()
56.
- Affected Projects: All Three.js-based WebXR apps using the default workflow, including official examples56.
- Camera Displacement
When switching from 3D web content to immersive VR, improper context handling during the transition can reset camera positioning. This is exacerbated by Meta’s recent WebXR runtime changes, particularly in how sessions are initialized56.
Meta Browser-Specific Issues
- Experimental Feature Instability: Enabling flags like WebXR Experiments (e.g., for body tracking) can crash the browser entirely, as reported with Babylon.js and PlayCanvas projects2.
- Quest Pro Tracking Bugs: A separate April 2025 update broke eye/facial tracking and avatar rendering on Quest Pro, though this primarily affects social VR apps rather than WebXR4.
Current Status
- Three.js Compatibility: The Three.js team is investigating the
makeXRCompatible()
issue, but no fix has been released as of May 202556.
- Meta Acknowledgment: While no official statement addresses WebXR context loss, the body-tracking crash (triggered by experimental flags) is under review2.
For developers, the recommended short-term solutions are to:
- Initialize WebGL contexts with
xrCompatible: true
56.
- Avoid enabling experimental WebXR flags in the Meta Browser2.
- Test experiences on stable browser versions (e.g., v33.0+ with caution for v34.x)12.
Citations:
- Browser Developer Release Notes
- Meta Quest Browser with enabling WebXR Experiments flag crashes when enter WebXR - Bugs - Babylon.js
- Reddit - The heart of the internet
- https://communityforums.atmeta.com/t5/Get-Help/Latest-Meta-Update-Breaks-eye-tracking-and-avatars-for-QUEST-PRO/td-p/1311837
- makeXRCompatible call causes WebGL ContextLost error in a PCVR setup with Meta Quest Link · Issue #30674 · mrdoob/three.js · GitHub
- This tutorial does not work with Meta Quest Link · Issue #2 · meta-quest/webxr-first-steps-react · GitHub
- Meta Quest Browser - Wikipedia
- Browser Developer Release Notes
- WebXR broken on Meta Quest browser (renders a black void) · Issue #95039 · godotengine/godot · GitHub
- Default XR action map broken in webXR on Quest 3 · Issue #96016 · godotengine/godot · GitHub
- Support for Latest WebXR Features in Babylon.js - Feature requests - Babylon.js
- https://www.meta.com/help/quest/software_update/
- Reddit - The heart of the internet
- https://www.meta.com/experiences/wolvic/5917120145021341/
- https://communityforums.atmeta.com/t5/forums/filteredbylabelpage/board-id/dev-quest/label-name/webxr
- Browser Developer Release Notes
- AR not available on a quest 3? - Questions - Babylon.js
- WebXR Plane Detection on Quest 3 Passthrough - Questions - Babylon.js
- Meta Quest Browser Bug - 3D Scene Jitter - Develop... - Meta Community Forums - 1215406
- VR & AR (WebXR) | Needle Engine Documentation
- Reddit - The heart of the internet
- https://communityforums.atmeta.com/t5/Get-Help/Meta-Quest-Browser-Bug-3D-Scene-Jitter-Developer-THREE-js/td-p/1215404
- WebXR, AR mode Can't display hands (OculusHandModel) on Quest 3 - Questions - three.js forum
- GitHub - De-Panther/unity-webxr-export: Develop and export WebXR experiences using Unity WebGL
- Revolutionizing WebXR Development with the Immersive Web Emulator
- Needle Engine Samples
- WebXR browser crash - Questions - three.js forum
- Image Tracking not showing on IOS
- webxr/explainer.md at main · immersive-web/webxr · GitHub
- https://www.youtube.com/watch?v=4wQG8_pb3cs
- https://www.meta.com/en-gb/help/quest/2988394104772773/
- https://communityforums.atmeta.com/t5/Get-Help/Meta-Quest-Browser-33-3-WebXR-Videos-flickering/td-p/1209512
- https://www.meta.com/experiences/browser/1916519981771802/
- https://www.meta.com/help/quest/172903867975450/
- Meta simplifies WebXR access on Quest headsets
- Can't run WebXR through Quest link - Bugs - Babylon.js
- VR not appear when apply it - Questions - three.js forum
- VR projects | Meta - Questions - three.js forum
- Breaking down the details of Meta Quest 3's upgrades to MR technology
- WebXR support for Quest 3 · Issue #65 · mkkellogg/GaussianSplats3D · GitHub
Answer from Perplexity: pplx.ai/share
Based on my testing, the root cause appears to be recent updates to the Meta Browser.
To troubleshoot, I created a separate project and reverted to Unity 2022.x with Needle Engine 3.4.6, but experienced the same issues in the Meta Browser as previously described.
Next, I installed Wolvic and tested both the original version (Needle Engine 4.4.3 with Unity 6.0.48f1) and the rolled-back version. Both worked flawlessly in Wolvic, with no issues encountered.
This raises the question: what changes did Meta implement in their browser to cause this behavior?
Additionally, I observed an interesting behavior when immersive VR fails to load in the Meta Browser. Occasionally, a loading scene appears briefly-a black background with floating cubes, cones, and spheres-before the screen goes completely black. This seems to function as a fallback or default loading screen.
Hey, to follow up here with a question from upstream – are you still experiencing the same issues with Meta Browser?
Hello Mr. Felix. Thank you for following up.
I have received the Meta Browser update and have also upgraded the project to Needle Engine 4.5.3.
Entering VR via the Meta Browser now works as expected, and I am able to run the experience.
However, I am still encountering issues when the headset loses tracking of either controller. In these cases, the display goes black and errors are thrown.
Additionally, pressing the Meta button on the right-hand controller still results in camera displacement. The camera is positioned outside the scene geometry, which is the same issue I referenced in my previous message with the image demonstrating the displacement.
When using hand tracking, the experience is generally stable. However, if I turn my hand to access the Meta menu and use a pinch gesture to select it, the same camera displacement occurs. The user is then positioned at the same displaced camera location as when using the controllers.
Looking up to select the Exit VR button seems to function correctly and I don’t see any camera displacement as the user is immediately taken out of the experience and back into the Meta headset environment.