Skip to content

Pick and save Files, Medias and Folder for Kotlin Multiplatform / KMP and Compose Multiplatform / CMP

License

Notifications You must be signed in to change notification settings

vinceglb/FileKit

Repository files navigation

FileKit for Kotlin Multiplatform and Compose Multiplatform

FileKit

πŸš€ A powerful cross-platform file operations library for Kotlin Multiplatform

FileKit Kotlin Maven Version Badge Android Badge iOS Badge JVM Badge JS

✨ Features

  • πŸ“± Cross-Platform Support: Works seamlessly on Android, iOS, macOS, JVM (Windows, macOS, Linux), JS, and WASM
  • 🎯 Native Experience: Uses platform-native file pickers for the best user experience
  • πŸͺΆ Lightweight: Minimal dependencies to keep your app fast and lean
  • πŸ”Œ Rich Integrations: Works with Compose Multiplatform, Coroutines, kotlinx-io, Coil, and more
  • πŸ“‚ Comprehensive File Operations: Pick files, save documents, access photos, manage directories
  • 🎨 Image Utilities: Built-in image compression and gallery integration

πŸ“š Documentation

Visit our documentation to learn more: https://filekit.mintlify.app

Migrate from FileKit 0.8 to 0.10 by following the migration guide.

πŸš€ Quick Start

Installation

// build.gradle.kts
dependencies {
    implementation("io.github.vinceglb:filekit-core:$version")
    implementation("io.github.vinceglb:filekit-dialogs:$version")
    implementation("io.github.vinceglb:filekit-dialogs-compose:$version")
    implementation("io.github.vinceglb:filekit-coil:$version")
}

Follow the installation guide to learn how to install and setup FileKit in your project.

Usage Examples

// Pick a file
val file = FileKit.openFilePicker()

// Pick multiple files
val files = FileKit.openFilePicker(mode = FileKitMode.Multiple())

// Pick only images
val imageFile = FileKit.openFilePicker(type = FileKitType.Image)

// Pick a directory
val directory = FileKit.openDirectoryPicker()

// Save a file
val contentToSave = "Hello FileKit!"
val file = FileKit.openFileSaver(suggestedName = "document", extension = "txt")
file?.writeString(contentToSave)

// Work with files
val myFile = FileKit.filesDir / "document.pdf"
println(myFile.name)
println(myFile.size())
myFile.writeString("Hello, World!")

// Image operations
val compressedBytes = FileKit.compressImage(
    bytes = imageFile.readBytes(),
    quality = 80,
    maxWidth = 1024,
    maxHeight = 1024
)

See the quickstart guide to learn more about the different file operations and utilities available in FileKit.

πŸ“¦ Modular Structure

FileKit is designed to be modular, allowing you to include only what you need:

  • FileKit Core: Basic file operations and the PlatformFile abstraction
  • FileKit Dialogs: File pickers and save dialogs
  • FileKit Dialogs Compose: Compose Multiplatform integration
  • FileKit Coil: Integration with Coil for image loading

FileKit Preview

πŸ™ Credits

FileKit stands on the shoulders of giants. Special thanks to:


Made with ❀️ by Vince