Nav Logo
Build with Meta
Social Technologies
Meta Horizon
AI
Horizon Worlds
About us
Careers
Research
Products
Virtual reality / Meta Horizon
Developer Blog
Download SDKs
Meta for Work
Programs
Start
Meta Horizon Creator Program
Discover
Why Meta Quest?
What is mixed reality?
Platforms and tools
2D apps for Meta Horizon OS
Devices
Meta Avatars
Success stories
Use cases
Support and legal
Developer policies
Legal
Privacy
Forums
Support
Build with Meta
Social Technologies
Meta Horizon
AI
Horizon Worlds
About us
Careers
Research
Products
Virtual reality / Meta Horizon
Developer Blog
Download SDKs
Meta for Work
Programs
Start
Meta Horizon Creator Program
Discover
Why Meta Quest?
What is mixed reality?
Platforms and tools
2D apps for Meta Horizon OS
Devices
Meta Avatars
Success stories
Use cases
Support and legal
Developer policies
Legal
Privacy
Forums
Support
Build with Meta
Social Technologies
Meta Horizon
AI
Horizon Worlds
About us
Careers
Research
Products
Virtual reality / Meta Horizon
Developer Blog
Download SDKs
Meta for Work
Programs
Start
Meta Horizon Creator Program
Discover
Why Meta Quest?
What is mixed reality?
Platforms and tools
2D apps for Meta Horizon OS
Devices
Meta Avatars
Success stories
Use cases
Support and legal
Developer policies
Legal
Privacy
Forums
Support
English (US)
© 2025 Meta
Develop
Develop
Select your platform
Overview
What is Spatial SDK?
Getting started
Build your first app
Overview
Create new Spatial SDK app
Add Spatial SDK to 2D app
Continue building your app
Meta Horizon Android Studio Plugin
Design tips
Packages
Architecture and feature integration
Spatial SDK architecture
Entity-Component-System (ECS)
Create SpatialFeatures
Write a new component
Supported attributes
Write a new system
Use queries to access entities
Filter with queries
Sort queries
Create and handle events
Runtime guidelines
Input and controllers
Create panel content
Overview
Register and configure panels
Spawn and remove panels
UI set
Overview
Button
Control
Dialog
Dropdown
Input
Navigation item
Slider
Tooltip
Build UIs with Jetpack Compose
Configure media playback
Increase UI quality with layers
Optimize configuration and resolution
Communicate between panels
Protected content and DRM
Create immersive 3D experiences
Overview
Use Mixed Reality Utility Kit
Customize your environment
Custom 3D models (glTF)
Load and manage 3D objects
Scene compositions (glXF)
Audio
Physics
Animations
Passthrough
Enable passthrough
Passthrough camera access
Camera2 API
Custom shaders
Create hybrid experiences
Experimental features
Interaction SDK
Overview
Panels in ISDK
Grabbable objects in ISDK
Listen to ISDK input events
Supporting systems
Developer tools
Connecting Spatial Editor
Input forwarding
OVRMetrics
Hot reload
Data Model Inspector (DMI)
Performance and optimization
Compositor
Compositor layers
Meta Quest Developer Hub
Overview
Getting started
Set up headset with MQDH
Managing your headset
Debugging tools
Create custom command
Performance analyzer and metrics
Overview
Take Perfetto traces
Layer visibility control
Explore file manager
Multi-user accounts
MQDH downloads
Deploy build on headset
Troubleshooting MQDH
Submit and track bugs and feature requests
Android Tools
Collect VrApi Logs with Logcat
Overview
Logcat Stats Definitions
Configure Android System Properties
Android Debug Bridge for Meta Quest
Performance Tools
gpumeminfo
ovrgpuprofiler
Simpleperf
Meta Spatial Editor
Overview
Get started
Download and setup
Navigating the UI
Project structure
File formats
Keyboard shortcuts
Reporting bugs
Assets
Import and manage assets
Asset library
Objects
3D objects
Materials and textures
Components
Compositions
Creating compositions
Transforms and coordinates
Panels
Using with Meta Spatial SDK
Integrate with Spatial SDK
Command line interface
Known issues
Showcases
Focus
Geo Voyage
Overview
Process Audio with Wit.AI
Query with Llama 3
Custom Entity Component System
Transport users to VR with Google Maps API
Media View
Spatial Scanner
Overview
Passthrough camera access API
ML kit object tracking
Llama integration
Horizon Billing Compatibility
Horizon Billing Compatibility SDK
Google Play Billing interface
Known limitations
API Reference
Platform Solutions
Overview
Get started
Getting started guide
Platform development
Server-to-server API basics
User management
User management overview
Entitlement Check
Account linking
Language Packs
User Engagement
User Engagement Overview
User Notifications
Overview
Create User Notifications
Event-Based Notifications
Analytics
Developer Posts
Leaderboards
Leaderboards Client APIS
Leaderboard Server APIs
Events
Achievements
Challenges
Challenges Client APIs
Challenges Server APIs
Share Content from Meta Quest Apps
Monetization
Monetization overview
Add-ons - DLC and IAP
Add-ons purchase integration
Add-ons server APIs
Testing add-ons
Subscriptions
Create and manage
Server APIs
Security
Security overview
Attestation API
Get Age Category API
Webhooks
Platform reference
Code samples
Downloads
Release notes
Distribute
Release notes
Stay up to date with the latest features, improvements, and more on your preferred platform.

