Skip to content

v4.0.0 — 2026-05-17

Latest

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08
· 240 commits to main since this release
678d482

Added

  • @ShuttleCargo annotation and a Kotlin compiler plugin that automatically injects the ShuttleCargoData
    serialization contract at compile time, removing the need to manually implement java.io.Serializable on cargo classes.
    Annotate a class with @ShuttleCargo and the plugin handles the rest:
    // Before
    class ProductModel(val id: String, val data: ByteArray) : java.io.Serializable
    
    // After
    @ShuttleCargo
    class ProductModel(val id: String, val data: ByteArray)
  • ShuttleCargoData marker interface as the public type bound for all cargo, replacing raw java.io.Serializable in the public API
  • Bill of Materials (BOM) module to manage Shuttle dependency versions
  • MVI with Compose demo module
  • Kover code coverage configuration across framework modules
  • GitHub Actions workflow that publishes API documentation to GitHub Pages via Dokka on every push to main
  • Code of conduct

Changed

  • Migrated all Gradle build files from Groovy to Kotlin DSL
  • Migrated Dokka to v2
  • Migrated from Material 2 to Material 3 in demo apps
  • Updated Gradle plugin to version 9.1.0 and migrated to Gradle toolchain
  • Enabled Gradle configuration cache
  • Test coverage increased to 100% lines of code across the framework, persistence, and room extension modules
  • binder and ipcServiceMessengerDecorator in ShuttleService are now protected, tightening encapsulation
  • Revamped README and contributing documentation
  • Added API documentation link to README

Fixed

  • ShuttleRoomDao.getCargoById returned a non-nullable ShuttleRoomData, causing an NPE when no record exists in the database; return type corrected to ShuttleRoomData?
  • sender parameter was silently dropped in CargoShuttle.intentChooserCargoWith
  • Unsafe cast operations in ShuttleBundle and ShuttleNavController replaced with safe fallbacks
  • binder and ipcServiceMessengerDecorator in ShuttleService visibility corrected from public to protected
  • Yoda-style comparisons in ShuttleRepository corrected to idiomatic Kotlin (null == x → x == null)
  • Window insets rendering in demo apps

Removed

  • enableJetifier property (no longer needed)