For developers · Checked 1 October 2026

Navigation 3 for Jetpack Compose

Short answer: yes, Navigation 3 is stable. Version 1.0.0 shipped on November 19, 2025, and the current stable release is 1.2.0 from September 23, 2026, which adds a Result API for returning values between screens and deep link matching. Navigation 3 is built only for Compose: you own the back stack as a list of keys, and NavDisplay shows whatever is on it. Add androidx.navigation3:navigation3-runtime and navigation3-ui at 1.2.0, with compileSdk 36 or later. For Kotlin Multiplatform, Compose Multiplatform supports it from version 1.10.

Navigation 3 stable releases

From the AndroidX navigation3 release notes, read 1 October 2026. 1.3.0-alpha01 was published alongside 1.2.0.

VersionStable sinceMain additions
1.0.0November 19, 2025First stable release: back stack, NavEntry, entryProvider, NavDisplay, scenes
1.1.0April 8, 2026Shared elements between scenes, SceneDecoratorStrategy, type-safe NavMetadata DSL, OverlayScene exit animations
1.2.0September 23, 2026Result API, KMP deep links with DeepLinkMatcher and BackStackMatcher, NavigationBackHandler for predictive back

How Navigation 3 works

Each destination has a key, and an entryProvider resolves keys to composable content. The back stack is a list you create and change yourself: navigating means adding a key, going back means removing one. NavDisplay observes that list and updates the UI with animations. Scene strategies let one layout show several destinations at once, such as list and detail on a large screen, and the Material 3 adaptive add-on, androidx.compose.material3.adaptive:adaptive-navigation3, provides ready strategies. Entries can pass metadata to their layout and return results to other entries.

Saving state and ViewModels

rememberNavBackStack creates a back stack that survives configuration changes and process death, as long as every key implements NavKey and is marked @Serializable, which needs the KotlinX Serialization plugin. You can keep the back stack in a ViewModel instead, but then you serialize and restore it yourself. To scope a ViewModel to one screen rather than the activity, add androidx.lifecycle:lifecycle-viewmodel-navigation3 and pass rememberSaveableStateHolderNavEntryDecorator() and rememberViewModelStoreNavEntryDecorator() to entryDecorators on NavDisplay. The ViewModel is then created when the entry joins the back stack and cleared when it’s popped. Because keys are your own classes, screen arguments are fields on the key; Google’s recipes repository shows how to pass them to a ViewModel.

Migrating from Navigation 2

Google’s guide has seven steps: add the Navigation 3 dependencies, make every route implement NavKey, create classes that hold navigation state, replace NavController with them, move destinations from the NavHost graph into an entryProvider, replace NavHost with NavDisplay, and remove Navigation 2. Before you start you need compileSdk 36 and minSdk 23, type-safe routes rather than string routes, and destinations that are composables; Fragments need the Views-in-Compose interop. The guide assumes a single atomic migration rather than mixing both libraries. It doesn’t yet cover more than one level of nested navigation, destinations shared between back stacks, or custom destination types. Bottom sheets, modular navigation, ViewModel arguments and returning results are covered by recipes. Google also publishes an agent skill: android skills add navigation-3, see Android skills in Android Studio.

Kotlin Multiplatform

The AndroidX runtime artifact targets JVM, iOS and other native platforms, and web, but the AndroidX UI artifact with NavDisplay is Android-only. JetBrains ships a multiplatform UI implementation, org.jetbrains.androidx.navigation3:navigation3-ui, supported from Compose Multiplatform 1.10 on Android, iOS, desktop and web. On non-JVM targets you register polymorphic serialization for your keys, and Google’s notes say multiplatform state saving uses the rememberNavBackStack overload with an explicit SavedStateConfiguration. The 1.2.0 deep link API is multiplatform too. For the build side of KMP projects, see migrating to AGP 9; for iOS styling, see Compose Multiplatform and Liquid Glass.

Where Censuus fits

Clear navigation keeps users moving through your app; being found brings them in. Censuus ranks apps by the visits they draw, and adding your app is free through the List my app form. Placement comes from traffic and sponsorship: apps climb on the visits they draw, and a sponsor can pay to rise higher.

Frequently asked questions

Is Navigation 3 stable?

Yes. Navigation 3 1.0.0 became stable on November 19, 2025, and 1.2.0 is the latest stable release, from September 23, 2026.

What dependencies does Navigation 3 need?

androidx.navigation3:navigation3-runtime and androidx.navigation3:navigation3-ui, with compileSdk 36 or later. Add lifecycle-viewmodel-navigation3 for ViewModel scoping, adaptive-navigation3 for adaptive layouts, and KotlinX Serialization for saveable keys.

How do I return a result from a screen in Navigation 3?

From 1.2.0, use the Result API: a ResultEventBus provided through LocalResultEventBus and ResultEventBusNavEntryDecorator, read as state with conflateAsState or collected with ResultEffect.

How do I pass arguments to a ViewModel in Navigation 3?

Arguments are fields on your navigation key. Scope the ViewModel to the entry with rememberViewModelStoreNavEntryDecorator and pass the key’s values when you create it; Google’s Navigation 3 recipes repository has a worked example.

Does Navigation 3 work with Compose Multiplatform?

Yes, from Compose Multiplatform 1.10, through JetBrains’ org.jetbrains.androidx.navigation3:navigation3-ui artifact on Android, iOS, desktop and web. Keys need polymorphic serialization on non-JVM targets.

Can I use Navigation 3 with Fragments?

Navigation 3 destinations are composables. To show Fragments or Views, use the Views-in-Compose interop APIs.

Guides for app developers

Put your app in the ranking

Censuus ranks apps by the visits they draw and by sponsorship, no bots. Listing is free; sponsorship raises placement.