Empty Libs is a modular collection of modern, lightweight, and purpose-built Jetpack Compose libraries for Android. Designed to simplify common UI patterns, state management, and media processing with a clean and intuitive API.
- Modular Architecture: Each library is independent. Import only what you need.
- Pure Compose: Built from the ground up with Jetpack Compose for seamless integration.
- Robust State Management: Predictable and easy-to-use states for complex components.
- Developer Friendly: Comprehensive documentation and usage examples.
| Module | Status | Description |
|---|---|---|
| β¨ Animations | Music visualizers and fluid wave effects. | |
| βοΈ Canvas Slate | Powerful drawing pad with path editing and export. | |
| π οΈ Compose Utils | Serializable/Parcelable data classes for core types. | |
| π§© Compose Widgets | Functional analog and digital clocks for Compose. | |
| βοΈ Datastore UI | Pre-built settings components for Jetpack DataStore. | |
| π Formatter | Decimal rounding and date/time formatting utilities. | |
| π Gesture UI | Advanced gesture detection (e.g., video player controls). | |
| π¨ Image Edit | Full-screen image editor with drawing, text, and shapes. | |
| π Image Kolor | Image filtering and manual color adjustment sliders. | |
| βοΈ Image Krop | Advanced cropping with aspect ratios and custom shapes. | |
| β¨ Image Utils | Shape and bitmap utility library. | |
| πΌοΈ Image View | Zoomable, pannable, and swipeable image gallery (Coil 3). | |
| π± Image Wallpaper | Android wallpaper cropper and setter. | |
| π Jetpack UI | Adaptive layouts, nav bars, and custom pickers. | |
| π¨ Kolor Picker | HSL panel, image dropper, and color dialogs. | |
| π Layouts | Adaptive two-pane, collapsible, and zoomable layouts. | |
| π¦ LRU-Cache Manager | Type-safe in-memory caching wrapper. | |
| π PDF Template | State-driven PDF generation with pagination. | |
| π PDF Viewer | Lightweight PDF rendering and viewing components. | |
| π Serialization XML | Lightweight XML serialization for Kotlin. | |
| π Storage | Coroutine-based file browsing and storage management. |
Add the JitPack repository to your root settings.gradle.kts:
dependencyResolutionManagement {
repositories {
maven("https://jitpack.io")
}
}Then define the desired libraries to your libs.versions.toml:
[versions]
empty-libs = "VERSION"
[libraries]
emptylibs-animations = { group = "com.github.bashpsk.emptylibs", name = "animations", version.ref = "empty-libs" }
emptylibs-canvas-slate = { group = "com.github.bashpsk.emptylibs", name = "canvas-slate", version.ref = "empty-libs" }
emptylibs-compose-utils = { group = "com.github.bashpsk.emptylibs", name = "compose-utils", version.ref = "empty-libs" }
emptylibs-compose-widgets = { group = "com.github.bashpsk.emptylibs", name = "compose-widgets", version.ref = "empty-libs" }
emptylibs-datastore-ui = { group = "com.github.bashpsk.emptylibs", name = "datastore-ui", version.ref = "empty-libs" }
emptylibs-formatter = { group = "com.github.bashpsk.emptylibs", name = "formatter", version.ref = "empty-libs" }
emptylibs-gesture-ui = { group = "com.github.bashpsk.emptylibs", name = "gesture-ui", version.ref = "empty-libs" }
emptylibs-image-edit = { group = "com.github.bashpsk.emptylibs", name = "image-edit", version.ref = "empty-libs" }
emptylibs-image-kolor = { group = "com.github.bashpsk.emptylibs", name = "image-kolor", version.ref = "empty-libs" }
emptylibs-image-krop = { group = "com.github.bashpsk.emptylibs", name = "image-krop", version.ref = "empty-libs" }
emptylibs-image-utils = { group = "com.github.bashpsk.emptylibs", name = "image-utils", version.ref = "empty-libs" }
emptylibs-image-view = { group = "com.github.bashpsk.emptylibs", name = "image-view", version.ref = "empty-libs" }
emptylibs-image-wallpaper = { group = "com.github.bashpsk.emptylibs", name = "image-wallpaper", version.ref = "empty-libs" }
emptylibs-jetpack-ui = { group = "com.github.bashpsk.emptylibs", name = "jetpack-ui", version.ref = "empty-libs" }
emptylibs-kolor-picker = { group = "com.github.bashpsk.emptylibs", name = "kolor-picker", version.ref = "empty-libs" }
emptylibs-layouts = { group = "com.github.bashpsk.emptylibs", name = "layouts", version.ref = "empty-libs" }
emptylibs-lrucache-manager = { group = "com.github.bashpsk.emptylibs", name = "lrucache-manager", version.ref = "empty-libs" }
emptylibs-pdf-template = { group = "com.github.bashpsk.emptylibs", name = "pdf-template", version.ref = "empty-libs" }
emptylibs-pdf-viewer = { group = "com.github.bashpsk.emptylibs", name = "pdf-viewer", version.ref = "empty-libs" }
emptylibs-serialization-xml = { group = "com.github.bashpsk.emptylibs", name = "serialization-xml", version.ref = "empty-libs" }
emptylibs-storage = { group = "com.github.bashpsk.emptylibs", name = "storage", version.ref = "empty-libs" }Then add the desired library to your module-level build.gradle.kts:
dependencies {
implementation(libs.emptylibs.animations)
implementation(libs.emptylibs.canvas.slate)
implementation(libs.emptylibs.compose.utils)
implementation(libs.emptylibs.compose.widgets)
implementation(libs.emptylibs.datastore.ui)
implementation(libs.emptylibs.formatter)
implementation(libs.emptylibs.gesture.ui)
implementation(libs.emptylibs.image.edit)
implementation(libs.emptylibs.image.kolor)
implementation(libs.emptylibs.image.krop)
implementation(libs.emptylibs.image.utils)
implementation(libs.emptylibs.image.view)
implementation(libs.emptylibs.image.wallpaper)
implementation(libs.emptylibs.jetpack.ui)
implementation(libs.emptylibs.kolor.picker)
implementation(libs.emptylibs.layouts)
implementation(libs.emptylibs.lrucache.manager)
implementation(libs.emptylibs.pdf.template)
implementation(libs.emptylibs.pdf.viewer)
implementation(libs.emptylibs.serialization.xml)
implementation(libs.emptylibs.storage)
}Contributions are welcome! If you have a library idea or a bug fix, feel free to open an issue or submit a pull request.
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.