[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7395":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":25,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":46,"readmeContent":47,"aiSummary":48,"trendingCount":16,"starSnapshotCount":16,"syncStatus":49,"lastSyncTime":50,"discoverSource":51},7395,"voyager","adrielcafe\u002Fvoyager","adrielcafe","🛸 A pragmatic navigation library for Compose Multiplatform","https:\u002F\u002Fvoyager.adriel.cafe",null,"Kotlin",3084,166,22,186,0,1,3,11,4,28.67,"MIT License",false,"main",true,[27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45],"android","android-compose","android-library","android-navigation","bottom-sheet","bottomsheet","compose","deep-links","deeplink","jetpack-compose","kotlin","kotlin-android","navigation","navigator","router","stack","tab-navigation","transition-animation","transitions","2026-06-12 02:01:38","[![Maven metadata URL](https:\u002F\u002Fimg.shields.io\u002Fmaven-metadata\u002Fv?color=blue&metadataUrl=https:\u002F\u002Fs01.oss.sonatype.org\u002Fservice\u002Flocal\u002Frepo_groups\u002Fpublic\u002Fcontent\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fvoyager-core\u002Fmaven-metadata.xml&style=for-the-badge)](https:\u002F\u002Frepo.maven.apache.org\u002Fmaven2\u002Fcafe\u002Fadriel\u002Fvoyager\u002F)\n[![Android API](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fapi-21%2B-brightgreen.svg?style=for-the-badge)](https:\u002F\u002Fandroid-arsenal.com\u002Fapi?level=21)\n[![kotlin](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flanguages\u002Ftop\u002Fadrielcafe\u002Fvoyager.svg?style=for-the-badge&color=blueviolet)](https:\u002F\u002Fkotlinlang.org\u002F)\n[![ktlint](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcode%20style-%E2%9D%A4-FF4081.svg?style=for-the-badge)](https:\u002F\u002Fktlint.github.io\u002F)\n[![License MIT](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fadrielcafe\u002Fvoyager.svg?style=for-the-badge&color=orange)](LICENSE.md)\n\n\u003Ch1 align=\"center\">\n    \u003Cimg height=\"150\" src=\"https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F127723355-f56b3040-47cb-44fd-8504-a1868721c1a3.png\"\u002F>\n    \u003Cbr>\n    \u003Ca href=\"https:\u002F\u002Fvoyager.adriel.cafe\">Voyager\u003C\u002Fa>: Compose on Warp Speed\n\u003C\u002Fh1>\n\nA multiplatform navigation library built for, and seamlessly integrated with, [Jetpack Compose](https:\u002F\u002Fdeveloper.android.com\u002Fjetpack\u002Fcompose).\n\nCreate scalable Single-Activity apps powered by a [pragmatic API](https:\u002F\u002Fvoyager.adriel.cafe\u002Fnavigation):\n\n```kotlin\nclass HomeScreenModel : ScreenModel {\n    \u002F\u002F ...\n}\n\nclass HomeScreen : Screen {\n\n    @Composable\n    override fun Content() {\n        val screenModel = rememberScreenModel\u003CHomeScreenModel>()\n        \u002F\u002F ...\n    }\n}\n\nclass SingleActivity : ComponentActivity() {\n\n    override fun onCreate(savedInstanceState: Bundle?) {\n        super.onCreate(savedInstanceState)\n\n        setContent {\n            Navigator(HomeScreen())\n        }\n    }\n}\n```\n\nTurn on the Warp Drive and enjoy the voyage 🖖\n\n### Documentation\nSee the [project website](https:\u002F\u002Fvoyager.adriel.cafe) for documentation and APIs.\n\n### Features\n- [Supported platforms](https:\u002F\u002Fvoyager.adriel.cafe\u002Fsetup#platform-compatibility): Android, iOS, Desktop, Web.\n- [Linear navigation](https:\u002F\u002Fvoyager.adriel.cafe\u002Fnavigation)\n- [BottomSheet navigation](https:\u002F\u002Fvoyager.adriel.cafe\u002Fnavigation\u002Fbottomsheet-navigation)\n- [Tab navigation](https:\u002F\u002Fvoyager.adriel.cafe\u002Fnavigation\u002Ftab-navigation) like [Youtube app](https:\u002F\u002Fplay.google.com\u002Fstore\u002Fapps\u002Fdetails?id=com.google.android.youtube)\n- [Nested navigation](https:\u002F\u002Fvoyager.adriel.cafe\u002Fnavigation\u002Fnested-navigation) (multiple stacks, parent navigation)\n- [ScreenModel](https:\u002F\u002Fvoyager.adriel.cafe\u002Fscreenmodel) (a.k.a ViewModel) integrated with [Koin](https:\u002F\u002Fvoyager.adriel.cafe\u002Fscreenmodel\u002Fkoin-integration), [Kodein](https:\u002F\u002Fvoyager.adriel.cafe\u002Fscreenmodel\u002Fkodein-integration), [Hilt](https:\u002F\u002Fvoyager.adriel.cafe\u002Fscreenmodel\u002Fhilt-integration), [Coroutines](https:\u002F\u002Fvoyager.adriel.cafe\u002Fscreenmodel\u002Fcoroutines-integration), [RxJava](https:\u002F\u002Fvoyager.adriel.cafe\u002Fscreenmodel\u002Frxjava-integration), [LiveData](https:\u002F\u002Fvoyager.adriel.cafe\u002Fscreenmodel\u002Flivedata-integration)\n- [Android ViewModel](https:\u002F\u002Fvoyager.adriel.cafe\u002Fandroid-viewmodel) integration (with [Hilt support](https:\u002F\u002Fvoyager.adriel.cafe\u002Fandroid-viewmodel\u002Fhilt-integration))\n- Type-safe [multi-module navigation](https:\u002F\u002Fvoyager.adriel.cafe\u002Fnavigation\u002Fmulti-module-navigation)\n- State-aware [Stack API](https:\u002F\u002Fvoyager.adriel.cafe\u002Fstack-api)\n- Built-in [transitions](https:\u002F\u002Fvoyager.adriel.cafe\u002Ftransitions)\n- [State restoration](https:\u002F\u002Fvoyager.adriel.cafe\u002Fstate-restoration) after Activity recreation\n- [Lifecycle](https:\u002F\u002Fvoyager.adriel.cafe\u002Flifecycle) callbacks\n- [Back press](https:\u002F\u002Fvoyager.adriel.cafe\u002Fback-press) handling\n- [Deep linking](https:\u002F\u002Fvoyager.adriel.cafe\u002Fdeep-links) support\n\n### Samples\n| [Stack API](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fandroid\u002Fsrc\u002Fmain\u002Fjava\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fsample\u002FstateStack) | [Android ViewModel](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fandroid\u002Fsrc\u002Fmain\u002Fjava\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fsample\u002FandroidViewModel) | [ScreenModel](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fandroid\u002Fsrc\u002Fmain\u002Fjava\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fsample\u002FscreenModel) | [Basic nav.](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fandroid\u002Fsrc\u002Fmain\u002Fjava\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fsample\u002FbasicNavigation) |\n|----------|----------|----------|----------|\n| ![navigation-stack](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F126323192-9b6349fe-7b96-4acf-b62e-c75165d909e1.gif) | ![navigation-android-viewmodel](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F130377801-c350b4f5-bcca-4d28-9403-0d9d4c1e99f7.gif) | ![navigation-screenmodel](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F131770829-fa85cb19-cc76-4fbf-9bdc-165997d5349d.gif) | ![navigation-basic](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F126323165-47760eec-2ba2-48ee-8e3a-841d50098d33.gif) |\n\n| [BottomSheet nav.](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fandroid\u002Fsrc\u002Fmain\u002Fjava\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fsample\u002FbottomSheetNavigation) | [Tab nav.](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fandroid\u002Fsrc\u002Fmain\u002Fjava\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fsample\u002FtabNavigation) | [Multi-module nav.](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fmulti-module) | [Nested nav.](https:\u002F\u002Fgithub.com\u002Fadrielcafe\u002Fvoyager\u002Ftree\u002Fmain\u002Fsamples\u002Fandroid\u002Fsrc\u002Fmain\u002Fjava\u002Fcafe\u002Fadriel\u002Fvoyager\u002Fsample\u002FnestedNavigation) |\n|----------|----------|----------|----------|\n| ![navigation-bottom-sheet](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F131191122-18025192-ce4d-4659-9afa-aacfdb488796.gif) | ![navigation-tab](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F126323588-2f970953-0adb-47f8-b2fb-91c5854656bd.gif) | ![navigation-multi-module](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F130662717-c15caf88-350e-42a0-837c-3453805b68f2.gif) | ![navigation-nested](https:\u002F\u002Fuser-images.githubusercontent.com\u002F2512298\u002F126323027-a2633aef-9402-4df8-9384-45935d7986cf.gif) |\n","Voyager 是一个专为 Compose Multiplatform 设计的实用导航库。它支持线性导航、BottomSheet 导航、标签导航和嵌套导航等多种导航模式，并且与 Jetpack Compose 无缝集成，提供了一种简洁而强大的 API 来构建可扩展的单活动应用。该库还内置了 ScreenModel（类似于 ViewModel）功能，可以方便地与 Koin、Kodein、Hilt 等依赖注入框架以及 Coroutines、RxJava 和 LiveData 等异步处理库结合使用。适用于需要在 Android、iOS、桌面或 Web 平台上实现复杂但易于维护的用户界面导航的应用开发场景。",2,"2026-06-11 03:12:05","top_language"]