From b0f54f02c5f4164a94198a3bd876254ab3f9e36f Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Fri, 12 Dec 2025 18:53:15 +0100 Subject: [PATCH 1/8] update: initial nav3 draft --- mpd.tree | 1 + topics/compose/compose-navigation-3.md | 122 +++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 topics/compose/compose-navigation-3.md diff --git a/mpd.tree b/mpd.tree index 02029925..d08771ca 100644 --- a/mpd.tree +++ b/mpd.tree @@ -48,6 +48,7 @@ + diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md new file mode 100644 index 00000000..5f22055a --- /dev/null +++ b/topics/compose/compose-navigation-3.md @@ -0,0 +1,122 @@ +[//]: # (title: Navigation 3 in Compose Multiplatform) + + +[Android's Navigation library](https://developer.android.com/guide/navigation) is upgraded to Navigation 3, a redesigned approach to navigation that works with +Compose and takes into account feedback to the previous version of the library. +Starting with the version 1.10, Compose Multiplatform helps adopt Navigation 3 into multiplatform projects. + +## General overview + +Navigation 3 is more than a new version of the library — in a lot of ways it's a new library entirely. +To dive deeper into the philosophy behind it, see the [Android Developers blog post](https://android-developers.googleblog.com/2025/05/announcing-jetpack-navigation-3-for-compose.html). + +In short, the major changes in the new library are: + +* **User-owned back stack**. Instead of operating a single library back stack, + you create and manage a `SnapshotStateList` of states which is observed by the UI. +* **Low-level building blocks**. Thanks to closer integration with Compose, the library allows more flexibility + in implementing your own navigation components and behavior. +* **Adaptive layout system** that allows to display multiple destinations at the same time and seamlessly switch between layouts. + +Navigation 3 is closely aligned with Compose and therefore a navigation implementation written for Android works in common +Compose Multiplatform code almost without changes. +The only thing you need to add to support non-JVM platforms like web and iOS is implement +[polymorphic serialization for destination keys](#polymorphic-serialization-for-destination-keys). + +> You can find and compare extensive examples of Android and multiplatform implementations on GitHub: +> * [original Android repository with Navigation 3 recipes](https://github.com/android/nav3-recipes) +> * [Compose Multiplatform project with most of the same recipes](https://github.com/terrakok/nav3-recipes) + +Learn more about general design of Navigation 3 in [Android documentation](https://developer.android.com/guide/navigation/navigation-3). + +### Polymorphic serialization for destination keys + +On Android, Navigation 3 relies on reflection-based serialization, which is not available when you target non-JVM platforms like iOS. +To take this into account, the library has two overloads for the `rememberNavBackStack()` function: + +* [The first overload](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/package-summary#rememberNavBackStack(kotlin.Array)) + only takes a set of `NavKey` and requires a reflection-based serializer. +* [The second overload](https://developer.android.com/reference/kotlin/androidx/navigation3/runtime/package-summary#rememberNavBackStack(androidx.savedstate.serialization.SavedStateConfiguration,kotlin.Array)) + also takes a `SavedStateConfiguration` parameter that allows you to provide a `SerializersModule` and handle open polymorphism + correctly across all platforms. + +In the multiplatform examples of Navigation 3 this looks [like this](https://github.com/terrakok/nav3-recipes/blob/8ff455499877225b638d5fcd82b232834f819422/sharedUI/src/commonMain/kotlin/com/example/nav3recipes/basicdsl/BasicDslActivity.kt#L40), +for example: + +```kotlin +@Serializable +private data object RouteA : NavKey + +@Serializable +private data class RouteB(val id: String) : NavKey + + +private val config = SavedStateConfiguration { + serializersModule = SerializersModule { + polymorphic(NavKey::class) { + subclass(RouteA::class, RouteA.serializer()) + subclass(RouteB::class, RouteB.serializer()) + } + } +} + +@Composable +fun BasicDslActivity() { + val backStack = rememberNavBackStack(config, RouteA) + + NavDisplay( + backStack = backStack, + //... + ) +} +``` + +## Setup of the dependencies + +To try out the multiplatform implementation of Navigation 3, +add the following dependency to your version catalog: + +```text +[versions] +compose-multiplatform-navigation3 = "1.0.0-alpha05" + +[libraries] +jetbrains-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "compose-multiplatform-navigation3" } +``` + +Additional support for Navigation 3 is implemented in Material 3 Adaptive and ViewModel. +If you're using these libraries, add the navigation support artifacts as well: +```text +[versions] +compose-multiplatform-adaptive = "1.3.0-alpha02" +compose-multiplatform-lifecycle = "2.10.0-alpha05" + +[libraries] +jetbrains-material3-adaptiveNavigation3 = { module = "org.jetbrains.compose.material3.adaptive:adaptive-navigation3", version.ref = "androidx-adaptive" } +jetbrains-lifecycle-viewmodelNavigation3 = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "compose-multiplatform-lifecycle" } +``` + +Finally, you can try out the [proof-of-concept library](https://github.com/terrakok/navigation3-browser) +authored by a JetBrains engineer that adds support for Navigation 3 to web targets: + +```text +[versions] +navigation3-browser = "0.2.0" + +[libraries] +navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "navigation3-browser" } +``` + +> Web support is expected to be added to the base multiplatform Navigation 3 library in version 1.1.0. +> +{style="note"} + +## What's next + +Compose navigation is covered in-depth on the Android Developer portal. +Sometimes this documentation uses Android-only examples, +but fundamental guidance and navigation principles are the same for Multiplatform: + +* [Overview of navigation with Compose](https://developer.android.com/develop/ui/compose/navigation). +* [Starting page for Jetpack Navigation](https://developer.android.com/guide/navigation) with subpages about + navigation graphs, moving around them, and other navigation use cases. \ No newline at end of file From 0ade7d39eff0574d4766539baa4b50885f9558d5 Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Fri, 12 Dec 2025 20:01:29 +0100 Subject: [PATCH 2/8] update: style tag --- topics/compose/compose-navigation-3.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md index 5f22055a..1520fcd3 100644 --- a/topics/compose/compose-navigation-3.md +++ b/topics/compose/compose-navigation-3.md @@ -23,9 +23,11 @@ Compose Multiplatform code almost without changes. The only thing you need to add to support non-JVM platforms like web and iOS is implement [polymorphic serialization for destination keys](#polymorphic-serialization-for-destination-keys). -> You can find and compare extensive examples of Android and multiplatform implementations on GitHub: +> You can compare extensive examples of Android and multiplatform implementations on GitHub: > * [original Android repository with Navigation 3 recipes](https://github.com/android/nav3-recipes) > * [Compose Multiplatform project with most of the same recipes](https://github.com/terrakok/nav3-recipes) +> +{style="tip"} Learn more about general design of Navigation 3 in [Android documentation](https://developer.android.com/guide/navigation/navigation-3). From 66b6d1a338796a5d247bfe984b089c522c8dc0e9 Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Fri, 12 Dec 2025 21:57:12 +0100 Subject: [PATCH 3/8] update: style tag --- topics/compose/compose-navigation-3.md | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md index 1520fcd3..2c704e40 100644 --- a/topics/compose/compose-navigation-3.md +++ b/topics/compose/compose-navigation-3.md @@ -10,7 +10,7 @@ Starting with the version 1.10, Compose Multiplatform helps adopt Navigation 3 i Navigation 3 is more than a new version of the library — in a lot of ways it's a new library entirely. To dive deeper into the philosophy behind it, see the [Android Developers blog post](https://android-developers.googleblog.com/2025/05/announcing-jetpack-navigation-3-for-compose.html). -In short, the major changes in the new library are: +The major changes in the new library are: * **User-owned back stack**. Instead of operating a single library back stack, you create and manage a `SnapshotStateList` of states which is observed by the UI. @@ -18,18 +18,18 @@ In short, the major changes in the new library are: in implementing your own navigation components and behavior. * **Adaptive layout system** that allows to display multiple destinations at the same time and seamlessly switch between layouts. +Learn more about general design of Navigation 3 in [Android documentation](https://developer.android.com/guide/navigation/navigation-3). + +## Multiplatform support + Navigation 3 is closely aligned with Compose and therefore a navigation implementation written for Android works in common Compose Multiplatform code almost without changes. The only thing you need to add to support non-JVM platforms like web and iOS is implement [polymorphic serialization for destination keys](#polymorphic-serialization-for-destination-keys). -> You can compare extensive examples of Android and multiplatform implementations on GitHub: -> * [original Android repository with Navigation 3 recipes](https://github.com/android/nav3-recipes) -> * [Compose Multiplatform project with most of the same recipes](https://github.com/terrakok/nav3-recipes) -> -{style="tip"} - -Learn more about general design of Navigation 3 in [Android documentation](https://developer.android.com/guide/navigation/navigation-3). +You can compare extensive examples of Android-only and multiplatform apps using Navigation 3 on GitHub: +* [original Android repository with Navigation 3 recipes](https://github.com/android/nav3-recipes) +* [Compose Multiplatform project with most of the same recipes](https://github.com/terrakok/nav3-recipes) ### Polymorphic serialization for destination keys @@ -42,8 +42,7 @@ To take this into account, the library has two overloads for the `rememberNavBac also takes a `SavedStateConfiguration` parameter that allows you to provide a `SerializersModule` and handle open polymorphism correctly across all platforms. -In the multiplatform examples of Navigation 3 this looks [like this](https://github.com/terrakok/nav3-recipes/blob/8ff455499877225b638d5fcd82b232834f819422/sharedUI/src/commonMain/kotlin/com/example/nav3recipes/basicdsl/BasicDslActivity.kt#L40), -for example: +In the multiplatform examples of Navigation 3 it can look [like this](https://github.com/terrakok/nav3-recipes/blob/8ff455499877225b638d5fcd82b232834f819422/sharedUI/src/commonMain/kotlin/com/example/nav3recipes/basicdsl/BasicDslActivity.kt#L40): ```kotlin @Serializable @@ -52,7 +51,6 @@ private data object RouteA : NavKey @Serializable private data class RouteB(val id: String) : NavKey - private val config = SavedStateConfiguration { serializersModule = SerializersModule { polymorphic(NavKey::class) { @@ -73,10 +71,9 @@ fun BasicDslActivity() { } ``` -## Setup of the dependencies +## Dependencies setup -To try out the multiplatform implementation of Navigation 3, -add the following dependency to your version catalog: +To try out the multiplatform implementation of Navigation 3, add the following dependency to your version catalog: ```text [versions] From 447fe76df33ce1121d203fc71be4bd9dcff463a8 Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Tue, 16 Dec 2025 14:08:09 +0100 Subject: [PATCH 4/8] update: a couple of comments --- topics/compose/compose-navigation-3.md | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md index 2c704e40..5def8e0b 100644 --- a/topics/compose/compose-navigation-3.md +++ b/topics/compose/compose-navigation-3.md @@ -51,6 +51,7 @@ private data object RouteA : NavKey @Serializable private data class RouteB(val id: String) : NavKey +// Creates the required serializing configuration for open polymorphism private val config = SavedStateConfiguration { serializersModule = SerializersModule { polymorphic(NavKey::class) { @@ -62,6 +63,7 @@ private val config = SavedStateConfiguration { @Composable fun BasicDslActivity() { + // Consumes the serializing configuration val backStack = rememberNavBackStack(config, RouteA) NavDisplay( @@ -83,6 +85,12 @@ compose-multiplatform-navigation3 = "1.0.0-alpha05" jetbrains-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "compose-multiplatform-navigation3" } ``` +> While Navigation 3 is released as two artifacts, `navigation3:navigation3-ui` and `navigation3:navigation3-common`, +> only `navigation-ui` needs a separate Compose Multiplatform implementation. +> A dependency on `navigation3-common` is added implicitly. +> +{style="note"} + Additional support for Navigation 3 is implemented in Material 3 Adaptive and ViewModel. If you're using these libraries, add the navigation support artifacts as well: ```text @@ -91,7 +99,7 @@ compose-multiplatform-adaptive = "1.3.0-alpha02" compose-multiplatform-lifecycle = "2.10.0-alpha05" [libraries] -jetbrains-material3-adaptiveNavigation3 = { module = "org.jetbrains.compose.material3.adaptive:adaptive-navigation3", version.ref = "androidx-adaptive" } +jetbrains-material3-adaptiveNavigation3 = { module = "org.jetbrains.compose.material3.adaptive:adaptive-navigation3", version.ref = "compose-multiplatform-adaptive" } jetbrains-lifecycle-viewmodelNavigation3 = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "compose-multiplatform-lifecycle" } ``` @@ -100,10 +108,10 @@ authored by a JetBrains engineer that adds support for Navigation 3 to web targe ```text [versions] -navigation3-browser = "0.2.0" +compose-multiplatform-navigation3-browser = "0.2.0" [libraries] -navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "navigation3-browser" } +navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "compose-multiplatform-navigation3-browser" } ``` > Web support is expected to be added to the base multiplatform Navigation 3 library in version 1.1.0. From b391c12e1ce41576f36298596ea4202c265d6867 Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Tue, 16 Dec 2025 14:25:59 +0100 Subject: [PATCH 5/8] update: structure and what's next --- topics/compose/compose-navigation-3.md | 101 +++++++++++++------------ 1 file changed, 52 insertions(+), 49 deletions(-) diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md index 5def8e0b..6660a61e 100644 --- a/topics/compose/compose-navigation-3.md +++ b/topics/compose/compose-navigation-3.md @@ -20,6 +20,51 @@ The major changes in the new library are: Learn more about general design of Navigation 3 in [Android documentation](https://developer.android.com/guide/navigation/navigation-3). +## Dependencies setup + +To try out the multiplatform implementation of Navigation 3, add the following dependency to your version catalog: + +```text +[versions] +compose-multiplatform-navigation3 = "1.0.0-alpha05" + +[libraries] +jetbrains-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "compose-multiplatform-navigation3" } +``` + +> While Navigation 3 is released as two artifacts, `navigation3:navigation3-ui` and `navigation3:navigation3-common`, +> only `navigation-ui` needs a separate Compose Multiplatform implementation. +> A dependency on `navigation3-common` is added implicitly. +> +{style="note"} + +Additional support for Navigation 3 is implemented in Material 3 Adaptive and ViewModel. +If you're using these libraries, add the navigation support artifacts as well: +```text +[versions] +compose-multiplatform-adaptive = "1.3.0-alpha02" +compose-multiplatform-lifecycle = "2.10.0-alpha05" + +[libraries] +jetbrains-material3-adaptiveNavigation3 = { module = "org.jetbrains.compose.material3.adaptive:adaptive-navigation3", version.ref = "compose-multiplatform-adaptive" } +jetbrains-lifecycle-viewmodelNavigation3 = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "compose-multiplatform-lifecycle" } +``` + +Finally, you can try out the [proof-of-concept library](https://github.com/terrakok/navigation3-browser) +authored by a JetBrains engineer that adds support for Navigation 3 to web targets: + +```text +[versions] +compose-multiplatform-navigation3-browser = "0.2.0" + +[libraries] +navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "compose-multiplatform-navigation3-browser" } +``` + +> Web support is expected to be added to the base multiplatform Navigation 3 library in version 1.1.0. +> +{style="note"} + ## Multiplatform support Navigation 3 is closely aligned with Compose and therefore a navigation implementation written for Android works in common @@ -73,57 +118,15 @@ fun BasicDslActivity() { } ``` -## Dependencies setup - -To try out the multiplatform implementation of Navigation 3, add the following dependency to your version catalog: - -```text -[versions] -compose-multiplatform-navigation3 = "1.0.0-alpha05" - -[libraries] -jetbrains-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "compose-multiplatform-navigation3" } -``` - -> While Navigation 3 is released as two artifacts, `navigation3:navigation3-ui` and `navigation3:navigation3-common`, -> only `navigation-ui` needs a separate Compose Multiplatform implementation. -> A dependency on `navigation3-common` is added implicitly. -> -{style="note"} - -Additional support for Navigation 3 is implemented in Material 3 Adaptive and ViewModel. -If you're using these libraries, add the navigation support artifacts as well: -```text -[versions] -compose-multiplatform-adaptive = "1.3.0-alpha02" -compose-multiplatform-lifecycle = "2.10.0-alpha05" - -[libraries] -jetbrains-material3-adaptiveNavigation3 = { module = "org.jetbrains.compose.material3.adaptive:adaptive-navigation3", version.ref = "compose-multiplatform-adaptive" } -jetbrains-lifecycle-viewmodelNavigation3 = { module = "org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "compose-multiplatform-lifecycle" } -``` - -Finally, you can try out the [proof-of-concept library](https://github.com/terrakok/navigation3-browser) -authored by a JetBrains engineer that adds support for Navigation 3 to web targets: - -```text -[versions] -compose-multiplatform-navigation3-browser = "0.2.0" - -[libraries] -navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "compose-multiplatform-navigation3-browser" } -``` - -> Web support is expected to be added to the base multiplatform Navigation 3 library in version 1.1.0. -> -{style="note"} - ## What's next -Compose navigation is covered in-depth on the Android Developer portal. +Navigation 3 is covered in-depth on the Android Developer portal. Sometimes this documentation uses Android-only examples, but fundamental guidance and navigation principles are the same for Multiplatform: -* [Overview of navigation with Compose](https://developer.android.com/develop/ui/compose/navigation). -* [Starting page for Jetpack Navigation](https://developer.android.com/guide/navigation) with subpages about - navigation graphs, moving around them, and other navigation use cases. \ No newline at end of file +* [Overview of Navigation 3](https://developer.android.com/guide/navigation/navigation-3) + with advice on managing state, modularizing navigation code, and animation. +* [Migration from Navigation 2 to Navigation 3](https://developer.android.com/guide/navigation/navigation-3/migration-guide). + It's easier to see Navigation 3 as a new library than a new version of the existing library, + so it's less of a migration and more of a rewrite. + But the guide points out the general steps to take. \ No newline at end of file From bdc0b01eb40e8cf50d04567c73254015f9006bf2 Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Tue, 16 Dec 2025 15:03:17 +0100 Subject: [PATCH 6/8] fix: SME review --- topics/compose/compose-navigation-3.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md index 6660a61e..3d5e25dd 100644 --- a/topics/compose/compose-navigation-3.md +++ b/topics/compose/compose-navigation-3.md @@ -3,7 +3,8 @@ [Android's Navigation library](https://developer.android.com/guide/navigation) is upgraded to Navigation 3, a redesigned approach to navigation that works with Compose and takes into account feedback to the previous version of the library. -Starting with the version 1.10, Compose Multiplatform helps adopt Navigation 3 into multiplatform projects. +Starting with the version 1.10, Compose Multiplatform helps adopt Navigation 3 into multiplatform projects on all supported platforms: +Android, iOS, desktop, and web. ## General overview @@ -26,15 +27,15 @@ To try out the multiplatform implementation of Navigation 3, add the following d ```text [versions] -compose-multiplatform-navigation3 = "1.0.0-alpha05" +multiplatform-nav3-ui = "1.0.0-alpha05" [libraries] -jetbrains-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "compose-multiplatform-navigation3" } +jetbrains-navigation3-ui = { module = "org.jetbrains.androidx.navigation3:navigation3-ui", version.ref = "multiplatform-nav3-ui" } ``` > While Navigation 3 is released as two artifacts, `navigation3:navigation3-ui` and `navigation3:navigation3-common`, > only `navigation-ui` needs a separate Compose Multiplatform implementation. -> A dependency on `navigation3-common` is added implicitly. +> A dependency on `navigation3-common` is added transitively. > {style="note"} @@ -51,7 +52,7 @@ jetbrains-lifecycle-viewmodelNavigation3 = { module = "org.jetbrains.androidx.li ``` Finally, you can try out the [proof-of-concept library](https://github.com/terrakok/navigation3-browser) -authored by a JetBrains engineer that adds support for Navigation 3 to web targets: +authored by a JetBrains engineer that integrates the multiplatform Navigation 3 with browser history navigation: ```text [versions] @@ -61,9 +62,7 @@ compose-multiplatform-navigation3-browser = "0.2.0" navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "compose-multiplatform-navigation3-browser" } ``` -> Web support is expected to be added to the base multiplatform Navigation 3 library in version 1.1.0. -> -{style="note"} +Support for browser history navigation is expected to be added to the base multiplatform Navigation 3 library in version 1.1.0. ## Multiplatform support From e1549416c6153bc69258e497d59db53b3e51465b Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Tue, 16 Dec 2025 15:14:24 +0100 Subject: [PATCH 7/8] fix: SME review --- topics/compose/compose-navigation-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md index 3d5e25dd..7ab97bc3 100644 --- a/topics/compose/compose-navigation-3.md +++ b/topics/compose/compose-navigation-3.md @@ -62,7 +62,7 @@ compose-multiplatform-navigation3-browser = "0.2.0" navigation3-browser = { module = "com.github.terrakok:navigation3-browser", version.ref = "compose-multiplatform-navigation3-browser" } ``` -Support for browser history navigation is expected to be added to the base multiplatform Navigation 3 library in version 1.1.0. +Browser history navigation is expected to be supported by the base multiplatform Navigation 3 library in version 1.1.0. ## Multiplatform support From da1aa45675c8d2615291a3f8b63ab2f9b9c68917 Mon Sep 17 00:00:00 2001 From: Aleksey Zamulla Date: Tue, 16 Dec 2025 15:14:50 +0100 Subject: [PATCH 8/8] fix: SME review --- topics/compose/compose-navigation-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/topics/compose/compose-navigation-3.md b/topics/compose/compose-navigation-3.md index 7ab97bc3..f99660bb 100644 --- a/topics/compose/compose-navigation-3.md +++ b/topics/compose/compose-navigation-3.md @@ -52,7 +52,7 @@ jetbrains-lifecycle-viewmodelNavigation3 = { module = "org.jetbrains.androidx.li ``` Finally, you can try out the [proof-of-concept library](https://github.com/terrakok/navigation3-browser) -authored by a JetBrains engineer that integrates the multiplatform Navigation 3 with browser history navigation: +authored by a JetBrains engineer that integrates the multiplatform Navigation 3 with browser history navigation on the web: ```text [versions]