Horizon OS features overview
Updated: Apr 6, 2026
Meta Horizon OS is built on the Android Open Source Project, so your Android app works out of the box. But Horizon OS also provides features designed specifically for spatial computing — input from controllers and hands, spatial audio, passthrough mixed reality, and a full platform SDK for social, monetization, and identity.
This page maps the complete feature surface available to your app. Use it to find what you need and jump to the right implementation guide.
The Horizon OS SDK provides APIs specific to the Quest platform that aren’t available in standard Android. Add the SDK to your project to access platform detection, SDK version checking, and stereo 3D rendering.
Declare your Horizon OS SDK version requirements in AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:horizonos="http://schemas.horizonos/sdk">
<horizonos:uses-horizonos-sdk
horizonos:minSdkVersion="81"
horizonos:targetSdkVersion="201" />
</manifest>
Check whether your app is running on Horizon OS so you can conditionally enable platform-specific features:
import horizonos.content.pm.PackageManagerExt;
boolean isHorizonOs = getPackageManager()
.hasSystemFeature(PackageManagerExt.FEATURE_HORIZON_OS);
This is useful for apps that run on both mobile Android and Quest — enable Horizon-specific UI and features only when the platform supports them.
Query the Horizon OS SDK version at runtime to gate features by OS version:
import horizonos.os.Build;
int sdkVersion = Build.HorizonOsSdk.getVersion();
Use this when your app needs features introduced in a specific Horizon OS release. Check
minimum OS versions for version requirements by feature.
For apps that display stereoscopic 3D content (360 video, 3D media players), set the stereo composition mode on a SurfaceView:
import horizonos.view.SurfaceViewExt;
// Side-by-side 3D
SurfaceViewExt.setStereoComposition(surfaceView,
SurfaceControlExt.STEREO_COMPOSITION_SIDE_BY_SIDE);
// Top-bottom 3D
SurfaceViewExt.setStereoComposition(surfaceView,
SurfaceControlExt.STEREO_COMPOSITION_TOP_BOTTOM);
// Mono (default)
SurfaceViewExt.setStereoComposition(surfaceView,
SurfaceControlExt.STEREO_COMPOSITION_MONO);
- 60Hz refresh rate removed. 60Hz is no longer a valid display refresh rate on any Quest device. Target 72Hz, 90Hz, or 120Hz. When selecting a refresh rate, always request a specific frequency (for example, 90) — do not use array indexing on the available rates list, as the set of available rates may change between OS versions.
android:configChanges required for Spatial SDK activities. Starting in Horizon OS v85, immersive activities using Meta Spatial SDK must declare android:configChanges in their manifest to prevent rapid lifecycle shutdowns. See the Spatial SDK documentation for details.- HzOS version compatibility. When calling Platform SDK APIs, handle the
PROVIDER_OPERATION_NOT_SUPPORTED error code (1003) for features unavailable on the user’s OS version, or declare a minimum SDK version with <horizonos:uses-horizonos-sdk>. See minimum OS versions for details.
These features are available to all Android apps on Horizon OS. Most use standard Android APIs with Horizon OS-specific behavior.
Control how your app’s window appears in the virtual environment. Set default dimensions, enable user resizing, and launch multiple panels.
- Set default size with
<layout> in your manifest - Launch additional panels with
FLAG_ACTIVITY_LAUNCH_ADJACENT - No SDK dependency required — standard Android APIs
Users interact with your app using controllers, hands, mouse, keyboard, gamepad, and stylus. Targeted input (controllers, hands) sends standard Android motion events when hovering over your panel. Untargeted input (keyboard, gamepad) sends standard input events to the focused panel.
- Controller B/Y buttons map to Android back navigation
- Joystick input via
AXIS_HSCROLL / AXIS_VSCROLL - No SDK dependency required — standard Android input events
Play background audio, integrate system media controls, and support Dolby Atmos spatial audio using standard Android Media3 APIs.
- Background playback with
MediaSession and MediaSessionService - Dolby Atmos with E-AC-3 JOC format detection
- Audio focus management via
AudioFocusRequest - No SDK dependency required — standard Android Media3
Integrate third-party OAuth 2.0 login or connect to Meta accounts.
- Standard OAuth 2.0 via the AppAuth Android library
- Device code flow for media apps without keyboards
- Meta account linking via Platform Solutions
Share content to and from your app using the system share sheet. Stream your app’s view to other devices with Media Projection.
- Receive shares via standard Android
SEND_INTENT - Share out via the Android native share sheet
- Screen sharing with
MediaProjection API (app-level or full display)
Play protected media content with Widevine L1 and L3 support.
- Standard
android.media.MediaDrm APIs - Immersive apps can disable screen capture via Developer Dashboard
Access the Avatar Selfie camera for avatar-based photos or the passthrough camera for real-world video processing.
Avatar Selfie camera:
- Standard Camera2/CameraX APIs, front-facing camera
- Requires
android.permission.CAMERA or horizonos.permission.AVATAR_CAMERA - Works even when organization disables physical cameras
Passthrough camera:
- Real-world camera feed via Camera2 API (Quest 3, Quest 3S, Horizon OS v74+)
- Requires
android.permission.CAMERA - Supported resolutions include 1280x960, 1280x1080, 1280x1280, and 1024x1024 at 60Hz
If your app displays ads, complete the in-app ads attestation and use the advertising ID for attribution.
- Attestation is required during app submission for 2D and hybrid apps containing ads
- Ad ID is a resettable, user-scoped identifier for advertising purposes
- Review the ads policy before integrating
To add immersive 3D experiences to your Android app — environments, spatial panels, hand interactions, and mixed reality — integrate Meta Spatial SDK. The SDK is a Kotlin-based framework that extends your Android app with spatial computing capabilities.
Available feature modules:
| Module | What it does |
|---|
Core + Toolkit | Entity-component system, spatial panels, scene loading, app lifecycle |
VR | Controller and hand input, head tracking, VR rendering |
Physics | Rigid body physics and collision detection |
Animation | Skeletal and property animation |
Spatial Audio | 3D positioned sound, room acoustics, sound propagation |
MRUK | Mixed reality utility kit — room setup, scene mesh, passthrough |
ISDK | Interaction SDK — grab, poke, ray interactions |
Compose | Jetpack Compose integration for spatial UI |
Networking | Multiplayer state synchronization |
Particles | GPU particle systems |
Speech to Text | Voice input transcription |
Platform Solutions provide deeper integration with Meta’s ecosystem — user identity, social features, monetization, and content management. These use the Horizon Platform SDK.
| Feature | What it does | Guide |
|---|
Entitlement check | Verify the user owns your app | |
Account linking | Link Meta accounts to your backend | |
User age category | Age-gated feature control | |
Consent | Manage user consent flows | |
| Feature | What it does | Guide |
|---|
Group presence | Show what users are doing, enable join-in-progress | |
Rich presence | Display user status across the platform | |
Achievements | Unlock and display achievements | |
Leaderboards | Competitive rankings | |
Challenges | Time-limited competitive events | |
Deep linking | Launch directly into specific app content | |
Developer posts | Communicate with users from your store listing | |
| Feature | What it does | Guide |
|---|
In-app purchases | Sell digital items and currency | |
Horizon Billing SDK | Google Play Billing-compatible API | |
Downloadable content | Host and deliver asset files | |
Language packs | Downloadable localization bundles | |
| Feature | What it does | Guide |
|---|
Device integrity | Verify your app runs on a genuine Quest device | |
Abuse reporting | Let users report abusive content or behavior | |
Passkey authentication | Phishing-resistant login via FIDO2/WebAuthn credentials | |
Horizon OS defines custom permissions beyond standard Android permissions. Declare these in your AndroidManifest.xml when your app needs access to platform-specific capabilities.
| Permission | What it grants | Required for |
|---|
horizonos.permission.AVATAR_CAMERA
| Access to the Avatar Selfie camera only (not passthrough) | Avatar photos without requesting full camera access |
Once you’ve reviewed the features available, here’s a recommended path:
- Start with the basics — Get your app running on Quest with panel sizing and input
- Add platform identity — Integrate entitlement checks and authentication
- Go spatial — Add immersive features with Meta Spatial SDK
- Monetize — Set up in-app purchases or Horizon Billing SDK
- Grow — Use achievements, leaderboards, and deep linking to drive engagement
Social and engagement