Appyx is released! (1.0-alpha02)
Model-driven navigation, and a modern, clean approach to structuring your Android application
The Bumble Android team is happy to announce the initial public release of Appyx!
GitHub repo: https://github.com/bumble-tech/appyx
Project page and documentation: https://bumble-tech.github.io/appyx/
Appyx is an Android navigation / application framework (you can use it as either or both).
From the application framework perspective, it gives you lightweight, quick prototyping to enable you to structure your application in a composed way — including your business logic, not just your UI @Composables!
Its core philosophy is to break down your application into a tree structure of Nodes, and instead of a global navigation, using routing to manipulate the tree:
Once you’ve structured your app this way, Appyx gives you composable navigation in the tree that you can initiate from code — not XMLs, not strings — making it type-safe and unit-testable!
On top of that, Appyx gives you a level of control over app navigation that you’ve never had before.
Model-driven navigation — Navigation behaviour is at your full control with history, state restoration, and the full power of Jetpack Compose transitions
The library comes with powerful navigation engines called NavModels.
You can use the ones from the library or implement your own.
It can be as simple as this back stack:
(The part controlled by the back stack can cover the whole screen or only part of it — it’s up to you)
Or it can be as custom as this carousel example:
You’re of course not limited to using these but rather they are just two examples.
What do they have in common?
The key point here is that both of the above examples are just different implementations of the same abstraction.
Under the hood, NavModels are just simple state machines. In fact, you can even write your own ones. With Appyx you gain full control over navigation: you’re free to define your own navigation states and represent them on the screen any way you want to — the framework will handle the rest.
How does this relate to Jetpack Compose Navigation?
Appyx is not a wrapper around Jetpack Compose Navigation — it’s something fundamentally different.
Appyx gives you model-driven navigation — it provides a genuine alternative with many additional benefits. You can find a more in-depth comparison in our follow-up article:
How does it work with other libraries?
Appyx is agnostic of any other architectural patterns like MVVM, MVI, MVP, etc. You can even use a different one in any of the Appyx Nodes!
The point here is that Appyx addresses the architectural problem of how to structure your application — but what you insert into any module of that structure is completely your choice!
Why we love Appyx
Appyx differs from the usual Activity/Fragment-based representations of apps.
But once it clicks, and you have an “Aha!” moment, it will give you a powerful new way of writing applications.
Here’s a short list that shows why we love Appyx so much. Each point here is worth a more in-depth look at in later articles:
- Model-driven navigation is a powerful concept to drive your app
- Type-safe dependencies between modules
- Type-safe arguments in navigation
- Business-logic-driven, stateful, unit-testable navigation
- Powerful transition animations
- A modern, clean approach to structuring your application
- Component reuse and composition for business logic
- … and many more
We hope you found this quick intro interesting! We’ll come back with more details in follow-up articles soon.
In the meantime, you can:
- Check out the GitHub repo: https://github.com/bumble-tech/appyx
- Check out the project page: https://bumble-tech.github.io/appyx/
- Launch the :app module in the library for a hands-on demo and be inspired!
- Follow us on Twitter @BumbleEng @ZsoltKocsi for more updates.
If you do adopt it into your apps, or just play around with it and come up with a cool new NavModel — reach out, we’d be happy to know!