> For the complete documentation index, see [llms.txt](https://beyondeye.gitbook.io/compose-bloc/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://beyondeye.gitbook.io/compose-bloc/differences-from-adrielcafe-voyager.md).

# Differences from adrielcafe/voyager

* The original voyager library does not support Compose Web
* The original voyager library does not support path-based navigation.
* `voyager-androidx` now work differently: all lifecycle handling hooks from the original code have been removed (`AndroidScreenLifecycleOwner` is not used anymore). This is because it caused many issues: see for example [issue 62](https://github.com/adrielcafe/voyager/issues/62). But this does not mean that android lifecycle events are ignored. When an activity is destroyed then all associated `ScreenModels` and `Blocs` are automatically disposed and the associated flows cancelled
* Also flows associated to blocs of an `Activity` are automatically paused when the `Activity` is paused
* Now Screen lifecycle is handled in the following way: A `Screen` (and associated screen model and blocs) is disposed in the following cases

  * When the `Screen` is popped from the navigator stack
  * When the parent `Activity` where the `Screen` composable was started is destroyed

  In order to all this to work, now is required to declare the top level navigator in an activity with `RootNavigator`:

```kotlin
class MainScreen: Screen {
    @Composable
        override fun Content() {
            //... main screen implementation here
        }
}

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            //*IMPORTANT* need to use RootNavigator to initialize root navigator for activity, not as in original voyager
            RootNavigator(MainScreen())
        }
    }
}
```
