Releases: vinceglb/FileKit
0.13.0
🚀 Better stability, reliability, and developer experience
FileKit 0.13.0 is mainly focused on improving stability and reliability across all supported platforms.
This release includes many fixes for platform-specific edge cases, better lifecycle handling, and more consistent behavior between targets. The goal was simple: make FileKit more predictable and safer to use in production.
We also improved the developer experience with better KDoc coverage, clearer documentation, and a new Cookbook section. On top of that, we introduced more automated tests, new CI workflows, a new sample project, and linting enforcement.
✨ What's new
- Introduce
FileKit.saveVideoToGalleryfor saving videos to the gallery by @ujizin in #491 - Add a typed desktop user-directory API for safer path access by @vinceglb in #499
- Bring FileKit to watchOS by @vinceglb in #498
- Bring FileKit Dialogs support to macOS targets by @vinceglb in #517
✅ Improvements
- Align iOS file picker behavior with Apple PhotoKit guidance by @Juxtlie in #433
- Improve
projectDirresolution for more reliable iOS path handling by @vinceglb in #447 - Refactor
FileKitFileProviderand authority handling for safer Android file sharing by @vinceglb in #448 - Remove deprecated Coil and Dialogs APIs to clean up the public surface by @vinceglb in #454
- Refine camera-facing behavior and defaults across platforms by @vinceglb in #479
- Harden copy/write operations for unknown-size and provider-backed files by @vinceglb in #494
- Standardize file-saver extension handling across platforms by @vinceglb in #497
- Improve Android Photo Picker display name and filename resolution by @vinceglb in #500
- Improve Android Compose picker resilience across activity recreation by @vinceglb in #507
- Enable cross-platform media saving to the gallery by @vinceglb in #512
- Improve Android camera picker permission handling for more reliable launches by @vinceglb in #514
- Standardize
atomicMovedestination-directory behavior across platforms by @vinceglb in #515
🐛 Bug fixes
- Run AWT
FileDialogon the EDT when called from suspending APIs by @edneyosf in #422 - Restore picker result delivery when the activity is stopped in background by @vinceglb in #445
- Fix
URITestfile-path assertions for Windows compatibility by @vinceglb in #452 - Fix inverted file-existence check in README by @robertlinsener in #463
- [Android] Fix stale trailing bytes when overwriting smaller files by @HTossy in #470
- Fix Compose Preview crash with
rememberShareFileLauncherby @vinceglb in #473 - Fix Android directory picker tree-URI handling by @vinceglb in #474
- Fix non-web
PlatformFilechild resolution by @vinceglb in #475 - Fix tree-URI detection compatibility on Android API 23 by @vinceglb in #478
- Enforce
maxItemsoutput contract consistently across platforms by @vinceglb in #492 - Fix signal-handler cleanup in the XDG portal picker by @vinceglb in #495
- Fix FileKit dialog registry leak handling to avoid retained references by @vinceglb in #496
- Fix Android bookmark existence checks by @vinceglb in #505
- Prevent Android picker crashes when no app can handle picker intents by @vinceglb in #516
📚 New Cookbook guides
- DataStore: shows how to configure DataStore from
commonMainusingFileKit.databasesDir, avoiding platform-specificexpect/actualsetup for storage paths. - Test Resources: explains how to reliably access test files in KMP with
FileKit.projectDir, with practical examples and platform support notes.
🧑💻 Developer Experience
- Add a shared
.editorconfigfor consistent ktlint rules by @vinceglb in #444 - Modernize and simplify Gradle configuration across modules by @vinceglb in #446
- Add multi-platform CI workflows for build and test coverage by @vinceglb in #449
- Add a dedicated ktlint CI job for automated style enforcement by @vinceglb in #451
- Improve CI with artifact upload/download between workflow jobs by @vinceglb in #453
- Launch a new sample project showcasing FileKit workflows by @vinceglb in #465
- Add a bookmark screen to the sample project by @vinceglb in #477
- Add watchOS test coverage to CI by @vinceglb in #504
📝 Documentation updates
- Add KDoc coverage across all modules by @vinceglb in #456
- Refresh integration docs for clearer setup guidance by @vinceglb in #457
- Add cookbook-style documentation with practical recipes by @vinceglb in #458
⬆️ Dependencies updates
- Upgrade Kotlin to
2.3.10 - Upgrade kotlinx-io to
0.9.0 - Upgrade Compose Multiplatform to
1.10.1 - Keep JNA at
5.18.1 - Upgrade Coil to
3.4.0 - Upgrade AGP to
9.0.1
🙏 New Contributors
Thanks a lot to all the contributors ❤️
- @edneyosf made their first contribution in #422
- @Juxtlie made their first contribution in #433
- @robertlinsener made their first contribution in #463
- @HTossy made their first contribution in #470
- @ujizin made their first contribution in #491
🤩 Bonus
Here are the screenshots of the new sample app!
Full Changelog: 0.12.0...0.13.0
0.12.0
✨ What's new
- Add
@Serializationsupport for PlatformFile by @vinceglb in #410 - Basic MIME type support across pickers by @FegzDev in #367
- Add
PlatformFile.createdAt()andPlatformFile.lastModified()accessors by @vinceglb in #407
✅ Improvements
- Use Dispatchers.IO when invoking the macOS picker by @egorikftp in #389
- Switch the default iOS file contentType handling by @Lavmee in #383
- Improve Android bookmarking workflows, including copyTo and atomicMove, by @vinceglb in #404 and #408
🐛 Bug fixes
- Fix compressImage PNG transparency on JVM by @egorikftp in #390
- Prevent iOS crash when PhPickerDelegate fires multiple times by @vinceglb in #403
- Ensure file sources are closed after use by @vinceglb in #405
- Preserve iOS gallery selection order by @Dwite in #409
- Fix CSV files picker on Android by @vinceglb in #406
📝 Documentation updates
⬆️ Dependencies updates
- Kotlin 2.2.20
- Compose Multiplatform 1.9.0
- JNA 5.18.1
🙏 New Contributors
A big thank you to all the contributors ❤️
- @egorikftp made their first contribution in #389
- @Lavmee made their first contribution in #383
- @FegzDev made their first contribution in #367
- @Dwite made their first contribution in #409
Full Changelog: 0.11.0...0.12.0
0.11.0
✨ What's new
- Open PlatformFile in the default application by @N7ghtm4r3 in #352 - Documentation
- Support camera facing in camera picker by @Tommyten in #359 - Documentation
- Customize
FileKit.filesDirandFileKit.cacheDirdirectories for the JVM target by @vinceglb in #379 - Documentation
✅ Improvements
- Update strings in WindowsFilePicker by @vinceglb in #364
- Handle absolute path in PlatformFile constructor on apple targets by @vinceglb in #375
- Trigger Google Play services to install the backported photo picker module by @vinceglb in #376
🐛 Bug fixes
- Fix Android file truncation when writing shorter content by @vinceglb in #365
- Fix Android PlatformFile.bookmarkData for files by @vinceglb in #366
📝 Documentation updates
- Add "Who's Using FileKit" section showcasing community projects by @vinceglb in #381
- Update FileProvider documentation with authority parameter usage by @vinceglb in #377
- Add ProGuard configuration to JVM setup documentation by @vinceglb in #378
⬆️ Dependencies updates
- Kotlin 2.2.10
🙏 New Contributors
A big thank you to all the contributors ❤️
- @N7ghtm4r3 made their first contribution in #352
- @Tommyten made their first contribution in #359
Full Changelog: 0.10.0...0.11.0
0.10.0
🎉 1k stars on Github
After 1 year and a half, FileKit has received its first 1000 stars on Github!
FileKit is what it is today thanks to the amazing community. I'm so proud of what we've achieved together! I want to thank all for your contributions, encouragement, and support during this journey! 💖
🥂 Community featuring
Let's celebrate this achievement together!
In the next few weeks, I'll be adding a new section to the readme to showcase the amazing projects of the community using FileKit.
The main goals are:
- Showcasing the projects of the community using FileKit
- Building trust and credibility for the library for newcomers
- Giving real-world examples of how developers use FileKit
If you are building something with FileKit, open source or not, and want to be featured on the readme, please share your project with us by commenting on this discussion!
Also, if you want to share a project privately without being featured on the readme, you can send me an email.
Thank you again for using the library and making it possible! ❤️
✨ What's new
- Add
SingleWithStateandMultipleWithStatemodes to monitor file picker import state by @kihaki in #300 - Documentation - Bookmark files and folder for persistent access by @vinceglb in #295 - Documentation
- Use freedesktop basedir / userdir on JVM linux by @recke96 in #301
- Add entry for all supported files on XDG by @Martmists-GH in #312
- Update openCameraPicker to accept destinationFile parameter for saving images by @vinceglb in #293
- Support passing Android Uri to PlatformFile(path: String) by @vinceglb in #324
- Add multi-file sharing support for Android and iOS by @sittisak-kij in #340
✅ Improvements
- Allow transitive dependency of Coil in filekit-coil by @vinceglb in #326
- Remove suspend from PlatformFile.createDirectories() by @vinceglb in #291
- Create a databases directory if it does not exist on Apple target by @vinceglb in #290
- Replace rootViewController by topMostViewController on iOS by @vinceglb in #338
🐛 Bug fixes
- Fix shareFile to use file URL by @vinceglb in #325
- Fix readBytes and readString methods to ensure proper resource management by @vinceglb in #339
📝 Documentation updates
- Set application appearance to system default on macOS by @vinceglb in #307
- Update deprecation message for openFileSaver function by @vinceglb in #308
- Add Code of Conduct by @vinceglb in #341
⬆️ Dependencies updates
- Kotlin 2.2.0
- kotlinx-io 0.8.0
- Compose Multiplatform 1.8.2
- Coil 3.3.0
🙏 New Contributors
A big thank you to all the contributors ❤️
- @recke96 made their first contribution in #301
- @Martmists-GH made their first contribution in #312
- @kihaki made their first contribution in #300
- @sittisak-kij made their first contribution in #340
Full Changelog: 0.10.0-beta04...0.10.0
0.10.0-beta04
✨ What's new
- Add image orientation correction based on EXIF data in PlatformFile.toImageBitmap() on Android by @vinceglb in #266
🐛 Bug fixes
- Fix: handle nullable file picker results with AWTFilePicker by @zacharee in #260
- Fix openFileSaver on iOS when suggestedName contains "/" by @mauriziofaleo in #262
- Fix PlatformFile equality on apple by @vinceglb in #263
- Fix incorrect NSURL from PlatformFile.list() paths on Apple targets by @vinceglb in #264
- Fix Android directory picker returned Uri by @vinceglb in #265
⬆️ Dependency updates
- Compose Multiplatform 1.8.0
- Kotlin 2.1.21-RC2
- Coil 3.2.0-rc02
- AGP 8.10.0
🙏 New Contributors
A big thank you to all the contributors ❤️
- @mauriziofaleo made their first contribution in #262
Full Changelog: 0.10.0-beta03...0.10.0-beta04
0.10.0-beta03
✨ What's new
- Improve Coil integration by @vinceglb and @lazarusmugo in #255 - Documentation
- Manually init FileKit Core by @vinceglb in #259 - Documentation
🐛 Bug fixes
- Fix
PlatformFile.toImageBitmap()on Android when the PlatformFile is an URI by @vinceglb in #254 - Fix file saver on Windows when no extension provided by @vinceglb in #258
⬆️ Dependency updates
- Bump androidx.exifinterface:exifinterface from 1.4.0 to 1.4.1
🙏 New Contributors
A big thank you to all the contributors ❤️
- @lazarusmugo made their first contribution in #249
Full Changelog: 0.10.0-beta02...0.10.0-beta03
0.10.0-beta02
✨ What's new
- Open the share file dialog from a PlatformFile by @jmseb3 in #210 - Documentation link
- Introduce Scoped Resource Access to facilitate accessing files information in iOS and macOS by @vinceglb in #241 - Documentation link
- Add ImageBitmap utils by @vinceglb in #233 - Documentation link
- Nullable extension parameter in openFileSaver() by @vinceglb in #242
🐛 Bug fixes
- Fix the iOS file saver feature by @vinceglb in #229
- Fix: fall back to single
filevalue if multifilesvalue is empty in AWT and Swing by @zacharee in #235 - Improve FileKit Core stability on Android by @vinceglb in #243
⬆️ Dependency updates
- Bump kotlin from 2.1.10 to 2.1.20
- Bump jna from 5.16.0 to 5.17.0
- Bump dbus-java from 5.1.0 to 5.1.1
- Bump kotlinx-coroutines from 1.10.1 to 1.10.2
⚗️ New File Explorer Sample
This new sample demonstrates how to use FileKit to reproduce a minimal file explorer in Kotlin. It shows how to get a list of files, all their related information, and perform some basic operations even on iOS thanks to the new security scope methods. It targets Android, iOS and JVM.
🙏 New Contributors
A big thank you to all the contributors ❤️
Full Changelog: 0.10.0-beta01...0.10.0-beta02
0.10.0-beta01
🎉 FileKit v0.10 is now available in beta!
FileKit v0.10 is a full rewrite of the library. It focuses on improving the developer experience by facilitating tasks related to files operations in Kotlin Multiplatform projects.
- Improve PlatformFile abstraction to make development easier for common files-related tasks
- Support for kotlinx-io to easily read, write, stream files and more from the common code
- Access common paths like application filesDir and cacheDir from common code
- It's now easier than ever to store and read files in the app storage!
- Capture photos with the native camera app and return the associated file on Android and iOS
- Save images to the native gallery on Android and iOS
- Add helpers to display images from PlatformFile on Compose Multiplatform using Coil3
- A brand new website for the documentation
- And more!
🚀 Get started
- Installation documentation guide: https://filekit.mintlify.app/installation
- Migrate from FileKit 0.8 to 0.10: https://filekit.mintlify.app/migrate-to-v0.10
📣 Feedback
I'm really interested in having your feedback about this update.
- What do you think about the new API? Do you find it easier to use?
- What do you think about the new capabilities (like the possibility of reading and writing, streaming, kotlinx-io integration, etc)?
- What do you think about the new documentation?
- If you have any suggestions or comments, please share them!
You can share your thoughts in this discussion: #206.
Thanks a lot ❤️
🙏 New Contributors
As usual, a big thank you to all the contributors!
- @zhufucdev made their first contribution in #171
Full Changelog: 0.8.8...0.10.0-beta01
0.8.8
✅ Improvements
- Bump Kotlin to 2.0.21
- Bump Compose to 1.7.1
🐛 Bug fixes
🙏 New Contributors
A big thank you to all the contributors ❤️
📣 Announcement
The next version of FileKit 0.10 will bring a lot more features and improve the global developer experience:
- Improve PlatformFile abstraction to make development easier for common files-related tasks
- Support for kotlinx-io to easily read, write, stream files and more from the common code
- Access common paths like application
filesDirandcacheDirfrom common code - It's now easier than ever to store and read files in the app storage!
- Capture photos with the native camera app and return the associated file on Android and iOS
- Save images to the native gallery on Android and iOS
- Add helpers to display images from PlatformFile on Compose Multiplatform using Coil3
- A brand new website for the documentation
- And more!
I'm excited to share with you and have your feedback on this new version in the following weeks, so stay tuned!
Full Changelog: 0.8.7...0.8.8