May 15, 2025 — Meta Spatial SDK v0.6.1

Added
  • None
Changed
  • None
Fixed
  • Fixed a bug where the keyboard would not appear on v76+
  • Fixed a bug where panel animations would cause a crash
  • Fixed an issue where setting the passthrough LUT would not work after sleeping and waking up the device

Apr 22, 2025 — Meta Spatial SDK v0.6.0

Added
  • Experimental Feature: Interaction SDK
    • Using IsdkFeature automatically replaces built in toolkit components/systems like Grabbable with Isdk equivalents
    • Provides interactions that are consistent with the Meta Horizon OS and brings parity between controller and hand interactions
      • Interact with panels directly using hands or controllers
      • Grab 3D objects with hands or controllers, directly or using a raycast
      • Advanced grab customization (responsiveness, two-handed, constraints)
    • The Object3DSampleIsdk sample app in the samples repo demonstrates how to use the new IsdkFeature and other Isdk APIs
  • Datamodel Inspector
    • Using DataModelInspectorFeature launches a webserver at a specified port that provides a live table view of ECS.
    • Connect to a running app via Data Model Inspector Tool Window in the new Meta Horizon Android Studio Plugin.
  • Query filters and sorting
    • Add filtering API for queries so that developers can refine the entity query results by applying filters on attributes.
    • Add sorting API for queries so that developers can sort the entity by criteria on attributes.
  • GLTF Animation Pointer Support
    • Added the ability to modify material factors and UV transforms via KHR_animation_pointer support.
    • This can allow you to do things like animate opacity or make moving textures and play them with the Animated() component.
  • DRM support for Activity based panels on v76
    • Using an Activity based panel (not inflated view) along with a LayerConfig set to secure=true will allow you to display DRM content on v76+. Previously, you had to render directly to a secure swapchain.
Changed
  • We now support Color4 as an Attribute Type for use directly in components. Because of this, Color4 has been moved packages from com.meta.spatial.toolkit -> com.meta.spatial.core
  • Uris are now supported as an Attribute Type for use in components
  • Component XML is now the preferred method for making Spatial SDK Components
    • Using Components XML increases performance of components and queries.
    • Components XML can be used in Spatial Editor.
    • Components written in Kotlin (instead of XML) will no longer be able to be added to objects in Spatial Editor
  • PanelAnimation and PanelConfigOptions2 are now marked as experimental
    • These APIs may be unstable and/or subject to change in the future. If you want to use them now, you will need to use the @SpatialSDKExperimentalAPI annotation
  • Default cursor has been changed to more closely match the Quest Home environment cursor
  • Samples now use libs.versions.toml for version management (removing the need to set the version in the gradle.properties file)
  • Changed the behavior of the Layer.setClip() API
    • If the area of the clip for the left or right eye is 0, there will be no layer submitted for that eye.
    • This can allow you to have separate transforms for layers sharing a swapchain with the left and right eyes
  • Bundled shaders assets have been cleaned up and compressed, decreasing APK size.
  • Various performance and stability improvements.
Fixed
  • Fixed bug where deleting an entity while grabbed causes a crash

Feb 18, 2025 — Meta Spatial SDK v0.5.5

Added
  • Component XML
    • Components can now be defined in XML instead of Kotlin, this is now the preferred way to write Components
    • This makes it easier to define Components, and greatly improves the Spatial Editor integration with Components
    • The build process will generate Kotlin code and resource files for the XML components
  • Panel Animation
    • This new feature includes animation timing and callback APIs, enabling you to manipulate panel transitions seamlessly
    • A panel zoom in and out animation is now available when creating and destroying panels
    • These capabilities enhance the interactivity and aesthetic appeal of your panels, providing you with greater control and flexibility
  • Panel Native Transition between Quad and Cylinder Shapes
    • We have implemented animations for transitions between Quad and Cylinder panels
    • Check out the AnimationSample for an example
  • Refined Cylinder Panels
    • We have conducted a comprehensive refinement of our Cylinder Panels to deliver enhanced performance and versatility. Key improvements include:
      • Grabbable Bug Fix: We have resolved a bug with Grabbable and cylinder panels, grabbing cylinder panels will now be more reliable
      • Backside Transparency: We have added transparency to the backside of the cylinder panels, staying consistent with quad panels
