KMPTaskManager
3.0.0indexedUnified API for scheduling and managing background tasks—one‑off, periodic, exact and chained jobs—featuring advanced triggers, structured logging, event‑driven completion, demo UI and docs.
Unified API for scheduling and managing background tasks—one‑off, periodic, exact and chained jobs—featuring advanced triggers, structured logging, event‑driven completion, demo UI and docs.
📦 MOVED TO NEW HOME: This library has been superseded by KMP WorkManager.
Please migrate to the new library for better iOS reliability, thread-safety, and enterprise features.
The original vietnguyentuan2019/KMPTaskManager library has evolved into a production-ready, enterprise-grade solution under the Brewkits organization. Here's what you gain by migrating:
Map<String, Any>kotlinx.serialization with reified inline functionsWorkerProgress with TaskProgressBus for live UI updatesOld (vietnguyentuan2019/KMPTaskManager):
dependencies {
implementation("io.kmp.worker:kmpworker:0.x.x")
}
New (brewkits/kmpworkmanager):
kotlin {
sourceSets {
commonMain.dependencies {
implementation("io.brewkits:kmpworkmanager:1.1.0")
}
}
}
Old:
import io.kmp.worker.BackgroundTaskScheduler
import io.kmp.worker.domain.TaskTrigger
import io.kmp.worker.domain.Constraints
New:
import io.brewkits.kmpworkmanager.background.domain.BackgroundTaskScheduler
import io.brewkits.kmpworkmanager.background.domain.TaskTrigger
import io.brewkits.kmpworkmanager.background.domain.Constraints
The new library uses a cleaner factory pattern:
Old:
class MyWorkerFactory : WorkerFactory {
override fun createWorker(className: String): Worker? {
// ...
}
}
New (Android):
class MyWorkerFactory : AndroidWorkerFactory {
override fun createWorker(workerClassName: String): AndroidWorker? {
return when (workerClassName) {
"SyncWorker" -> SyncWorker()
else -> null
}
}
}
New (iOS):
class MyWorkerFactory : IosWorkerFactory {
override fun createWorker(workerClassName: String): IosWorker? {
return when (workerClassName) {
"SyncWorker" -> SyncWorker()
else -> null
}
}
}
Old:
startKoin {
modules(workerModule(MyWorkerFactory()))
}
New (Android):
startKoin {
androidContext(this@MyApp)
modules(kmpWorkerModule(
workerFactory = MyWorkerFactory()
))
}
New (iOS):
KoinModuleKt.doInitKoinIos(workerFactory: MyWorkerFactory())
Enable Progress Tracking:
class DownloadWorker(
private val progressListener: ProgressListener?
) : AndroidWorker {
override suspend fun doWork(input: String?): Boolean {
progressListener?.onProgressUpdate(
WorkerProgress(
progress = 50,
message = "Downloaded 5MB / 10MB"
)
)
return
}
}
Listen to Progress in UI:
@Composable
fun DownloadScreen() {
val progressFlow = TaskProgressBus.events
.filterIsInstance<TaskProgressEvent>()
.filter { it.taskId == "download-task" }
val progress by progressFlow.collectAsState(initial = null)
LinearProgressIndicator(
progress = (progress?.progress?.progress ?: 0) / 100f
)
}
TaskTrigger.StorageLow → Use Constraints(systemConstraints = setOf(SystemConstraint.ALLOW_LOW_STORAGE))TaskTrigger.BatteryLow → Use Constraints(systemConstraints = setOf(SystemConstraint.ALLOW_LOW_BATTERY))TaskTrigger.DeviceIdle → Use Constraints(systemConstraints = setOf(SystemConstraint.DEVICE_IDLE))vietnguyentuan2019/KMPTaskManager developmentQ: Will the old library receive updates? A: No. All development has moved to brewkits/kmpworkmanager. This repository is archived.
Q: Can I still use the old library? A: Yes, but it won't receive bug fixes or new features. We strongly recommend migrating.
Q: How long will migration take? A: Most projects can migrate in 1-2 hours. It's mostly package rename and minor API updates.
Q: What if I encounter issues during migration?
A: Open an issue in the new repository with the migration label.
Q: Is the license the same? A: Yes, both are Apache 2.0 licensed.
Original README content preserved below for historical reference...
Thank you for using KMPTaskManager! 🙏
We appreciate your support. Please give the new library a star on GitHub if it helps your project!
⭐ Star the new repo: brewkits/kmpworkmanager
Made with ❤️ by Nguyễn Tuấn Việt at Brewkits
| Old API | New API | Notes |
|---|
io.kmp.worker.* | io.brewkits.kmpworkmanager.* | Package renamed |
WorkerFactory | AndroidWorkerFactory / IosWorkerFactory | Platform-specific factories |
workerModule() | kmpWorkerModule() | Koin module renamed |
Worker.doWork(): Boolean | Same | No change |
| Feature | Old Library | New Library (v1.1.0) |
|---|
| Android Support | ✅ | ✅ |
| iOS Support | ✅ | ✅ |
| Periodic Tasks | ✅ | ✅ |
| One-Time Tasks | ✅ | ✅ |
| Exact Alarms | ✅ | ✅ |
| Task Chains | ✅ | ✅ + State Restoration |
| Constraints | ✅ | ✅ + More options |
| Event Bus | ✅ | ✅ + Persistence |
| Progress Tracking | ❌ | ✅ Built-in |
| Type-Safe Input | ⚠️ Manual | ✅ Automatic |
| iOS File Storage | ❌ UserDefaults | ✅ Atomic Files |
| Chain Restoration | ❌ | ✅ Resume from checkpoint |
| Test Coverage | ⚠️ Basic | ✅ 200+ tests |
| Documentation | ⚠️ README only | ✅ Comprehensive |
| Production Ready | ⚠️ | ✅ |
Surfaced from shared tags and platforms — no rankings paid for.