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
Basic coachmark Multi-step sequence
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