# rememberViewModelStoreOwner

Common/AllAndroid/JVM

## Functions summary

|---|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/rememberViewModelStoreOwner.composable#rememberViewModelStoreOwner(androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)( provider: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelStoreProvider, savedStateRegistryOwner: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner? )` Remembers a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` scoped to the current composable using an existing `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/rememberViewModelStoreOwner.composable#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)( key: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, provider: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelStoreProvider, savedStateRegistryOwner: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner? )` Remembers a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` scoped to the current composable using an existing `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)` and a specific `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)`. | Cmn |
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/rememberViewModelStoreOwner.composable#rememberViewModelStoreOwner(androidx.lifecycle.ViewModelStoreOwner,androidx.savedstate.SavedStateRegistryOwner,androidx.savedstate.SavedState,androidx.lifecycle.viewmodel.CreationExtras,androidx.lifecycle.ViewModelProvider.Factory)( parent: https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner?, savedStateRegistryOwner: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner?, defaultArgs: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedState, defaultCreationExtras: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras, defaultFactory: https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory )` Remembers a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` scoped to the current composable. | Cmn |

## Functions

### rememberViewModelStoreOwner

Cmn Artifact: [androidx.lifecycle:lifecycle-viewmodel-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/viewmodel/compose/RememberViewModelStoreOwner.kt+function:rememberViewModelStoreOwner) Added in [2.11.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.11.0)

```
@Composable
fun rememberViewModelStoreOwner(
    provider: ViewModelStoreProvider,
    savedStateRegistryOwner: SavedStateRegistryOwner? = LocalSavedStateRegistryOwner.current
): ViewModelStoreOwner
```

Remembers a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` scoped to the current composable using an existing `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)`.

This function creates an owner scoped to this specific call site in the composition.

This function is responsible for releasing its reference to the store when it leaves the composition, allowing the `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)` to perform cleanup if the store has been marked for clearing.

```kotlin
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewmodel.ViewModelStoreProvider
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.rememberViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.rememberViewModelStoreProvider
import androidx.lifecycle.viewmodel.compose.viewModel

// Creates a provider unique to this feature branch using hashCode.
val storeProvider = rememberViewModelStoreProvider()

// Use the provider to get an owner (without key)
val owner = rememberViewModelStoreOwner(provider = storeProvider)

CompositionLocalProvider(LocalViewModelStoreOwner provides owner) {
    val viewModel = viewModel { TestViewModel("isolated_data") }
}
```

| Parameters |
|---|---|
| `provider: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelStoreProvider` | The `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelStoreProvider` that manages the creation and cleanup of the underlying `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStore`. If this value changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` will be recreated. |
| `savedStateRegistryOwner: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner? = LocalSavedStateRegistryOwner.current` | An optional `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner` to delegate saved state operations. When `null`, ViewModels created in this scope do not support saved state. If this value changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` will be recreated. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` | A `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` remembered across compositions and scoped to this call site. |

### rememberViewModelStoreOwner

Cmn Artifact: [androidx.lifecycle:lifecycle-viewmodel-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/viewmodel/compose/RememberViewModelStoreOwner.kt+function:rememberViewModelStoreOwner) Added in [2.11.0](https://developer.android.com/jetpack/androidx/releases/lifecycle#2.11.0)

```
@Composable
fun rememberViewModelStoreOwner(
    key: Any?,
    provider: ViewModelStoreProvider,
    savedStateRegistryOwner: SavedStateRegistryOwner? = LocalSavedStateRegistryOwner.current
): ViewModelStoreOwner
```

Remembers a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` scoped to the current composable using an existing `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)` and a specific `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)`.

This function allows you to scope a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` to a custom `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)`. This is useful in cases where using a key in different parts of the UI should yield the same state or instance (similar to how a ViewModel is shared). For example, you might use a key derived from navigation arguments, such as `ViewModelNavEntryDecorator.contentKey`, to share the same owner across different screens or components.

**Note:** Unlike many other scoped owners, ViewModels created with this owner are **not** automatically cleared simply because this composable leaves the composition. The `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStore` is only cleared when `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelStoreProvider#clearKey(kotlin.Any)` is explicitly called for this `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)`.

This function is responsible for releasing its reference to the store when it leaves the composition, allowing the `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)` to perform cleanup if the store has been marked for clearing.

```kotlin
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewmodel.ViewModelStoreProvider
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.rememberViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.rememberViewModelStoreProvider
import androidx.lifecycle.viewmodel.compose.viewModel

val storeProvider = rememberViewModelStoreProvider()
val pages = listOf("Page 1", "Page 2", "Page 3")

HorizontalPager(pageCount = pages.size) { page ->
    // Create a ViewModelStoreOwner for the specific page using the provider and a key.
    // This ensures each page gets its own isolated ViewModel instance.
    val pageOwner = rememberViewModelStoreOwner(provider = storeProvider, key = page)

    CompositionLocalProvider(LocalViewModelStoreOwner provides pageOwner) {
        val pageViewModel = viewModel { TestViewModel(pages[page]) }
        // Use pageViewModel
    }
}
```

