Architecture and state

Learn how to create a functioning app, using navigation, advanced state and side effects.


Compose phases


Learn how Jetpack Compose transforms data into UI.

Architecting your Compose UI


This guide focuses on how to implement the unidirectional data flow pattern in Compose, how to implement events and state holders, and how to work with ViewModels in Compose.

A Compose state of mind


Learn about Compose's state model and the Composition, when to hoist state and create state holders or use AAC ViewModels, and how to mutate state when you're outside the Composition safely so that these changes are tracked by Compose.

Where to hoist your state


Learn how and where to hoist state in Jetpack Compose.

Advanced state and side effects


Learn advanced concepts related to state and side effects APIs in Jetpack Compose. Learn how to create a state holder for complex stateful composables, create coroutines and call suspend functions from Compose code, and trigger side effects for different use cases.

Navigation best practices


Learn best practices for using Navigation Compose to set you up for expanding your navigation graph across multiple modules in a way that maintains type safety across all navigation calls.



Learn how to use the Jetpack Navigation library in Compose, navigate within your application, navigate with arguments, support deep-links, and test your navigation.

State holders and state production

Video Optional

Compose displays application data on the screen. But how is it done exactly? This video dives deep into the UI state production pipeline and state holders that manage UI complexity. Get to know the differences between UI and business logic, a ViewModel and a plain state holder class, state and events, and more! What is all that, when to use which, and how to do it.


Test what you've learned and earn your Architecture and state badge.