Target: FileKit 1.0 in Q1 2027. This is a best-effort target, not a fixed date. The order of the steps below matters more than the calendar, and this page is updated as work lands.
At a glance
Guiding principle
Removals and breaking changes to stable APIs happen before 1.0, with migration notes for every change. After 1.0, they wait for 2.0. Everything additive, like a new function, a new platform implementation or a new integration, doesn’t break anyone. So it can ship in any 1.x release and doesn’t need to block 1.0.The plan
1. Release 0.17
Adds recursive helpers (walk(), sizeRecursively(), copyRecursively()), an experimental Origin Private File System API on the web, and a fix for iOS folder access persisted across restarts. It also raises Android minSdk from 23 to 24. See the releases for details.
2. API freeze: 0.18
The last release before 1.0 that removes APIs.- Deprecated APIs removed, such as the old
downloadDir,pictureDirandvideoDirdesktop properties and the file saver overloads that takeextensioninstead ofdefaultExtension. - Public API review of
filekit-core,filekit-dialogs,filekit-dialogs-composeandfilekit-coil, against the Kotlin library authors’ guidelines: naming, defaults, nullability, exceptions and visibility. If the review finds a better name, the old one is deprecated with an IDE replacement and keeps compiling until 2.0. - Automatic API checks in CI, so every change to the public API is visible in review and accidental breaking changes fail the build.
- Experimental APIs reviewed. Each
@ExperimentalFileKitApideclaration is either promoted to stable or explicitly stays experimental through 1.0. - Compatibility policy published in these docs (see “What 1.0 guarantees” below).
3. Release candidates: 1.0.0-RC
No more removals: existing APIs stay as they were in 0.18, except to fix problems found in the RCs. The focus moves to reliability and documentation, with builds you can try in your app or library.- Regression tests where users report the most issues: Android content URIs and picker lifecycle, Apple security-scoped resources and bookmarks, desktop dialogs, and browser file handling. Manual verification steps are documented where system UI cannot be automated.
- Fixes for the highest-impact confirmed bugs on stable platforms, for example missing dismissal events from some iOS pickers (#138).
- Platform support matrix: every feature, on every platform, with its known limitations.
- 1.0 migration guide covering every breaking change in 0.18 and every API deprecated since 0.17.
- API reference generated from KDoc and published next to these docs.
- Native save dialog on the web (#348), using the File System Access API where available, with the current download behavior as a fallback.
- Blob and W3C
Fileinterop on the web (#173), so web code can move between browser types andPlatformFilewithout boilerplate.
4. FileKit 1.0
The stable release, with the guarantees below, followed by a stabilization period focused on regressions.5. After 1.0: 1.x
- Chunked reading on the web, for uploading or processing large files without loading them fully in memory.
- More consistent image processing across platforms, for compression and resizing results that match more closely.
- Kotlin/Native targets promoted to stable as their test coverage and real-world usage grow.
linuxX64andlinuxArm64are already published. The open part of #609 is validation on distributions such as Aurora OS. - More integrations and recipes with popular Kotlin Multiplatform libraries.
What 1.0 guarantees
Platform tiers
Compose Multiplatform desktop apps run on the JVM, so they are in the Stable tier on Windows, macOS and Linux. The Experimental tier only concerns apps compiled with Kotlin/Native for those systems. Not every module ships every Kotlin/Native target: watchOS is available in
filekit-core only, and Linux and Windows native in filekit-core and filekit-dialogs.Compatibility policy
From 1.0 on, FileKit follows semantic versioning for stable APIs on stable platforms:- Patch releases (1.x.y) contain bug fixes only.
- Minor releases (1.x.0) add features. They don’t change or remove existing stable APIs, and libraries built against an earlier 1.x keep working.
- Major releases (2.0.0) are the only ones allowed to remove APIs or break source or binary compatibility.
- Deprecations come first. An API that will go away is deprecated in a 1.x release, with a migration note and an IDE replacement when there is a mechanical one. Your code keeps compiling, and removal waits for the next major release.
- Checked automatically. CI compares the public API with the previous release, so accidental breaking changes fail the build instead of reaching you.
- Fixes land in the latest 1.x release. Older minor versions are not patched.
Not covered
- APIs marked with
@ExperimentalFileKitApi. Using them shows a compiler warning until you opt in, and they may change in minor releases. - APIs marked with
@FileKitDialogsInternalApi. They exist for coordination between FileKit modules and are not meant for apps. - Platforms in the Experimental tier.
- Toolchain requirements. Minimum Kotlin, Compose Multiplatform, Android SDK or JDK versions may be raised in minor releases, to keep up with the ecosystem. Every bump is called out in the release notes.
How to help
Review the API
If a name, default or behavior feels wrong, now is the time to say it. After 1.0 it gets much harder to change.
Report platform bugs
Include the FileKit version, the platform and OS version, and a minimal reproduction. A sample project helps the most.
Try the release candidates
Test the 1.0 RCs in your app or library when they land, and report anything that breaks or behaves differently from one platform to another.
Contribute
Issues labeled
needs help are open for contributions. Comment on the issue first so we can agree on the approach.