| Parameters |
|---|---|
| `key: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | A unique identifier to isolate this store from others. Providing the same `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)` and `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)` to multiple `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/rememberViewModelStoreOwner.composable#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)` calls will yield the same `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` and shared state. If this value changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` will be recreated. |
| `provider: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelStoreProvider` | The `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/ViewModelStoreProvider` that manages the creation and cleanup of the underlying `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStore`. If this value changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` will be recreated. |
| `savedStateRegistryOwner: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner? = LocalSavedStateRegistryOwner.current` | An optional `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner` to delegate saved state operations. When `null`, ViewModels created in this scope do not support saved state. If this value changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` will be recreated. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` | A `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` remembered across compositions and scoped to the provided `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(kotlin.Any,androidx.lifecycle.viewmodel.ViewModelStoreProvider,androidx.savedstate.SavedStateRegistryOwner)`. |

### rememberViewModelStoreOwner

Cmn Artifact: [androidx.lifecycle:lifecycle-viewmodel-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/viewmodel/compose/RememberViewModelStoreOwner.kt+function:rememberViewModelStoreOwner)

```
@Composable
fun rememberViewModelStoreOwner(
    parent: ViewModelStoreOwner? = checkNotNull(LocalViewModelStoreOwner.current) {
            "CompositionLocal LocalViewModelStoreOwner not present"
        },
    savedStateRegistryOwner: SavedStateRegistryOwner? = LocalSavedStateRegistryOwner.current,
    defaultArgs: SavedState = savedState(),
    defaultCreationExtras: CreationExtras = parent.defaultViewModelCreationExtras,
    defaultFactory: ViewModelProvider.Factory = parent.defaultViewModelProviderFactory
): ViewModelStoreOwner
```

Remembers a `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` scoped to the current composable.

This function creates an owner that is unique to this specific call site in the composition hierarchy. It allows creating ViewModels that are strictly scoped to this composable's lifecycle: they are created when this composable enters the composition and cleared immediately when it leaves.

The owner is linked to the `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.ViewModelStoreOwner,androidx.savedstate.SavedStateRegistryOwner,androidx.savedstate.SavedState,androidx.lifecycle.viewmodel.CreationExtras,androidx.lifecycle.ViewModelProvider.Factory)`, ensuring that configuration changes (like rotation) are handled correctly: the ViewModels survive rotation if the parent does, but are destroyed if the parent is destroyed.

**Null parent:** If `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.ViewModelStoreOwner,androidx.savedstate.SavedStateRegistryOwner,androidx.savedstate.SavedState,androidx.lifecycle.viewmodel.CreationExtras,androidx.lifecycle.ViewModelProvider.Factory)` is **EXPLICITLY** `null`, this creates a root provider that runs independently. By default, it requires a parent from the `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner` and will throw an `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-illegal-state-exception/index.html` if one is not present.

```kotlin
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewmodel.compose.LocalViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.rememberViewModelStoreOwner
import androidx.lifecycle.viewmodel.compose.viewModel

var showDetail by remember { mutableStateOf(false) }

if (showDetail) {
    // Creates a ViewModelStoreOwner scoped to this specific call site.
    // When showDetail becomes false, the owner leaves composition and ViewModels are cleared.
    val scopedOwner = rememberViewModelStoreOwner()

    CompositionLocalProvider(LocalViewModelStoreOwner provides scopedOwner) {
        val viewModel = viewModel { TestViewModel("detail_data") }
        // Use viewModel
    }
}
```

| Parameters |
|---|---|
| `parent: https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner? = checkNotNull(LocalViewModelStoreOwner.current) { "CompositionLocal LocalViewModelStoreOwner not present" }` | The `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` to use as the parent. Defaults to the owner from `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner`. If this value changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` will be recreated. |
| `savedStateRegistryOwner: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner? = LocalSavedStateRegistryOwner.current` | An optional `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedStateRegistryOwner` to delegate saved state operations. When `null`, ViewModels created in this scope do not support saved state. If this value changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` will be recreated. |
| `defaultArgs: https://developer.android.com/reference/kotlin/androidx/savedstate/SavedState = savedState()` | The `https://developer.android.com/reference/kotlin/androidx/savedstate/SavedState` containing default arguments to be passed to ViewModels created in this scope. These arguments are merged with any default arguments in `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.ViewModelStoreOwner,androidx.savedstate.SavedStateRegistryOwner,androidx.savedstate.SavedState,androidx.lifecycle.viewmodel.CreationExtras,androidx.lifecycle.ViewModelProvider.Factory)`. If the same key exists in both, the value from `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.ViewModelStoreOwner,androidx.savedstate.SavedStateRegistryOwner,androidx.savedstate.SavedState,androidx.lifecycle.viewmodel.CreationExtras,androidx.lifecycle.ViewModelProvider.Factory)` takes precedence. This value is only read during the initial creation of the owner; subsequent recompositions with different values will not update the existing owner. |
| `defaultCreationExtras: https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras = parent.defaultViewModelCreationExtras` | The `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/CreationExtras` to use. Defaults to the `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.ViewModelStoreOwner,androidx.savedstate.SavedStateRegistryOwner,androidx.savedstate.SavedState,androidx.lifecycle.viewmodel.CreationExtras,androidx.lifecycle.ViewModelProvider.Factory)`'s default extras. This value is only read during the initial creation of the owner; subsequent recompositions with different values will not update or recreate the existing owner. |
| `defaultFactory: https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory = parent.defaultViewModelProviderFactory` | The `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelProvider.Factory` to use for creating ViewModels in this scope. Defaults to the `https://developer.android.com/reference/kotlin/androidx/lifecycle/viewmodel/compose/package-summary#rememberViewModelStoreOwner(androidx.lifecycle.ViewModelStoreOwner,androidx.savedstate.SavedStateRegistryOwner,androidx.savedstate.SavedState,androidx.lifecycle.viewmodel.CreationExtras,androidx.lifecycle.ViewModelProvider.Factory)`'s default factory. This value is only read during the initial creation of the owner; subsequent recompositions with different values will not update or recreate the existing owner. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` | A `https://developer.android.com/reference/kotlin/androidx/lifecycle/ViewModelStoreOwner` that is remembered across compositions and scoped to this call site. |