Android
The three Android modules: Compose animation foundations, advanced graphics with AGSL and Material 3 Expressive, and Compose Multiplatform patterns.
All documentation
Detected from your Gradle files. Compose alone loads two modules; Compose plus the Kotlin Multiplatform plugin loads three.
compose-motion
Loads whenever Compose is detected.
An API decision tree first, then the spring API with opinionated defaults, because
picking stiffness and damping ratio by feel is how a project ends up with eleven
different springs. Then the working set: animate*AsState for the common case,
AnimatedVisibility for mount and unmount, AnimatedContent for state-driven
layout swaps, Crossfade for simple fades, updateTransition for coordinating
several properties off one state, Animatable for manual control,
SharedTransitionLayout from Compose 1.7 for hero animations, and
InfiniteTransition for loops. Plus a quick map of the gesture modifiers.
The anti-patterns come in wrong-then-right pairs, and the one that matters most is
size animation: animateDpAsState on a height triggers a full layout pass every
frame, where Modifier.graphicsLayer { translationY = ... } does not.
Reduced motion on Android has no first-class API, so the module carries a helper
built on Settings.Global.ANIMATOR_DURATION_SCALE, and the audit treats its
absence in an animated project as critical.
The stack-specific audit: recomposition counts through the Layout Inspector or
Modifier.recomposeHighlighter, frame timing through Macrobenchmark on a
mid-range baseline device (targeting under 16.67ms at 60fps, under 8.33ms at
120fps), Modifier.semantics on custom interactive components for TalkBack, and
baseline profiles for production builds.
compose-graphics
Loads when the scope is full or the thesis is advanced. Three domains.
Material 3 Expressive, including its motion physics and MotionScheme, which
is the right register for hero and high-impact surfaces rather than for everything.
AGSL runtime shaders on Android 13 and up, which always means a static fallback below that version rather than a broken surface.
Canvas and DrawScope for generative work, plus graphicsLayer effects.
compose-multiplatform
Loads when the Kotlin Multiplatform and JetBrains Compose plugins are both present.
It starts by separating KMP from CMP, because conflating them is the source of most
confusion in this space. Then project structure, the expect/actual pattern
including its composable form, LocalDensity across platforms, LocalConfiguration
and platform-aware UI, fonts through Compose Resources, and interop in both
directions: SwiftUI inside Compose on iOS, and Compose inside a SwiftUI or UIKit
view.
It ends with what does not work, which in a multiplatform target is the section that saves the most time.
Legacy projects
If the scan finds XML layouts, classic Activities or setContentView(R.layout.*)
alongside Compose, exactly one question is asked: stay in pure Compose, or
integrate into a legacy screen?
Choosing integration produces an AndroidView bridge that exposes the modern code
inside the legacy screen. New legacy code is never generated: no layout XML, no
setContentView.