Develop

Meta Spatial SDK

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

Version 0.13.0 Release Notes

Meta Spatial SDK v0.13.0 introduces the Canvas Panel API for stereo rendering, a Lighting API with panel-driven projection lights, pak-based asset packaging, and localized asset resolution. This release includes breaking changes to ComponentBase.isDirty and the Audio component's property type — see entries marked Breaking: for migration steps.

New Features

Canvas Panel API
  • Added StereoCanvasPanelRegistration for custom Canvas-based panel rendering with built-in stereo layout support. Apps can draw directly to a panel surface using drawFlat for mono content or drawStereo(depthOffsetMeters) for depth-offset-based stereo content with per-eye disparity.
  • Added DepthLayer preset object with common depth offsets (SURFACE, NEAR, FAR, BACKGROUND) for use with CanvasPanelScope.drawStereo().
  • Lighting API
  • Added ProjectionLight component and ProjectionLightSystem for panel-driven dynamic lighting that automatically derives light color from panel content.
  • Added SceneTexture.readAverageColor() for reading the average color of a texture region via GPU mipmap sampling.
  • Added SceneLight.setProjectionTexture() for binding projection textures directly to lights, with optional GPU-based color sampling via the useGpuSampling attribute on ProjectionLight.
  • Scene
  • Added PakManager for mounting and reading ZIP-based asset packages via the pak:// URI scheme, enabling bundled asset distribution outside the APK.
  • Added LocalizedAssetResolver for opt-in localized asset resolution. Place locale-specific variants in a locale subdirectory (e.g., models/fr/cube.glb), initialize with LocalizedAssetResolver.initialize(context), and the framework automatically resolves the best match based on device locale.
  • Added IntrospectionRegistry API and adb shell dumpsys integration for live inspection of SDK subsystem counters and state. Supports --json, --list, and path-prefix filtering.
  • Changes & Improvements

  • Breaking: ComponentBase.isDirty is removed. Use ComponentBase.hasAttributeChanges() instead for read-only change detection. Direct isDirty = true calls should be replaced with actual attribute mutations; isDirty = false calls should be replaced with entity.setComponent(component). Before:

  • if (component.isDirty) { entity.setComponent(component) }

    After:

    if (component.hasAttributeChanges()) { entity.setComponent(component) }
  • Breaking: The Audio component's audio property type changed from String to android.net.Uri. A deprecated Audio(String, Float, Float) helper is available for migration. Before:

  • val entity = Entity.create(listOf( Audio("ambient_forest.ogg", 0.8f) )) val path: String = entity.getComponent<Audio>().audio

    After:

    val entity = Entity.create(listOf( Audio(Uri.parse("ambient_forest.ogg"), 0.8f) )) val uri: Uri = entity.getComponent<Audio>().audio
  • Added LibraryLoader interface, FeatureManager.attach(), and AbstractSpatialFeature base class to support custom native library loading strategies and reduce boilerplate in SpatialFeature subclasses.
  • Added GLXFInfo.allMeshesLoaded future that completes once every mesh-bearing entity in an inflated glXF has its SceneObject ready, enabling apps to defer visibility until all assets are loaded.
  • Added SceneAudioPlayer.setPitch() for runtime pitch and playback rate control.
  • Added pitch attribute to the Audio component for declarative pitch control.
  • Bug Fixes

    Scene
  • Fixed Material component baseColor being silently ignored, causing objects to render white instead of the specified color.
  • Fixed Material PBR properties (roughness, metallic, unlit) not being applied to rendered objects.
  • Fixed inverted winding order on procedural primitives (Box, Sphere, Dome, Quad, RoundedBox) causing incorrect face culling.
  • Fixed GLXF scene loader silently dropping translation from nodes that use a matrix field instead of separate translation/rotation/scale fields, causing affected entities to render at incorrect positions.
  • Other
  • Fixed a crash in PanelDisplay when an async window callback fired after panel destruction.
  • Fixed a SIGSEGV crash in the Gaussian splat renderer when uploading splat data to the GPU.
  • Fixed entity-attached audio continuing to play after the entity was removed from the scene.
  • Version 0.13.0 Samples and Templates Changelog


    Meta Spatial SDK publishes project samples and templates at: Meta Spatial SDK Samples. Sample projects have been updated to SDK 0.13.0 with Gradle configuration cache support, and several samples received physics and rendering fixes.

    Changes & Improvements

  • Updated all sample projects to Meta Spatial SDK v0.13.0, including Gradle configuration cache support and updated API usage patterns.