<h2 id="subspace-modifier-allowunboundedsubspace-content">Subspace</h2>

<div class='sourceset sourceset-android'>Android</div>

```kotlin
@Composable
@ComposableOpenTarget(index = -1) // b/446706254
public fun Subspace(
    modifier: SubspaceModifier = SubspaceModifier,
    allowUnboundedSubspace: Boolean = false,
    content: @Composable @SubspaceComposable SpatialBoxScope.() -> Unit,
)
```

Create a 3D area that the app can render spatial content into.

Subspace creates a Compose for XR Spatial UI hierarchy (3D Scene Graph) in your application's
regular Compose UI tree. In this Subspace, You can use a `@SubspaceComposable` annotated
composable functions to create 3D UI elements.

Each call to Subspace creates a new, independent Spatial UI hierarchy. It does **not** inherit
the spatial position, orientation, or scale of any parent Subspace it is nested within. Its
position and scale are solely decided by the system's recommended position and scale. To create
an embedded Subspace within a SpatialPanel, Orbiter, SpatialPopup and etc, use the
[PlanarEmbeddedSubspace](/jetpack-compose/androidx.xr.compose/compose/composable-functions/PlanarEmbeddedSubspace) instead.

By default, this Subspace is automatically bounded by the system's recommended content box. This
box represents a comfortable, human-scale area in front of the user, sized to occupy a
significant portion of their view on any given device. Using this default is the suggested way to
create responsive spatial layouts that look great without hardcoding dimensions.
SubspaceModifiers like `SubspaceModifier.fillMaxSize` will expand to fill this recommended box.
This default can be overridden by applying a custom size-based modifier. For unbounded behavior,
set `allowUnboundedSubspace = true`.

This composable is a no-op and does not render anything in non-XR environments (i.e., Phone and
Tablet).

On XR devices that cannot currently render spatial UI, the Subspace will still create its scene
and all of its internal state, even though nothing may be rendered. This is to ensure that the
state is maintained consistently in the spatial scene and to allow preparation for the support of
rendering spatial UI. State should be maintained by the compose runtime and events that cause the
compose runtime to lose state (app process killed or configuration change) will also cause the
Subspace to lose its state.

#### Parameters

| | |
| --- | --- |
| modifier | The [SubspaceModifier](/jetpack-compose/androidx.xr.compose/compose/interfaces/SubspaceModifier) to be applied to the content of this Subspace. |
| allowUnboundedSubspace | If true, the default recommended content box constraints will not be applied, allowing the Subspace to be infinite. Defaults to false, providing a safe, bounded space. |
| content | The 3D content to render within this Subspace. |