Appyx is released! (1.0-alpha02)

Zsolt Kocsi
Bumble Tech
Published in
4 min readJul 22, 2022

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!

What’s 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 library (you can use it as either or both).

From the application 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 app into a tree structure of Nodes, and instead of a global navigation, using routing to manipulate the tree:

Appyx application tree with routing

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

What next?

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:

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!

--

--