# rememberNavBackStack

Common/AllAndroid/JVM

## Functions summary

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack<https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/rememberNavBackStack.composable#rememberNavBackStack(kotlin.Array)(vararg elements: https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey)` Provides a `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` that is automatically remembered in the Compose hierarchy across process death and configuration changes. | android |
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack<https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/rememberNavBackStack.composable#rememberNavBackStack(androidx.savedstate.serialization.SavedStateConfiguration,kotlin.Array)( configuration: https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration, vararg elements: https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey )` Provides a `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` that is automatically remembered in the Compose hierarchy across process death and configuration changes. | Cmn |

## Functions

### rememberNavBackStack

android Artifact: [androidx.navigation3:navigation3-runtime](https://developer.android.com/jetpack/androidx/releases/navigation3) [View Source](https://cs.android.com/search?q=file:androidx/navigation3/runtime/RememberNavBackStack.android.kt+function:rememberNavBackStack) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/navigation3#1.0.0)

```
@Composable
fun rememberNavBackStack(vararg elements: NavKey): NavBackStack<NavKey>
```

Provides a `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` that is automatically remembered in the Compose hierarchy across process death and configuration changes.

This overload **does not take a `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration`** . It relies on the platform default: on **Android** , state is saved/restored using a **reflection-based serializer** ; on **other platforms this will fail at runtime** . If you target non-Android platforms, use the overload that accepts a `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration` and register your serializers explicitly.

### When to use this overload

- You are on **Android only** and want a simple API that uses reflection under the hood.

- Your back stack elements use **closed polymorphism** (sealed hierarchies) or otherwise work with Android's reflective serializer.

### Serialization requirements

- Each element placed in the `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` must be `@Serializable`.

- For **closed polymorphism** (sealed hierarchies), the compiler knows all subtypes and generates serializers; Android's reflection will also work.

- For **open polymorphism** (interfaces or non-sealed hierarchies):

  - On Android, the reflection path can handle subtypes without manual registration.

  - On non-Android, this overload is **unsupported** ; use the configuration overload and register all subtypes of `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` in a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html`.

```kotlin
import androidx.navigation3.runtime.rememberNavBackStack
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Details
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Home

// Works on Android (uses reflection internally).
rememberNavBackStack(Home("start"), Details(42))
```

| Parameters |
|---|---|
| `vararg elements: https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` | The initial keys of this back stack. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack<https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | A `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` that survives process death and configuration changes on Android. |

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer` |   |

### rememberNavBackStack

Cmn Artifact: [androidx.navigation3:navigation3-runtime](https://developer.android.com/jetpack/androidx/releases/navigation3) [View Source](https://cs.android.com/search?q=file:androidx/navigation3/runtime/RememberNavBackStack.kt+function:rememberNavBackStack) Added in [1.0.0](https://developer.android.com/jetpack/androidx/releases/navigation3#1.0.0)

```
@Composable
fun rememberNavBackStack(
    configuration: SavedStateConfiguration,
    vararg elements: NavKey
): NavBackStack<NavKey>
```

Provides a `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` that is automatically remembered in the Compose hierarchy across process death and configuration changes.

This function uses `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer` under the hood to save and restore the back stack via `https://developer.android.com/reference/kotlin/androidx/compose/runtime/saveable/rememberSerializable.composable#rememberSerializable(kotlin.Array,androidx.savedstate.serialization.SavedStateConfiguration,kotlin.Function0)`. It is designed specifically for **open polymorphism** of the `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` type.

### Serialization requirements

- All destination keys must be `@Serializable` and implement the `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` interface.

- You **must** provide a `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration` containing a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html` that registers all subtypes of `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey`. This is required to handle open polymorphism correctly across all platforms.

On Android, an overload of this function is available that does not require a `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration`. That version uses reflection internally and does not require subtypes to be registered, but it is not available on other platforms.

```kotlin
import androidx.navigation3.runtime.NavKey
import androidx.navigation3.runtime.rememberNavBackStack
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Details
import androidx.navigation3.runtime.samples.RememberNavBackStackSamples.Home
import androidx.savedstate.serialization.SavedStateConfiguration

val config = SavedStateConfiguration {
    // Register subtypes for open polymorphism or multiplatform use.
    serializersModule = SerializersModule {
        polymorphic(baseClass = NavKey::class) {
            subclass(serializer = Home.serializer())
            subclass(serializer = Details.serializer())
        }
    }
}

// Pass the configuration so encoding/decoding works consistently.
rememberNavBackStack(config, Home("start"))
```

| Parameters |
|---|---|
| `configuration: https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration` | The `https://developer.android.com/reference/kotlin/androidx/savedstate/serialization/SavedStateConfiguration` containing a `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html` configured for `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` polymorphism. This configuration must be provided and cannot be the default. |
| `vararg elements: https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` | The initial `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` elements of this back stack. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack<https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey>` | A `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavBackStack` that survives process death and configuration changes. |

| Throws |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-argument-exception/index.html` | If the provided `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/package-summary#rememberNavBackStack(androidx.savedstate.serialization.SavedStateConfiguration,kotlin.Array)` uses the default `https://kotlinlang.org/api/kotlinx.serialization/kotlinx-serialization-core/kotlinx.serialization.modules/-serializers-module/index.html`, as explicit `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` subtype registration is required. |

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/serialization/NavBackStackSerializer` |   |
| `https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/NavKey` |   |