Skip to content

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

πŸš€ Who's Using FileKit

FileKit is trusted by developers building amazing cross-platform applications:

  • Heron - KMP Bluesky client using FileKit for image preview when uploading images or videos
  • Rush - Lyrics search app like Spotify
  • Composables SVG to Compose - Web tool to convert SVG to Compose code in seconds
  • Twine - A multiplatform RSS reader built using Kotlin and Compose
  • Butler - AI Chat App supporting image uploads across iOS, Android, Desktop, and WasmJS
  • PixelSafe - Free steganography tool for PNG images
  • AndroidToolKit - Desktop tools applicable to Android development, supporting Windows, Mac and Linux
  • Splital - Easily track and manage your shared expenses, quickly, simply, and hassle-free on Android and iOS
  • Tracker - Manager for Bluesky - Track and manage your Bluesky followers, unfollowers, blockers, and post analytics β€” all in real time! On Android and iOS.
  • Parrot Workout Tracker - The ultimate fitness log and exercise tracker to crush your goals on Android and iOS.
  • Ashampoo Photo Organizer - Photo management software for organizing and searching large photo collections

Using FileKit in your project? Let us know!

πŸ“š 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