Every coachmark library I tried felt incomplete—not customizable enough for what I needed.
Screenshot-based overlays that feel disconnected. Solid scrims that hide the actual UI. Z-index battles that never end.
I saw the gap. So I built Lumen.
Notice how the FAB remains tappable through the overlay:
Lumen renders real transparent cutouts in Jetpack Compose. Your buttons pulse. Your animations play. Your UI breathes—all visible through the spotlight.
What Makes Lumen Different
Genuine Transparent Cutouts
No screenshots. No faking it. Lumen renders real transparent regions in its scrim overlay.
Five Cutout Shapes
| Shape | Use Case |
|---|---|
Circle |
FABs, icon buttons |
RoundedRect |
Cards, text fields |
Squircle |
iOS-style, modern apps |
Star |
Gamification, achievements |
Rect |
Full-width elements |
Six Highlight Animations
Pulse · Glow · Ripple · Shimmer · Bounce · None
Multi-Step Sequences
Build complete onboarding flows with progress indicators. Users navigate forward and back at their own pace.
Dialog Coordination
Lumen automatically dismisses coachmarks when dialogs appear—no awkward z-index battles.
The API
Three steps. That's it.
1. Create a controller
val controller = rememberCoachmarkController()
2. Tag your target
CoachmarkHost(controller = controller) {
IconButton(
onClick = { /* ... */ },
modifier = Modifier.coachmarkTarget(controller, "settings")
) {
Icon(Icons.Default.Settings, "Settings")
}
}
3. Show the coachmark
controller.show(
CoachmarkTarget(
id = "settings",
title = "Settings",
description = "Customize your preferences here.",
shape = CutoutShape.Circle(),
)
)
What You Can Build
| Single Spotlight | Multi-Step Tours |
|---|---|
![]() |
![]() |
| Highlight a FAB with pulse animation | Full onboarding with progress dots |
The sample app includes 11 interactive demos covering animations, connectors, theming, LazyColumn support, and dialog coordination.
Get Started
implementation("io.github.aldefy:lumen:1.0.0-beta01")
Open source under Apache 2.0. Available on Maven Central.
GitHub · Docs · Sample App

