
Master Android's modern declarative UI toolkit from fundamentals to advanced animations and custom components
Build better apps faster with Jetpack Compose
Jetpack Compose is Android’s recommended modern toolkit for building native UI. It simplifies and accelerates UI development on Android. Quickly bring your app to life with less code, powerful tools, and intuitive Kotlin APIs.
Compose Fundamentals
Core concepts of declarative UI and basic Compose building blocks
Dive into the essentials of Jetpack Compose, understanding how it revolutionizes Android UI development with declarative paradigms.
- codeDeclarative vs Imperative UI
- settingsCompose Setup and First Composable
- functionsComposable Functions and @Composable
- buildCompose Compiler and Runtime
- previewPreview and Tooling Support
- refreshComposition and Recomposition
- play_arrowPractice: Hello Compose App
Basic UI Components
Essential Compose components for building user interfaces
Explore foundational UI elements like text, buttons, and inputs to craft intuitive and accessible interfaces.
- text_fieldsText and Typography
- touch_appButtons and Interactive Elements
- imageImages and Icons
- editTextFields and Input Components
- card_membershipCards and Surface Components
- removeDividers and Spacers
- accessibilityComponent Accessibility
- play_arrowPractice: Basic UI Components
Layouts and Arrangement
Master layout composables and create responsive designs
Learn to structure UIs with rows, columns, and modifiers for adaptive and performant layouts across devices.
- view_columnColumn and Row Basics
- crop_squareBox Layout and Positioning
- format_align_leftArrangement and Alignment
- tuneModifier System Deep Dive
- format_indent_increasePadding, Spacing, and Sizing (no margins in Compose)
- grid_onConstraintLayout in Compose
- phonelinkResponsive Design Patterns
- buildCustom Layout Composables
- speedLayout Performance Considerations
- play_arrowPractice: Complex Layout Design
State Management
Handle state effectively in Compose applications
Master state hoisting, derived states, and integration with ViewModels for robust, reactive UIs.
- infoState in Compose Fundamentals
- memoryremember and mutableStateOf
- saverememberSaveable & process-death: SavedStateHandle patterns
- trending_upState Hoisting Patterns
- calculatederivedStateOf and Computed State
- developer_boardViewModel Integration
- sync_altStateFlow/Flow (and when to keep LiveData)
- backupState Restoration and Saving
- layersComplex State Management Patterns
- thumb_upState Management Best Practices
- play_arrowPractice: State-Driven UI
Lists and Lazy Components
Build efficient scrollable lists and grids
Optimize large datasets with lazy loading, pagination, and sticky headers for smooth scrolling experiences.
- listLazyColumn and LazyRow Basics
- grid_viewLazyVerticalGrid and LazyHorizontalGrid
- vpn_keyList Item Keys and Performance
- sticky_note_2Sticky Headers and Sections
- refreshPull to Refresh Implementation
- pageviewPaging 3 + Lazy lists (load states, separators, refresh)
- dashboardCustom List Layouts
- play_arrowPractice: Advanced List Implementation
Theming and Styling
Create beautiful and consistent visual designs
Harness Material Design 3 for dynamic colors, typography, and shapes to build cohesive app themes.
- styleMaterial Design 3 in Compose
- color_lensColor Systems and Palettes
- format_sizeTypography and Text Styling
- rounded_cornerShape System and Custom Shapes
- nights_stayDark Theme Implementation
- tuneDynamic Color and Material You
- brushCustom Theme Creation
- previewTheme Testing and Previews
- play_arrowPractice: Custom Theme Design
Navigation and Screen Management
Implement navigation patterns and screen transitions
Navigate seamlessly between screens with back handling, deep links, and multi-stack support.
- exploreNavigation Component for Compose
- routerNavHost and NavController Setup
- routeRoute Parameters and Arguments
- arrow_backPredictive Back + BackHandler, state restore, and multiple back stacks
- tabBottom Navigation Implementation
- menuDrawer Navigation and Rails
- linkDeep Linking and Navigation
- bug_reportNavigation Testing Strategies
- play_arrowPractice: Multi-Screen Navigation
Animations and Transitions
Create smooth animations and delightful user experiences
Animate state changes, content transitions, and gestures to make your app feel alive and responsive.
- movieAnimation Fundamentals in Compose
- play_circleanimate*AsState Functions
- swap_horizTransition API and States
- visibilityAnimatedVisibility and Enter/Exit
- content_copyAnimatedContent for Content Changes
- buildCustom Animations with Animatable
- gestureGesture-Based Animations
- shareShared Element Transitions
- speedAnimation Performance Tips
- play_arrowPractice: Advanced Animation Showcase
Custom Composables and Components
Build reusable custom components and advanced UI patterns
Design slot-based APIs, custom modifiers, and drawing for a scalable component library.
- addCreating Custom Composables
- apiComposable APIs and Parameters
- view_quiltSlot APIs and Content Composables
- tuneCustom Modifier APIs (+ Modifier.Node in modern Compose)
- brushCanvas and Custom Drawing
- library_booksComponent Libraries and Design Systems
- bug_reportComposable Testing Strategies
- play_arrowPractice: Custom Component Library
Gestures and Input Handling
Handle touch gestures, drag and drop, and complex interactions
Detect and respond to user inputs with precision, including nested scrolling and multi-touch support.
- mousePointer Input and Touch Events
- drag_indicatorDrag and Drop Implementation
- arrow_downwardNested scroll & BringIntoView: coordinating scroll behaviors
- swipeSwipe Gestures and Dismissal
- zoom_inMulti-touch and Zoom Gestures
- gestureCustom Gesture Detection
- accessibilityAccessibility and Gesture Support
- play_arrowPractice: Gesture-Rich Interface
Integration and Interoperability
Integrate Compose with existing View system and third-party libraries
Bridge Compose with legacy Views, fragments, and external SDKs for hybrid app migrations.
- view_quiltCompose in View-based Apps
- androidView in Compose with AndroidView
- crop_dinFragment Integration Patterns
- languageWebView and Maps Integration
- extensionThird-party Library Adaptation
- import_exportMigration Strategies
- play_arrowPractice: Hybrid App Development
Testing Compose UIs
Comprehensive testing strategies for Compose applications
Write reliable tests for semantics, interactions, and screenshots using Compose's testing toolkit.
- infoCompose Testing Fundamentals
- ruleComposeTestRule and Test Setup
- searchFinding and Interacting with Nodes
- check_circleAssertions and Verifications
- hourglass_emptySemantics matchers, idling, and flake-proof waits (runOnIdle, waitUntil)
- swap_horizTesting State and Interactions
- photo_cameraScreenshot Testing
- thumb_upTesting Best Practices
- play_arrowPractice: Comprehensive Test Suite
Performance Optimization
Optimize Compose performance and handle complex scenarios
Profile recompositions, ensure stability, and tune memory for high-performance apps.
- infoCompose Performance Fundamentals
- refreshRecomposition Optimization: stable data classes, equals(), derivedStateOf
- securityStability and Immutability
- tuneLazyList Performance Tuning
- build@Stable/@Immutable, snapshotFlow pitfalls, and tracing recompositions (Layout Inspector & compiler metrics)
- memoryMemory Management in Compose
- analyticsPerformance Profiling Tools
- warningCommon Performance Pitfalls
- play_arrowPractice: Performance Optimization
Advanced Topics and Best Practices
Explore advanced Compose features and establish best practices
Capstone with multiplatform, accessibility, i18n, and a full app project to solidify expertise.
- webCompose Multiplatform Overview
- account_treeArchitecture Patterns with Compose
- accessibilityAccessibility in Compose
- translateInternationalization and Localization
- bar_chartCompose Compiler Metrics
- trending_upFuture of Compose Development
- play_arrowFinal Project: Complete Compose App
Nature of Composable Functions
Formal properties and why Compose can re-run code safely
Unpack the idempotent, pure nature of composables and their restartable execution model.
- infoComposable function properties: idempotent, side-effect-free, restartable
- callCalling context & colored functions; similarities with suspend
- savePositional memoization & why parameter order matters
- editExercise: Rewrite a side-effecting composable into a pure one
The Compose Compiler
What the Kotlin compiler plugin generates and how stability is inferred
Explore IR lowering, stability checks, and memoization in the Compose Kotlin compiler plugin.
- noteAnnotations, IR lowering, and injecting the Composer
- tuneStability inference, default params, and control-flow groups
- saveLambda memoization & comparison propagation
- infoLive literals, version checks, klib/decoy generation (overview)
- bug_reportExercise: Use compiler metrics to spot unnecessary recompositions
Runtime, Slot Table & UI Materialization
How the Composer builds, updates, and draws the UI tree
Delve into slot tables, appliers, and measurement phases that power Compose's runtime.
- table_chartSlot table, groups, reads/writes; recompose scopes
- developer_boardAppliers, LayoutNode lifecycle, and modifier chains
- straightenMeasuring policies, intrinsic measurements, constraints
- accessibilitySemantics: merged vs unmerged trees & accessibility signals
- bug_reportExercise: Instrument a custom Layout + measure pass logging
Snapshot State & Concurrency (MVCC)
StateObjects/Records, snapshots, and conflict merging
Understand MVCC for thread-safe state observation and conflict resolution in snapshots.
- infoWhat snapshot state is; MVCC model & snapshot tree
- syncObserving reads/writes, nested snapshots, threading
- merge_typeChange propagation & merging write conflicts
- bug_reportExercise: Diagnose a missed snapshot read in a list screen
Smart Recomposition
Skippability, keys, stability, and concurrent recomposition
Optimize skips with keys and stability to minimize unnecessary UI updates.
- skip_nextSkips via stability & equality; when comparison fails
- vpn_keyKeys, derivedStateOf, and minimizing invalidations
- syncRecomposer & concurrent recomposition (pitfalls & patterns)
- bug_reportExercise: Make a dashboard skippable without sacrificing correctness
Effects & Lifecycle
SideEffect, DisposableEffect, LaunchedEffect, rememberUpdatedState-what actually happens
Key effects correctly to avoid leaks and stale closures in composable lifecycles.
- hourglass_emptyNon-suspended vs suspended effects; lifecycle semantics
- vpn_keyKeying effects correctly; avoiding stale closures
- extensionAdapters for 3rd-party libs (e.g., listeners, callbacks)
- editExercise: Refactor side-effects out of composables safely