Skip to content

What is PulseMVI?

PulseMVI is a lightweight MVI (Model-View-Intent) library for Compose Desktop. It extends the standard MVI pattern with two features designed specifically for Desktop's multi-Composable layouts:

  • Broadcast — deliver a typed message from a Container to all registered Stores at once
  • View Refresh — reconstruct the entire Compose view tree on demand without losing Store state

Why PulseMVI?

In Compose Desktop apps, a single window often contains multiple independent Composable sections, each with its own state. PulseMVI makes it easy to coordinate these sections without tightly coupling them.

┌─────────────────────────────────────┐
│           Window                    │
│  ┌──────────┐  ┌──────────────────┐ │
│  │ SideBar  │  │   Main Content   │ │
│  │ (Store A)│  │   (Store B)      │ │
│  └──────────┘  └──────────────────┘ │
│         PulseContainer              │
└─────────────────────────────────────┘

PulseContainer sits above both Stores. When you call container.broadcast(MyBroadcast.Sync), both Store A and Store B receive the message and can react independently.

Installation

Add JitPack to your repositories:

kotlin
// settings.gradle.kts
dependencyResolutionManagement {
    repositories {
        maven { url = uri("https://jitpack.io") }
    }
}

Then add the dependency:

kotlin
// build.gradle.kts
dependencies {
    implementation("com.github.kaleidot725:PulseMVI:<version>")
}

Replace <version> with the latest tag from GitHub Releases.

Requirements

RequirementVersion
Java17+
Kotlin2.0+
Compose Multiplatform1.6+

Next Steps

Released under the Apache 2.0 License.