okio v3.0.0 Release Notes

  • 2021-10-28

    🚀 This is the first stable release of Okio 3.x. This release is strongly backwards-compatible with Okio 2.x, and the new major version signifies new capabilities more than it does backwards incompatibility.

    ⬆️ Most users should be able to upgrade from 2.x by just changing the version. If you're using Okio in a Kotlin Multiplatform project, you'll need to drop the -multiplatform suffix in your Gradle dependencies.

    • New: Remove @ExperimentalFileSystem. This annotation is no longer necessary as the file system is no longer experimental!
    • New: Path no longer aggressively normalizes .. segments. Use Path.normalize() to apply these based on the content of the path, or FileSystem.canonicalize() to do it honoring any symlinks on a particular file system.
    • New: Publish a [bill of materials (BOM)][bom] for Okio. Depend on this from Gradle or Maven to keep all of your Okio artifacts on the same version, even if they're declared via transitive dependencies. You can even omit versions when declaring other Okio dependencies.
       dependencies {
          api("com.squareup.okio:okio")                // No version!
          api("com.squareup.okio:okio-fakefilesystem") // No version!
    • New: FileSystem.delete() silently succeeds when deleting a file that doesn't exist. Use the new mustExist parameter to trigger an exception instead.
    • New: FileSystem.createDirectories() silently succeeds when creating a directory that already exists. Use the new mustCreate parameter to trigger an exception instead.
    • New: FileSystem offers Java-language overloads where appropriate. Previously functions that had default parameters were potentially awkward to invoke from Java.
    • New: Timeout.intersectWith() returns a value instead of Unit. This is a binary-incompatible change. We expect that this public API is very rarely used outside of Okio itself.
    • Fix: Change BufferedSource.readDecimalLong() to fail if the input value is just -. Previously Okio incorrectly returned 0 for this.