Changed
  • com.meta.spatial.toolkit.Controller.kt
    • In the Controller class, property “type” is now an EnumAttribute that accepts Enum values of com.meta.spatial.toolkit.ControllerType. The ControllerType enum is defined in the Java package ControllerType and has three values: ControllerType.CONTROLLER, ControllerType.HAND, and ControllerType.EYES.
    • The constants com.meta.spatial.toolkit.Controller.CONTROLLER_TYPE, com.meta.spatial.toolkit.Controller.HAND_TYPE, and com.meta.spatial.toolkit.Controller.EYES_TYPE are removed.
  • TimeAttribute has changed from Int->Long
Deprecated
  • Writing Components using Kotlin is now deprecated, please shift to using Component XML to define your Components
Fixed
  • Fixed bug with rotation with Locomotion + behavior with updateViewOrigin
  • Optimized panel update performance for large panels

Jan 23, 2025 — Meta Spatial SDK v0.5.4

Added
  • Added onHeadsetMounted and onHeadsetUnmounted APIs for detecting when a user puts on or takes off their headset.
Changed
  • None
Deprecated
  • None
Fixed
  • Fixed Windows specific hot reload bug with “Read-only filesystem” error in Gradle task.
  • Fixed crash where a SceneLayer was being destroyed twice due to garbage collection.

Dec 16, 2024 — Meta Spatial SDK v0.5.2

Added
  • The meta-spatial-sdk-compose package is now available, enabling View-based panels to render Jetpack Compose UI
  • Javadocs are now available for Maven Central released packages (starting with 0.5.3)
  • MRUK
    • Added Scene Raycasting functionality (and a raycast demo in the MrukSample project)
    • Optimized scene loading
Changed
  • None
Deprecated
  • None
Fixed
  • Hot reload is now more reliable (previously has issues with parallelization)

Nov 14, 2024 — Meta Spatial SDK v0.5.2

Added
  • Added Followable Component and FollowableSystem which allows devs to easily tether objects together. See Animations Sample for an example use.
  • Hot Reload: Adds the ability to reload your glb/gltf/glxf and Meta Spatial Editor scenes while running your app via the Gradle plugin.
    • Auto Export from Meta Spatial Editor: Saving in Spatial Editor automatically exports to the app and pushes to the headset for hot reload
    • Two Reload Types:
      • Delete all entities and recreate them: more stable but does not work for all apps
      • Keep entities and reload meshes only: works for all apps, but less stable and does not reload components
Changed
  • SamplerConfigs now also apply to layers instead of just non-layer panels
  • Cylinder panels now have a transparent back applied to them (instead of just being invisible)
  • Gradle Plugin: References to string paths in plugin configuration are replaced with file references.
    • NOTE: This requires changes to your build.gradle.kts. Example new usage can be found in the sample build.gradle.kts files.
  • Gradle Plugin: Telemetry now reports out simple usage statistics.
Deprecated
  • Deprecated QuadLayerConfig/CylinderLayerConfig/EquirectLayerConfig. Use LayerConfig instead for panel’s layer configuration.
Fixed
  • Fixed a crash when garbage collecting a panel.
  • Fixed a crash when updating the Panel component on an entity that already had a Panel component.
  • Crash fixed in Focus showcase

Oct 23, 2024 — Meta Spatial SDK v0.5.1

Added
  • Added support for Secure layers Layers can now be marked as secure making them appear black while recording. This is possible at a global level or an individual layer level.
// globally enable
scene.setSecureLayers(true)

// individually enable
myLayerConfig.secure = true
In addition, this value can be set on a global level using your AndroidManifest
<meta-data
      android:name="com.meta.spatial.SECURE_LAYERS"
      android:value="true"
/>
Removed
  • Removed the old Anchor Systems in toolkit, please use MRUK (Mixed Reality Utility Kit) in Meta Spatial SDK
Fixed
  • Init order issue for FeatureManager An overridden registerFeatures() was not able to reference the top level class variables. This was because the initialization was happening very early in the creation of a Feature. This was resolved by moving initialization later in activity startup.
  • Memory leak on panel destruction Destroy the activity panel by calling lifecycle events onPause, onStop, onDestroy sequentially. Release the panel scene texture and mesh as panel destruction, which reclaims the resource early.
  • Fixed the issue that the panel faced the user backwards when grabbed from behind. The panel will now always face the user correctly, regardless of the angle of grabbing.
  • Fix the grabbable bug for the cylinder panel when the user is close to the panel. When the user is very close to the panel, i.e., the center of the cylinder is behind the user, the grabbable system does not work well for rotation.
  • Fix compatibility issues with Android Studio Ladybug.
Nav Logo
Why Meta Quest?
Design
Develop
API reference
Distribute
Blog
Support
Login