Get started

To get started with Navigation 3, add the library to your project along with any supporting libraries. Use the table below to decide which libraries to add.

Artifacts

Name

What it does

Artifact

Navigation 3 runtime library

Core Navigation 3 API. Includes NavEntry, EntryProvider and the associated DSL.

androidx.navigation3:navigation3-runtime

Navigation 3 UI library

Provides classes to display content, including NavDisplay and Scene.

androidx.navigation3:navigation3-ui

ViewModel Lifecycle for Navigation 3

Allows ViewModels to be scoped to entries in the back stack.

androidx.lifecycle:lifecycle-viewmodel-navigation3

Available in snapshot builds

Material 3 adaptive layouts for Navigation 3

Provides adaptive layouts (SceneStrategies, Scenes and metadata definitions) for use with NavDisplay.

androidx.compose.material3.adaptive:adaptive-navigation3

Available in snapshot builds

KotlinX Serialization

Allows navigation keys to be serialized.

Plugin: org.jetbrains.kotlin.plugin.serialization

Libraries:

org.jetbrains.kotlinx:kotlinx-serialization-core

org.jetbrains.kotlinx:kotlinx-serialization-json

Project setup

To add the Navigation 3 library to your existing project, add the following to your libs.versions.toml:

[versions]
nav3Core = "1.0.0-alpha01"
nav3Material = "1.0.0-SNAPSHOT"
nav3Lifecycle = "1.0.0-alpha01"
kotlinSerialization = "2.1.21"
kotlinxSerializationCore = "1.8.1"

[libraries]
# Core Navigation 3 libraries
androidx-navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", version.ref = "nav3Core" }
androidx-navigation3-ui = { module = "androidx.navigation3:navigation3-ui", version.ref = "nav3Core" }

# Optional add-on libraries
androidx-material3-navigation3 = { group = "androidx.compose.material3.adaptive", name = "adaptive-navigation3", version.ref = "nav3Material" }
androidx-lifecycle-viewmodel-navigation3 = { module = "androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "nav3Lifecycle" }
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinxSerializationCore" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationCore" }

[plugins]
# Optional plugins
jetbrains-kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlinSerialization"}

Add the following to your app build file app/build.gradle.kts:

plugins {
    ...
    // Optional, provides the @Serialize annotation for autogeneration of Serializers.
    alias(libs.plugins.jetbrains.kotlin.serialization)
}

dependencies {
    ...
    implementation(libs.androidx.navigation3)
    implementation(libs.androidx.lifecycle.viewmodel.navigation3)
    implementation(libs.androidx.material3.navigation3)
    implementation(libs.kotlinx.serialization.core)
    implementation(libs.kotlinx.serialization.json)
}