v2.54.0#315
Merged
doranteseduardo merged 12 commits intomainfrom Apr 2, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
React Viro — v2.54.0 Release Notes
Release date: March 31, 2026
What's New
Semantic Masking
Virtual objects can now react to what the camera sees in the real world. A material can be configured to appear only on specific surfaces — for example, render a cloud effect exclusively on pixels classified as sky, or hide a character wherever a person is detected. Eleven real-world categories are supported: sky, building, tree, road, sidewalk, terrain, structure, object, vehicle, person, and water. Available on both Android and iOS.
iOS setup: Semantic masking on iOS requires the ARCore Semantics pod. Add
includeSemantics: trueto your Expo plugin config inapp.jsonto have it included automatically. If you are already usingprovider: "arcore"orincludeARCore: true, the pod is already included and no extra config is needed.Animated GLB Models
3D models in GLB/glTF format with embedded animations now play correctly. This covers the three main animation systems used by artists — skeletal rigs (character movement), morph targets (facial expressions, blend shapes), and skinning (soft-body deformation). No extra configuration is needed; animations embedded in the file are automatically available.
Permission Helpers
Two new utility functions make it easier to handle camera and location permissions:
requestRequiredPermissions(permissions?)— prompts the user for the specified permissions. Pass a list to request only what your feature needs ("camera","microphone","storage","location"), or call with no arguments to request all four at once.checkPermissions(permissions?)— reads the current permission status without prompting the user. Useful for checking what has already been granted before deciding whether to ask.Expo 54 & 55 Support
The package is now compatible with both Expo SDK 54 and Expo SDK 55.
Bug Fixes
Android — App crash on launch (Android 15 / 16)
Apps were crashing immediately on launch on devices running Android 15 or 16 due to a new 16 KB memory page-size requirement introduced by Google. All native libraries have been rebuilt to comply with the new standard.
Android — App crash after returning from background
A combination of three separate issues caused a guaranteed crash whenever the operating system suspended the app and reclaimed GPU memory. On resume, the app attempted to use GPU resources that no longer existed. All three root causes have been fixed; the app now recovers cleanly from background suspension.
Android —
ViroARImageMarkerdetection callback not firingThe
onAnchorFoundcallback onViroARImageMarkerwas never called on Android, making it impossible to respond to image detection events in JavaScript. The native event bridge has been corrected.Android — Model texture overlaying the screen during video recording
When recording AR scenes, the 3D model's texture was incorrectly rendered over the entire screen instead of just the model. This was caused by a stale GPU state cache when switching between the display and recording graphics contexts. The cache is now correctly reset on each context switch.
iOS — Portal scene interior not rendering (#452)
On iOS, looking through a
ViroPortalSceneshowed only the camera feed — none of the 3D content inside the portal was visible. This was caused by leftover GPU stencil state from the previous frame that prevented interior content from passing the render test. The stencil state is now correctly reset each frame.iOS — EAS cloud build failure (Podfile syntax error) (#441)
iOS builds through Expo Application Services (EAS) were failing with a CocoaPods syntax error in the generated Podfile. The Expo plugin now generates a valid Podfile in all build environments.
Summary
requestRequiredPermissionsutilitycheckPermissionsutilityViroARImageMarkeronAnchorFoundnever fired