Skip to content

Latest commit

 

History

History
142 lines (105 loc) · 15 KB

File metadata and controls

142 lines (105 loc) · 15 KB

KMP Toolkit

Maven Central CI Kotlin License

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.jar artifact — IntelliJ / Android Studio surface it automatically in hover popups.

Modules

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.

Installation

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 LATEST with 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.

Platform Support

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

Inter-App Comms Suite

Three modules ship together as the inter-app communication suite — all share the same Compose-MP adapter pattern (core + -compose adapter):

Architecture docs: docs/inter-app-comms/CAPABILITY_MATRIX.md · ADR-09 (platform-impl-exits)

Sample App

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 Xcode

Per-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 / wasmJsBrowserDevelopmentRun downloads ~50MB of Skiko WASM assets on a cold cache. Subsequent runs are fast. If you hit OutOfMemoryError: GC overhead limit exceeded, ensure org.gradle.jvmargs=-Xmx4096M in gradle.properties (the repo default).

Contributing

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.

License

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.