
Facilitates quick file downloads in apps, supporting various sources and storage options. Offers download management features like concurrency limits, progress tracking, and operation pausing or cancellation.
[!TIP] Want to chat live with me? Join me on Discord server.
Nimbus is a Kotlin Multiplatform library that makes it quick and easy to download any file in your app, whether it's a large image, a video, or a PDF. It exposes low-level APIs to manage downloads with the provider you love the most and to store the downloaded files in the location you prefer.
You heard it right! Nimbus is designed to be easily integrated into Android, iOS, and KMM. It allows you to download files via Internet, via Bluetooth, or from any other source you can think. Store the file in the location you prefer, whether it's in the app's cache, in the app's files, or even in a remote location.
Get started with our 📚 installation guide and example project,
Nimbus APIs: The library provides a fully typed, suspend-based interface (NimbusAPI) to manage download operations. All errors are returned as typed values — no exceptions thrown across the public boundary.
Typed Error Hierarchy: Every failure carries a typed cause (TemporaryNimbusErrorCause / PermanentNimbusErrorCause) enabling exhaustive when matching without wildcards.
Concurrency Limit: Set a custom concurrency limit to control the number of downloads that can occur simultaneously.
Progress Tracking: Track the progress of each download operation with real-time Flow<DownloadState> emissions.
Pause / Resume: Pause a running download and resume it later — progress is preserved across sessions via ProtoBuf persistence.
Cancel: Cancel a download operation from any state; partial files are cleaned up automatically.
Retry: Retry a failed download with retryFailedDownload — re-fetches remote size and resets state.
Auto-start: Optionally fire startDownload automatically after enqueueDownload with withAutoStart(true).
Pluggable HTTP Client: Implement NimbusDownloadPort yourself, or use the ready-made KtorDownloadAdapter from the nimbus-ktor artifact.
KMP-native Storage: File I/O via kotlinx.io.files.SystemFileSystem — no java.io.File, works on Android, JVM, and iOS.
Add nimbus to your build.gradle dependencies. Optionally add nimbus-ktor for the ready-made Ktor HTTP adapter.
dependencies {
implementation("io.github.giovanniandreuzza:nimbus:2.1.0")
// Optional — recommended Ktor HTTP adapter:
implementation("io.github.giovanniandreuzza:nimbus-ktor:2.1.0")
}The SampleAndroid Project demonstrates how to integrate and use Nimbus in an Android project.
[!TIP] Want to chat live with me? Join me on Discord server.
Nimbus is a Kotlin Multiplatform library that makes it quick and easy to download any file in your app, whether it's a large image, a video, or a PDF. It exposes low-level APIs to manage downloads with the provider you love the most and to store the downloaded files in the location you prefer.
You heard it right! Nimbus is designed to be easily integrated into Android, iOS, and KMM. It allows you to download files via Internet, via Bluetooth, or from any other source you can think. Store the file in the location you prefer, whether it's in the app's cache, in the app's files, or even in a remote location.
Get started with our 📚 installation guide and example project,
Nimbus APIs: The library provides a fully typed, suspend-based interface (NimbusAPI) to manage download operations. All errors are returned as typed values — no exceptions thrown across the public boundary.
Typed Error Hierarchy: Every failure carries a typed cause (TemporaryNimbusErrorCause / PermanentNimbusErrorCause) enabling exhaustive when matching without wildcards.
Concurrency Limit: Set a custom concurrency limit to control the number of downloads that can occur simultaneously.
Progress Tracking: Track the progress of each download operation with real-time Flow<DownloadState> emissions.
Pause / Resume: Pause a running download and resume it later — progress is preserved across sessions via ProtoBuf persistence.
Cancel: Cancel a download operation from any state; partial files are cleaned up automatically.
Retry: Retry a failed download with retryFailedDownload — re-fetches remote size and resets state.
Auto-start: Optionally fire startDownload automatically after enqueueDownload with withAutoStart(true).
Pluggable HTTP Client: Implement NimbusDownloadPort yourself, or use the ready-made KtorDownloadAdapter from the nimbus-ktor artifact.
KMP-native Storage: File I/O via kotlinx.io.files.SystemFileSystem — no java.io.File, works on Android, JVM, and iOS.
Add nimbus to your build.gradle dependencies. Optionally add nimbus-ktor for the ready-made Ktor HTTP adapter.
dependencies {
implementation("io.github.giovanniandreuzza:nimbus:2.1.0")
// Optional — recommended Ktor HTTP adapter:
implementation("io.github.giovanniandreuzza:nimbus-ktor:2.1.0")
}The SampleAndroid Project demonstrates how to integrate and use Nimbus in an Android project.