
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.
Cross-platform utilities for Kotlin Multiplatform. Zero configuration, works immediately on all platforms.
KMP Toolkit is available as modular libraries. Import only what you need:
kotlin {
sourceSets {
commonMain.dependencies {
// Clipboard utilities
implementation("io.github.mobilebytelabs:kmp-clipboard:0.1.0")
// Toast/Snackbar for Compose Multiplatform
implementation("io.github.mobilebytelabs:kmp-toast:0.1.0")
// In-App Update checking
implementation("io.github.mobilebytelabs:kmp-in-app-update:0.5.0")
}
}
}No setup required! All libraries automatically initialize on all platforms.
| Module | Artifact | Description | Version |
|---|---|---|---|
| kmp-clipboard | io.github.mobilebytelabs:kmp-clipboard |
Clipboard copy/paste/clear/observe | 0.1.0 |
| kmp-toast | io.github.mobilebytelabs:kmp-toast |
Toast/Snackbar for Compose Multiplatform | 0.1.0 |
| kmp-in-app-update | io.github.mobilebytelabs:kmp-in-app-update |
In-app update checking | 0.5.0 |
Each module is independently publishable and can be used standalone.
Copy, paste, check, and clear clipboard across all platforms.
import com.mobilebytelabs.kmptoolkit.clipboard.Clipboard
// Copy text
Clipboard.copy("Hello, World!")
// Paste text
val text = Clipboard.paste()
// Check if clipboard has text
val hasText = Clipboard.hasText()
// Clear clipboard
Clipboard.clear()Observe clipboard changes with automatic app foreground detection.
import com.mobilebytelabs.kmptoolkit.clipboard.createClipboardObserver
val observer = createClipboardObserver()
observer.startObserving()
// Collect changes via StateFlow
observer.clipboardContent.collect { content ->
println("Clipboard changed: $content")
}
observer.stopObserving()Cross-platform toast notifications for Compose apps.
import com.mobilebytelabs.kmptoolkit.toast.*
@Composable
fun MyScreen() {
val toastState = rememberToastHostState()
val scope = rememberCoroutineScope()
Box(modifier = Modifier.fillMaxSize()) {
Button(onClick = {
scope.launch {
toastState.showToast(
message = "Hello!",
duration = ToastDuration.SHORT,
style = ToastStyle.SUCCESS
)
}
}) {
Text("Show Toast")
}
ToastHost(hostState = toastState)
}
}Features:
Check for app updates with GitHub Releases, Supabase, or custom backends.
import com.mobilebytelabs.kmptoolkit.appupdate.*
// Check for updates using GitHub Releases
val config = AppUpdateConfig.builder()
.github(owner = "YourOrg", repo = "YourApp")
.build()
when (val result = AppUpdate.checkForUpdate(config)) {
is UpdateResult.Success -> {
if (result.updateInfo.isAvailable) {
// Update available!
println("New version: ${result.updateInfo.latestVersion}")
}
}
is UpdateResult.Error -> println("Error: ${result.message}")
is UpdateResult.NotSupported -> println("Not supported on this platform")
is UpdateResult.Cancelled -> println("Cancelled")
}| Platform | Clipboard | Toast | In-App Update |
|---|---|---|---|
| Android | ✅ | ✅ | ✅ (Play Store) |
| iOS | ✅ | ✅ | ✅ (App Store) |
| macOS | ✅ | ✅ | ✅ (App Store) |
| JVM | ✅ | ✅ | ✅ (Custom) |
| Linux | ✅ | ❌ | ✅ (Custom) |
| Windows | ✅ | ❌ | ✅ (Custom) |
| JavaScript | ✅ | ❌ | ❌ |
| WebAssembly | ✅ | ❌ | ❌ |
| tvOS | ❌ | ||
| watchOS | ❌ |
Legend: ✅ Full support |
| Topic | Link |
|---|---|
| Features | Wiki Home |
| Clipboard API | Clipboard |
| Toast API | Toast |
| In-App Update API | In-App Update |
| Development | |
| Getting Started | Development Guide |
| Adding Features | Adding New Features |
The samples/ directory contains example applications:
| Sample | Description |
|---|---|
sample-clipboard |
Clipboard + Observer + Toast integration |
sample-in-app-update |
In-App Update demo with GitHub Releases |
Run samples:
# Desktop (JVM)
./gradlew :samples:sample-clipboard:composeApp:run
# Android
./gradlew :samples:sample-clipboard:composeApp:installDebugWe welcome contributions! See CONTRIBUTING.md for guidelines.
cp -r cmp-library cmp-your-feature
cmp-library/TEMPLATE_README.md
settings.gradle.kts
samples/
Copyright 2025 MobileByteLabs
Licensed under the Apache License, Version 2.0
See LICENSE for details.
Cross-platform utilities for Kotlin Multiplatform. Zero configuration, works immediately on all platforms.
KMP Toolkit is available as modular libraries. Import only what you need:
kotlin {
sourceSets {
commonMain.dependencies {
// Clipboard utilities
implementation("io.github.mobilebytelabs:kmp-clipboard:0.1.0")
// Toast/Snackbar for Compose Multiplatform
implementation("io.github.mobilebytelabs:kmp-toast:0.1.0")
// In-App Update checking
implementation("io.github.mobilebytelabs:kmp-in-app-update:0.5.0")
}
}
}No setup required! All libraries automatically initialize on all platforms.
| Module | Artifact | Description | Version |
|---|---|---|---|
| kmp-clipboard | io.github.mobilebytelabs:kmp-clipboard |
Clipboard copy/paste/clear/observe | 0.1.0 |
| kmp-toast | io.github.mobilebytelabs:kmp-toast |
Toast/Snackbar for Compose Multiplatform | 0.1.0 |
| kmp-in-app-update | io.github.mobilebytelabs:kmp-in-app-update |
In-app update checking | 0.5.0 |
Each module is independently publishable and can be used standalone.
Copy, paste, check, and clear clipboard across all platforms.
import com.mobilebytelabs.kmptoolkit.clipboard.Clipboard
// Copy text
Clipboard.copy("Hello, World!")
// Paste text
val text = Clipboard.paste()
// Check if clipboard has text
val hasText = Clipboard.hasText()
// Clear clipboard
Clipboard.clear()Observe clipboard changes with automatic app foreground detection.
import com.mobilebytelabs.kmptoolkit.clipboard.createClipboardObserver
val observer = createClipboardObserver()
observer.startObserving()
// Collect changes via StateFlow
observer.clipboardContent.collect { content ->
println("Clipboard changed: $content")
}
observer.stopObserving()Cross-platform toast notifications for Compose apps.
import com.mobilebytelabs.kmptoolkit.toast.*
@Composable
fun MyScreen() {
val toastState = rememberToastHostState()
val scope = rememberCoroutineScope()
Box(modifier = Modifier.fillMaxSize()) {
Button(onClick = {
scope.launch {
toastState.showToast(
message = "Hello!",
duration = ToastDuration.SHORT,
style = ToastStyle.SUCCESS
)
}
}) {
Text("Show Toast")
}
ToastHost(hostState = toastState)
}
}Features:
Check for app updates with GitHub Releases, Supabase, or custom backends.
import com.mobilebytelabs.kmptoolkit.appupdate.*
// Check for updates using GitHub Releases
val config = AppUpdateConfig.builder()
.github(owner = "YourOrg", repo = "YourApp")
.build()
when (val result = AppUpdate.checkForUpdate(config)) {
is UpdateResult.Success -> {
if (result.updateInfo.isAvailable) {
// Update available!
println("New version: ${result.updateInfo.latestVersion}")
}
}
is UpdateResult.Error -> println("Error: ${result.message}")
is UpdateResult.NotSupported -> println("Not supported on this platform")
is UpdateResult.Cancelled -> println("Cancelled")
}| Platform | Clipboard | Toast | In-App Update |
|---|---|---|---|
| Android | ✅ | ✅ | ✅ (Play Store) |
| iOS | ✅ | ✅ | ✅ (App Store) |
| macOS | ✅ | ✅ | ✅ (App Store) |
| JVM | ✅ | ✅ | ✅ (Custom) |
| Linux | ✅ | ❌ | ✅ (Custom) |
| Windows | ✅ | ❌ | ✅ (Custom) |
| JavaScript | ✅ | ❌ | ❌ |
| WebAssembly | ✅ | ❌ | ❌ |
| tvOS | ❌ | ||
| watchOS | ❌ |
Legend: ✅ Full support |
| Topic | Link |
|---|---|
| Features | Wiki Home |
| Clipboard API | Clipboard |
| Toast API | Toast |
| In-App Update API | In-App Update |
| Development | |
| Getting Started | Development Guide |
| Adding Features | Adding New Features |
The samples/ directory contains example applications:
| Sample | Description |
|---|---|
sample-clipboard |
Clipboard + Observer + Toast integration |
sample-in-app-update |
In-App Update demo with GitHub Releases |
Run samples:
# Desktop (JVM)
./gradlew :samples:sample-clipboard:composeApp:run
# Android
./gradlew :samples:sample-clipboard:composeApp:installDebugWe welcome contributions! See CONTRIBUTING.md for guidelines.
cp -r cmp-library cmp-your-feature
cmp-library/TEMPLATE_README.md
settings.gradle.kts
samples/
Copyright 2025 MobileByteLabs
Licensed under the Apache License, Version 2.0
See LICENSE for details.