
Modular utilities for clipboard operations, Compose toast/snackbar, and in‑app update checks — zero‑config auto-initialization, clipboard observer with foreground detection, customizable toast durations, positions, styles.
A collection of production-ready Kotlin Multiplatform libraries — one dependency per feature, works out of the box on every platform.
📖 Full usage docs: Docs site · Wiki · 🚀 Releases · 📦 Maven Central
The Docs site ships an API reference for every module via Dokka HTML bundled inside each Maven Central
-javadoc.jarartifact — IntelliJ / Android Studio surface it automatically in hover popups.
All modules ship together at the unified kmptoolkit.version. Click a module to open its Wiki page (install + usage + per-platform behaviour).
| Module | Artifact | Description | Latest |
|---|---|---|---|
| cmp-clipboard | io.github.mobilebytelabs:cmp-clipboard |
Copy, paste, observe, monitor, URL detect | |
| cmp-bubble | io.github.mobilebytelabs:cmp-bubble |
Floating UI, bubbles, and notifications | |
| cmp-toast | io.github.mobilebytelabs:cmp-toast |
Toast / Snackbar for Compose Multiplatform | |
| cmp-open-url | io.github.mobilebytelabs:cmp-open-url |
Open URLs — browser, email, maps, phone, SMS | |
| cmp-deep-link | io.github.mobilebytelabs:cmp-deep-link |
Deep link handling across all KMP targets | |
| cmp-in-app-update | io.github.mobilebytelabs:cmp-in-app-update |
In-app update checking (GitHub / App Store / Play) | |
| cmp-remote-config | io.github.mobilebytelabs:cmp-remote-config |
Remote config and feature flags | |
| cmp-product-tickets | io.github.mobilebytelabs:cmp-product-tickets |
In-app feedback and support tickets | |
| cmp-network-monitor | io.github.mobilebytelabs:cmp-network-monitor |
Reactive network connectivity — all 21 KMP targets | |
| cmp-network-monitor-compose | io.github.mobilebytelabs:cmp-network-monitor-compose |
Compose extensions for network monitoring | |
| cmp-pdf-generator | io.github.mobilebytelabs:cmp-pdf-generator |
Cross-platform PDF generation (HTML / Markdown / DSL → File / Bytes / URI / Share / Print) | |
| cmp-firebase-analytics | io.github.mobilebytelabs:cmp-firebase-analytics |
Firebase Analytics + performance tracking | |
| cmp-share | io.github.mobilebytelabs:cmp-share |
Cross-platform share sheet — text / URL / image / file / multi | |
| cmp-share-compose | io.github.mobilebytelabs:cmp-share-compose |
@Composable rememberShareLauncher() + Material 3 ShareSheet / ShareButton |
|
| cmp-intent-launcher | io.github.mobilebytelabs:cmp-intent-launcher |
Typed Android-Intent builder + ActivityResult contracts + lifecycle-free SystemIntents | |
| cmp-intent-launcher-compose | io.github.mobilebytelabs:cmp-intent-launcher-compose |
@Composable rememberIntentLauncher() + IntentPickerDialog / Sheet |
|
| cmp-app-intents | io.github.mobilebytelabs:cmp-app-intents |
Declarative App Intents DSL — SiriKit Shortcuts + Android Assistant BIIs | |
| cmp-app-intents-compose | io.github.mobilebytelabs:cmp-app-intents-compose |
@Composable AppIntentsRegistration + Material 3 AppIntentsRegistry |
Each module is completely independent — add only what your project needs.
All modules ship together at the unified kmptoolkit version. Declare it once in your version catalog, then add only the libraries you need:
# gradle/libs.versions.toml
[versions]
kmptoolkit = "LATEST" # see Maven Central badge in the Modules table above
[libraries]
cmp-clipboard = { module = "io.github.mobilebytelabs:cmp-clipboard", version.ref = "kmptoolkit" }
cmp-bubble = { module = "io.github.mobilebytelabs:cmp-bubble", version.ref = "kmptoolkit" }
cmp-toast = { module = "io.github.mobilebytelabs:cmp-toast", version.ref = "kmptoolkit" }
cmp-open-url = { module = "io.github.mobilebytelabs:cmp-open-url", version.ref = "kmptoolkit" }
cmp-deep-link = { module = "io.github.mobilebytelabs:cmp-deep-link", version.ref = "kmptoolkit" }
cmp-in-app-update = { module = "io.github.mobilebytelabs:cmp-in-app-update", version.ref = "kmptoolkit" }
cmp-remote-config = { module = "io.github.mobilebytelabs:cmp-remote-config", version.ref = "kmptoolkit" }
cmp-product-tickets = { module = "io.github.mobilebytelabs:cmp-product-tickets", version.ref = "kmptoolkit" }
cmp-network-monitor = { module = "io.github.mobilebytelabs:cmp-network-monitor", version.ref = "kmptoolkit" }
cmp-pdf-generator = { module = "io.github.mobilebytelabs:cmp-pdf-generator", version.ref = "kmptoolkit" }
cmp-firebase-analytics = { module = "io.github.mobilebytelabs:cmp-firebase-analytics", version.ref = "kmptoolkit" }
cmp-share = { module = "io.github.mobilebytelabs:cmp-share", version.ref = "kmptoolkit" }
cmp-intent-launcher = { module = "io.github.mobilebytelabs:cmp-intent-launcher", version.ref = "kmptoolkit" }
cmp-app-intents = { module = "io.github.mobilebytelabs:cmp-app-intents", version.ref = "kmptoolkit" }
# Compose adapter modules (optional)
cmp-share-compose = { module = "io.github.mobilebytelabs:cmp-share-compose", version.ref = "kmptoolkit" }
cmp-intent-launcher-compose = { module = "io.github.mobilebytelabs:cmp-intent-launcher-compose", version.ref = "kmptoolkit" }
cmp-app-intents-compose = { module = "io.github.mobilebytelabs:cmp-app-intents-compose", version.ref = "kmptoolkit" }
cmp-network-monitor-compose = { module = "io.github.mobilebytelabs:cmp-network-monitor-compose", version.ref = "kmptoolkit" }Then reference any library from commonMain via the standard implementation(libs.cmp.<name>) pattern.
💡 Replace
LATESTwith the version shown in the Maven Central badge at the top of this README — single source of truth, single line to bump when a new release ships.
The toolkit targets every platform Kotlin Multiplatform supports. Per-module coverage varies — see each module's Wiki page for the authoritative matrix. Quick reference:
| Platform | Targets | Modules with full coverage |
|---|---|---|
| Android | androidTarget |
All |
| iOS |
iosX64, iosArm64, iosSimulatorArm64
|
All |
| macOS |
macosX64, macosArm64
|
All except bubble, product-tickets |
| JVM Desktop | jvm |
All |
| JS |
js (browser + node) |
All except bubble, toast, in-app-update, product-tickets |
| wasmJs |
wasmJs (browser + node) |
All except bubble, toast, in-app-update, product-tickets |
| Linux |
linuxX64, linuxArm64
|
clipboard, open-url, deep-link, in-app-update, remote-config, network-monitor, share, intent-launcher, app-intents |
| Windows | mingwX64 |
Same as Linux |
| tvOS / watchOS |
tvosX64/Arm64/SimulatorArm64, watchosX64/Arm32/Arm64/SimulatorArm64/DeviceArm64
|
network-monitor, share (limited), app-intents (manifest-only) |
📊 Full per-module × per-target matrix: Wiki › Platform Matrix · docs/inter-app-comms/CAPABILITY_MATRIX.md
Three modules ship together as the inter-app communication suite — all share the same Compose-MP adapter pattern (core + -compose adapter):
Intent builder + lifecycle-free SystemIntents (settings + save dialog) + Composable launchersArchitecture docs: docs/inter-app-comms/CAPABILITY_MATRIX.md · ADR-09 (platform-impl-exits)
sample-toolkit is the unified catalog app — every published cmp-* module wired in one Compose Multiplatform project. Pick a module from the catalog UI to launch its dedicated showcase. Same app, every platform:
# Desktop (JVM)
./gradlew :samples:sample-toolkit:composeApp:run
# Android
./gradlew :samples:sample-toolkit:androidApp:installDebug
# Web (browser — JS + wasmJs)
./gradlew :samples:sample-toolkit:composeApp:jsBrowserDevelopmentRun
./gradlew :samples:sample-toolkit:composeApp:wasmJsBrowserDevelopmentRun
# iOS — open samples/sample-toolkit/iosApp in XcodePer-module standalone samples (one per library) live alongside sample-toolkit under samples/ — useful if you want to study a single module in isolation.
First-run note (web targets):
jsBrowserDevelopmentRun/wasmJsBrowserDevelopmentRundownloads ~50MB of Skiko WASM assets on a cold cache. Subsequent runs are fast. If you hitOutOfMemoryError: GC overhead limit exceeded, ensureorg.gradle.jvmargs=-Xmx4096Mingradle.properties(the repo default).
New module template lives at cmp-library/ — copy + rename + add to settings.gradle.kts + ship a sample under samples/. Full walkthrough: Wiki › Adding New Features · CONTRIBUTING.md.
Copyright 2026 MobileByteLabs
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
See LICENSE for details.
A collection of production-ready Kotlin Multiplatform libraries — one dependency per feature, works out of the box on every platform.
📖 Full usage docs: Docs site · Wiki · 🚀 Releases · 📦 Maven Central
The Docs site ships an API reference for every module via Dokka HTML bundled inside each Maven Central
-javadoc.jarartifact — IntelliJ / Android Studio surface it automatically in hover popups.
All modules ship together at the unified kmptoolkit.version. Click a module to open its Wiki page (install + usage + per-platform behaviour).
| Module | Artifact | Description | Latest |
|---|---|---|---|
| cmp-clipboard | io.github.mobilebytelabs:cmp-clipboard |
Copy, paste, observe, monitor, URL detect | |
| cmp-bubble | io.github.mobilebytelabs:cmp-bubble |
Floating UI, bubbles, and notifications | |
| cmp-toast | io.github.mobilebytelabs:cmp-toast |
Toast / Snackbar for Compose Multiplatform | |
| cmp-open-url | io.github.mobilebytelabs:cmp-open-url |
Open URLs — browser, email, maps, phone, SMS | |
| cmp-deep-link | io.github.mobilebytelabs:cmp-deep-link |
Deep link handling across all KMP targets | |
| cmp-in-app-update | io.github.mobilebytelabs:cmp-in-app-update |
In-app update checking (GitHub / App Store / Play) | |
| cmp-remote-config | io.github.mobilebytelabs:cmp-remote-config |
Remote config and feature flags | |
| cmp-product-tickets | io.github.mobilebytelabs:cmp-product-tickets |
In-app feedback and support tickets | |
| cmp-network-monitor | io.github.mobilebytelabs:cmp-network-monitor |
Reactive network connectivity — all 21 KMP targets | |
| cmp-network-monitor-compose | io.github.mobilebytelabs:cmp-network-monitor-compose |
Compose extensions for network monitoring | |
| cmp-pdf-generator | io.github.mobilebytelabs:cmp-pdf-generator |
Cross-platform PDF generation (HTML / Markdown / DSL → File / Bytes / URI / Share / Print) | |
| cmp-firebase-analytics | io.github.mobilebytelabs:cmp-firebase-analytics |
Firebase Analytics + performance tracking | |
| cmp-share | io.github.mobilebytelabs:cmp-share |
Cross-platform share sheet — text / URL / image / file / multi | |
| cmp-share-compose | io.github.mobilebytelabs:cmp-share-compose |
@Composable rememberShareLauncher() + Material 3 ShareSheet / ShareButton |
|
| cmp-intent-launcher | io.github.mobilebytelabs:cmp-intent-launcher |
Typed Android-Intent builder + ActivityResult contracts + lifecycle-free SystemIntents | |
| cmp-intent-launcher-compose | io.github.mobilebytelabs:cmp-intent-launcher-compose |
@Composable rememberIntentLauncher() + IntentPickerDialog / Sheet |
|
| cmp-app-intents | io.github.mobilebytelabs:cmp-app-intents |
Declarative App Intents DSL — SiriKit Shortcuts + Android Assistant BIIs | |
| cmp-app-intents-compose | io.github.mobilebytelabs:cmp-app-intents-compose |
@Composable AppIntentsRegistration + Material 3 AppIntentsRegistry |
Each module is completely independent — add only what your project needs.
All modules ship together at the unified kmptoolkit version. Declare it once in your version catalog, then add only the libraries you need:
# gradle/libs.versions.toml
[versions]
kmptoolkit = "LATEST" # see Maven Central badge in the Modules table above
[libraries]
cmp-clipboard = { module = "io.github.mobilebytelabs:cmp-clipboard", version.ref = "kmptoolkit" }
cmp-bubble = { module = "io.github.mobilebytelabs:cmp-bubble", version.ref = "kmptoolkit" }
cmp-toast = { module = "io.github.mobilebytelabs:cmp-toast", version.ref = "kmptoolkit" }
cmp-open-url = { module = "io.github.mobilebytelabs:cmp-open-url", version.ref = "kmptoolkit" }
cmp-deep-link = { module = "io.github.mobilebytelabs:cmp-deep-link", version.ref = "kmptoolkit" }
cmp-in-app-update = { module = "io.github.mobilebytelabs:cmp-in-app-update", version.ref = "kmptoolkit" }
cmp-remote-config = { module = "io.github.mobilebytelabs:cmp-remote-config", version.ref = "kmptoolkit" }
cmp-product-tickets = { module = "io.github.mobilebytelabs:cmp-product-tickets", version.ref = "kmptoolkit" }
cmp-network-monitor = { module = "io.github.mobilebytelabs:cmp-network-monitor", version.ref = "kmptoolkit" }
cmp-pdf-generator = { module = "io.github.mobilebytelabs:cmp-pdf-generator", version.ref = "kmptoolkit" }
cmp-firebase-analytics = { module = "io.github.mobilebytelabs:cmp-firebase-analytics", version.ref = "kmptoolkit" }
cmp-share = { module = "io.github.mobilebytelabs:cmp-share", version.ref = "kmptoolkit" }
cmp-intent-launcher = { module = "io.github.mobilebytelabs:cmp-intent-launcher", version.ref = "kmptoolkit" }
cmp-app-intents = { module = "io.github.mobilebytelabs:cmp-app-intents", version.ref = "kmptoolkit" }
# Compose adapter modules (optional)
cmp-share-compose = { module = "io.github.mobilebytelabs:cmp-share-compose", version.ref = "kmptoolkit" }
cmp-intent-launcher-compose = { module = "io.github.mobilebytelabs:cmp-intent-launcher-compose", version.ref = "kmptoolkit" }
cmp-app-intents-compose = { module = "io.github.mobilebytelabs:cmp-app-intents-compose", version.ref = "kmptoolkit" }
cmp-network-monitor-compose = { module = "io.github.mobilebytelabs:cmp-network-monitor-compose", version.ref = "kmptoolkit" }Then reference any library from commonMain via the standard implementation(libs.cmp.<name>) pattern.
💡 Replace
LATESTwith the version shown in the Maven Central badge at the top of this README — single source of truth, single line to bump when a new release ships.
The toolkit targets every platform Kotlin Multiplatform supports. Per-module coverage varies — see each module's Wiki page for the authoritative matrix. Quick reference:
| Platform | Targets | Modules with full coverage |
|---|---|---|
| Android | androidTarget |
All |
| iOS |
iosX64, iosArm64, iosSimulatorArm64
|
All |
| macOS |
macosX64, macosArm64
|
All except bubble, product-tickets |
| JVM Desktop | jvm |
All |
| JS |
js (browser + node) |
All except bubble, toast, in-app-update, product-tickets |
| wasmJs |
wasmJs (browser + node) |
All except bubble, toast, in-app-update, product-tickets |
| Linux |
linuxX64, linuxArm64
|
clipboard, open-url, deep-link, in-app-update, remote-config, network-monitor, share, intent-launcher, app-intents |
| Windows | mingwX64 |
Same as Linux |
| tvOS / watchOS |
tvosX64/Arm64/SimulatorArm64, watchosX64/Arm32/Arm64/SimulatorArm64/DeviceArm64
|
network-monitor, share (limited), app-intents (manifest-only) |
📊 Full per-module × per-target matrix: Wiki › Platform Matrix · docs/inter-app-comms/CAPABILITY_MATRIX.md
Three modules ship together as the inter-app communication suite — all share the same Compose-MP adapter pattern (core + -compose adapter):
Intent builder + lifecycle-free SystemIntents (settings + save dialog) + Composable launchersArchitecture docs: docs/inter-app-comms/CAPABILITY_MATRIX.md · ADR-09 (platform-impl-exits)
sample-toolkit is the unified catalog app — every published cmp-* module wired in one Compose Multiplatform project. Pick a module from the catalog UI to launch its dedicated showcase. Same app, every platform:
# Desktop (JVM)
./gradlew :samples:sample-toolkit:composeApp:run
# Android
./gradlew :samples:sample-toolkit:androidApp:installDebug
# Web (browser — JS + wasmJs)
./gradlew :samples:sample-toolkit:composeApp:jsBrowserDevelopmentRun
./gradlew :samples:sample-toolkit:composeApp:wasmJsBrowserDevelopmentRun
# iOS — open samples/sample-toolkit/iosApp in XcodePer-module standalone samples (one per library) live alongside sample-toolkit under samples/ — useful if you want to study a single module in isolation.
First-run note (web targets):
jsBrowserDevelopmentRun/wasmJsBrowserDevelopmentRundownloads ~50MB of Skiko WASM assets on a cold cache. Subsequent runs are fast. If you hitOutOfMemoryError: GC overhead limit exceeded, ensureorg.gradle.jvmargs=-Xmx4096Mingradle.properties(the repo default).
New module template lives at cmp-library/ — copy + rename + add to settings.gradle.kts + ship a sample under samples/. Full walkthrough: Wiki › Adding New Features · CONTRIBUTING.md.
Copyright 2026 MobileByteLabs
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
See LICENSE for details.