Meta Spatial SDK

Updated: Mar 12, 2026|
Version
0.11.0
Transform your apps into mixed reality with Spatial SDK, a native Android framework to give your users an innovative spatial experience.

Version 0.11.0 Release Notes

Version 0.11.0 is our monthly update to Meta Spatial SDK. We made a variety of updates, ranging from a new Entity/Component DSL for streamlined ECS access to a full suite of physics constraints and collider types.

What's New

Entity/Component DSL

  • Use entity.update<T> { ... } to modify a component with auto-save.
  • Use entity.with<T> { ... } for scoped read-only access.
  • Use entity.withOrNull<T> { ... } for safe read access returning null if missing.
  • Use entity.updateIfPresent<T> { ... } to safely update only if the component exists.
  • Access 2-4 components together with multi-component variants.
  • Use escape hatches: entity.raw, withDataModel, entity.entityId, entity.isValid, entity.exists, entity.isNullEntity.
  • Physics Constraints

  • Add BallSocketConstraint for free rotation around a point (3 DOF). Simplest constraint — just two anchor points.
  • Add ConeTwistConstraint for rotation within a cone + twist around an axis, with configurable swing/twist limits, motor support, and softness/bias/relaxation tuning. Support incremental updates — motor/limit changes do not recreate the native constraint.
  • Add FixedConstraint to lock two bodies rigidly. Typically pair with breakForce for destructible connections.
  • Add HingeConstraint for rotation around a single axis with angular limits (radians) and optional motor. Support incremental updates.
  • Add SliderConstraint for linear motion along an axis with distance limits (meters) and optional motor. Support incremental updates.
  • Add SpringConstraint for an elastic connection with configurable stiffness (N/m), damping, and rest length. Always destroy and recreate the native constraint on any property change.
  • Physics Colliders & Player Avatar

  • Add ScenePhysicsCollider as standalone collision shapes shareable across multiple ScenePhysicsObject instances. Factory methods cover box, sphere, capsule (X/Y/Z axis), cylinder (X/Y/Z axis), convex hull from glTF, exact triangle mesh from glTF, and compound shapes. Compound colliders support adding child shapes (addChildBox, addChildSphere, addChildCylinder) with local-space poses.
  • Add CollisionShapeType to control how collision geometry is generated from meshes. PRIMITIVE (0) uses the shape attribute (box, sphere, etc.) for fastest performance. TRIANGLE_MESH (1) uses exact triangle mesh from glTF for maximum accuracy — static bodies only. CONVEX_HULL (2) uses convex hull from mesh vertices and works for dynamic bodies. CONVEX_DECOMPOSITION (3) uses V-HACD decomposition into multiple convex hulls for concave shapes, controlled by maxConvexHulls. COMPOUND (4) uses multiple primitives via CompoundChildShape components on child entities.
  • Add PlayerAvatarPhysics / PlayerAvatarPhysicsSystem to give the player physical presence in the scene with optional hand sphere colliders and per-entity configuration for bodyRadius, handRadius, friction, etc.
  • Animation

  • Add BlendedAnimation as a delta-time-based animation component that crossfades between glTF animation tracks. Unlike the existing Animated component (which uses wall-clock time), BlendedAnimation accumulates time via frame delta-time and playbackSpeed to provide frame-rate-independent control.
  • Toolkit & UI

  • Add ResolveInputSystem as a late-running ECS system that calls Scene.resolveInput() to ensure async input dispatches complete before the Choreographer's doFrame finishes, preventing input events from being lost or delayed by one frame.
  • Gradle Plugin Library Support

  • Fix build failure when project depends on a local Android Library.
  • Add spatial.components extension with components.xmlDirectory to configure component XML paths for libraries and components.registrationsClassName to configure the name for the ComponentRegistrations object, used for auto-registration of components. See feature_dev_sample for code examples.
  • Sample

  • Add feature_dev_sample as a reference architecture sample demonstrating how to build reusable SpatialFeature library modules as separate Android Library projects (Gradle modules). Show two patterns: a pure-Kotlin module (PulsingFeature — sine-wave scale animation) and a native C++/JNI module (NativeBobbingFeature — JNI-computed Y-position oscillation).
  • Improvements

  • Improve general app size and performance.
  • Physics

  • Add 3 new properties to the Physics component: collisionShapeType, collisionMeshNode, and maxConvexHulls.
  • Add new methods to ScenePhysicsObject for runtime physics tuning: setBodyType() to switch between STATIC/DYNAMIC/KINEMATIC at runtime, setDamping() to control how quickly velocity decays, setDeactivationTime() / setSleepingThresholds() to tune when resting bodies go to sleep, and createFromCollider() to create a physics body from a reusable ScenePhysicsCollider.
  • Use getPhysicsObject(entity) in PhysicsCreationSystem for direct access to the underlying ScenePhysicsObject for advanced manipulation. Use getPhysicsCreators() to register custom shape factories.
  • SDK

  • Use Pose.isApproximatelyEqual() for fuzzy pose comparison with separate distance (meters) and angle (degrees) thresholds.
  • Use Query.any() / count() / none() to check query results without iterating.
  • Use SpatialLogger.execStart() / execFinish() for structured execution markers for lifecycle tracing.
  • ISDK
  • Use setPanelCollisionPriority() to resolve which panel receives input when panels overlap. Set priority to match the panel's zIndex.
  • Panels

  • Use resolveInput() to ensure async input dispatches complete within the current frame, preventing dropped or delayed input events.