Skip to content

Compose previews that behave like product tooling

Annotate composables, run KSP, and browse a generated preview catalog with live parameters, grouping, tags, deep links, and browser-level runtime controls.

Compile-time registry

No reflection. Previews are discovered during KSP and emitted as a typed registry your app can host directly.

Interactive parameter panels

Use simple @PreviewParam annotations for common cases, then opt into richer DSL-backed controls when a single preview needs more surface area.

App-level runtime controls

Theme, locale, font scale, density, accessibility state, wrappers, source links, and per-preview overrides live in the browser config rather than ad hoc glue code.

Composeum is optimized for teams that already treat previews as a review and debugging tool, not just as IDE thumbnails.

  • Generated preview discovery from @ComposePreview
  • Group and tag browsing with type-based identity
  • Favorites and recent previews in the browser UI
  • Live parameter editing for strings, booleans, numbers, enums, Compose values, and custom widgets
  • Per-group and per-preview configuration overrides
  • Deep-linkable preview routes and source code links
@ComposePreview(
name = "Primary Button",
group = AppPreviews.Components::class,
)
@Composable
fun PrimaryButtonPreview(
@PreviewParam(label = "Label") label: String = "Continue",
) {
PrimaryButton(label = label)
}

The most direct setup is still Android-first:

  1. Add preview-annotation and preview-ksp to the module that declares previews.
  2. Add preview-runtime to the host app or debug tools module.
  3. Subclass ComposeumBrowserActivity and return the generated registry.

Use the pages in this site for the full setup, API shape, and advanced registry/config patterns.