🚀 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