# arkivanov/Decompose

Kotlin Multiplatform lifecycle-aware business logic components (aka BLoCs) with routing (navigation) and pluggable UI (Jetpack Compose, SwiftUI, JS React, etc.)

Repository: https://github.com/arkivanov/Decompose
Canonical: https://ross.abutalabs.com/products/decompose
Homepage: https://arkivanov.github.io/Decompose
Language: Kotlin
License: Apache-2.0
License Family: permissive
Topics: android, kotlin, kotlin-multiplatform, multiplatform, navigation
Last push: 2026-07-08T15:01:39+00:00

## Health v2 (maintenance only)
Score: 79/100 (v2, computed 2026-09-02T17:46:02.011165+00:00)
- activity 91, release rhythm 51, longevity 100
- inputs: {"age_days": 1727, "days_push": 56, "days_rel": 171, "gap_med": 110, "n_releases_24m": 6}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 2867, forks 108 (observed 2026-08-28T04:07:26.818549+00:00)

## What it is
Decompose is a Kotlin Multiplatform library for breaking code into tree-structured, lifecycle-aware business logic components (BLoCs) with routing/navigation and pluggable UI layers. It supports Jetpack/Multiplatform Compose, Android Views, SwiftUI, and Kotlin/React, keeping business logic testable and UI-agnostic.

## Use cases
- share navigation and business logic across Android and iOS in Kotlin Multiplatform
- structure an app into lifecycle-aware BLoC components with parent-child trees
- swap UI frameworks (Compose, SwiftUI, React) while keeping the same logic
- keep back-stack components alive in background without UI
- preserve and restore component state across configuration changes
- write pure multiplatform unit tests for business logic

## When to choose
- building a Kotlin Multiplatform app needing shared navigation and state
- you want strict separation of UI and business logic with pluggable UI
- you need lifecycle-aware components with state preservation and instance retention

## When to avoid
- building a single-platform app where simpler platform-native navigation suffices
- you are not using Kotlin or Kotlin Multiplatform
- you want a batteries-included UI toolkit rather than a logic/navigation library

## Facets
- artifact type: library
- maturity: active
- function: state-management, routing, middleware, ui-components
- domain: mobile-development, cross-platform, web-development, frontend
- platform: jvm, wasm
- tags: kotlin-multiplatform, bloc, navigation, jetpack-compose, swiftui, lifecycle-aware, mvi, android, ios, macos

## Member repositories
- arkivanov/Decompose (main) score 79

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:07:26.818549+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-30T07:36:05.172317+00:00, confidence not recorded.
  - readme: https://github.com/arkivanov/Decompose (fetched 2026-08-28T04:07:26.818549+00:00, sha 945eaae3bd8c)
  - homepage: https://arkivanov.github.io/Decompose (fetched 2026-08-29T09:51:42.771694+00:00, sha 0638e2723db1)
- Data as of 2026-08-30T08:39:29.467469+00:00.
