ApexFetch
1.0.0indexedEnterprise-grade download manager with automatic HTTP Range resume, local SQLite persistence, lifecycle-aware scopes, disk-efficient streaming, and modern UI integrations for reactive and XML view systems.
Enterprise-grade download manager with automatic HTTP Range resume, local SQLite persistence, lifecycle-aware scopes, disk-efficient streaming, and modern UI integrations for reactive and XML view systems.
ApexFetch is an enterprise-grade download manager for Kotlin Multiplatform (KMP). It is designed to handle large-scale file downloads with built-in local database persistence, automatic resume capabilities, and modern UI support for Android (Jetpack Compose & XML View Systems) and Desktop (Windows & Linux).
ApexFetch is divided into modular components for maximum flexibility:
apexfetch-core — The pure KMP logic core (Ktor, Okio, SQLDelight).apexfetch-compose — UI wrapper for Compose Multiplatform (rememberApexDownload).apexfetch-android-xml — Extensions for Android XML View Systems (LiveData & ViewModel).Ensure your development environment meets the following specifications:
Supported Targets: Android, JVM (Desktop)
Kotlin DSL (settings.gradle.kts)
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}
Groovy (settings.gradle)
dependencyResolutionManagement {
repositories {
google()
mavenCentral()
}
}
Add the required modules to your app or module-level build.gradle.kts or build.gradle:
Kotlin DSL
dependencies {
val apexVersion = "1.0.0"
// Core engine (required)
implementation("io.github.muhamadsyafii:apexfetch-core:$apexVersion")
// For Jetpack Compose / Compose Multiplatform
implementation("io.github.muhamadsyafii:apexfetch-compose:$apexVersion")
// For Android XML (LiveData support)
implementation("io.github.muhamadsyafii:apexfetch-android-xml:$apexVersion")
}
Groovy
dependencies {
def apexVersion = "1.0.0"
// Core engine (required)
implementation "io.github.muhamadsyafii:apexfetch-core:$apexVersion"
// For Jetpack Compose / Compose Multiplatform
implementation "io.github.muhamadsyafii:apexfetch-compose:$apexVersion"
// For Android XML (LiveData support)
implementation "io.github.muhamadsyafii:apexfetch-android-xml:$apexVersion"
}
val fetcher = ApexFetcher(database = mySqlDelightDb)
val download = rememberApexDownload(fetcher, url, path)
Button(onClick = { download.start() }) {
Text("Download Now")
}
if (download.state.value is DownloadState.Downloading) {
val progress = (download.state.value as DownloadState.Downloading).progress
LinearProgressIndicator(progress = progress / 100f)
}
fetcher.downloadAsLiveData(url, path).observe(viewLifecycleOwner) { state ->
when (state) {
is DownloadState.Downloading -> binding.progressBar.progress = state.progress
is DownloadState.Success -> binding.statusText.text = "Completed!"
// Handle other states: Paused, Error, etc.
}
}
Contributions are welcome! Please read our CONTRIBUTING.md before submitting a pull request.
By contributing to this project, you agree that your contributions will be licensed under the Apache License 2.0.
Copyright 2026 Muhamad Syafii
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance the License.
You may obtain a copy of the License at
https:
Unless applicable law agreed to writing, software
distributed under the License distributed an BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express implied.
See the License the specific language governing permissions
limitations under the License.
| Requirement | Version |
|---|
| Kotlin | 2.1.0 |
| Android Gradle Plugin (AGP) | 8.11.2 |
| SQLDelight | 2.0.1 |
Android minSdk | 21 (Android 5.0 Lollipop) |
Android compileSdk | 34 (Android 14) |
| Java Source/Target | Java 8 (VERSION_1_8) |
| JDK (to run AGP 8.x) | 17+ |
Surfaced from shared tags and platforms — no rankings paid for.