Skip to content

Releases: grarcht/Shuttle

v4.0.0 — 2026-05-17

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08
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 == xx == null)
  • Window insets rendering in demo apps

Removed

  • enableJetifier property (no longer needed)

v3.0.3 — 2025-08-20

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08

Changed

  • dependency versions
  • Gradle DSL updates for the Android Gradle Plugin in the build scripts

v3.0.2 — 2025-06-01

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08

Changed

  • dependency versions
  • updated AGP to 8.10.1 and the Gradle Wrapper to 8.14.1

v3.0.1 — 2024-12-05

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08

Added

  • product flavors to the demo apps to control how the dependencies are referenced

Changed

  • dependency versions
  • updated AGP to 8.7.0 and the Gradle Wrapper to 8.11

Removed

  • removed databinding

v3.0.0 — 2024-05-21

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08

Added

  • framework code to support Android services (remote and local): ShuttleService,
    LifecycleAwareShuttleServiceConnection, ShuttleServiceMessageValidator, and more.
  • mvvm-with-a-service demo module
  • a cargo id parameter to the new states from version 2.1.0
  • a test class for the message validator

Changed

  • reverted an artifact versions to get the compose code to build
  • brought back some databinding temporarily for the demos with the intention to remove it soon
  • updated the documentation with Dokka
  • updated the compile and target sdk version to 34
  • code updates for issues reported by detekt
  • organized import statements
  • dependency declaration clean up

v2.1.0 — 2023-08-29

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08

Added

  • new states for the uninitialized
    states: ShuttlePickupCargoResult.NotPickingUpCargoYet,
    ShuttleRemoveCargoResult.NotRemovingCargoYet,
    and ShuttleStoreCargoResult.NotStoringCargoYet to help solutions using StateFlows to
    have initial states for picking up, removing, or storing cargo data.

Changed

  • Gradle to version 8.3
  • other dependency artifact versions to newer versions
  • Java versions for kotlin, source, etc, to target 17
  • updated the compile and target sdk property names
  • updated the compile and target sdk property versions
  • updated the documentation with Dokka
  • maven repository url ordering
  • updated tests to reflect the state additions
  • updated some of the scopes from MainScope to lifecycle and viewmodel
  • R ids for incremental compilation speed improvements
  • Flow usage in demos to use StateFlow.

Removed

  • databinding and the associated project module
  • Dokka configuration for previous Dokka versions

v2.0.4 — 2023-02-26

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08

Added

  • suppression annotations for the SwallowedException warnings
  • replacements for activity attributes to the Framework module's manifest file to remove warnings

Changed

  • updated versions for many dependencies
  • updated the serialVersionUID in the Serializable classes
  • refactored the manifest package declaration to the namespace in the build.gradle files
  • statements throwing IllegalStateException to use error(message)

v2.0.3 — 2022-10-21

Choose a tag to compare

@grarcht grarcht released this 20 May 15:08

Changed

  • dependency versions
  • shuttle version references from build scripts

Removed

  • an unnecessary unit test assertion

v2.0.2 — 2022-07-24

Choose a tag to compare

@grarcht grarcht released this 20 May 15:09

Added

  • manifest opt-in for the new back press callback for SDK 33

Changed

  • rolled back dependency versions to stable version

Removed

  • the aar file classifier

v2.0.1 — 2022-07-23

Choose a tag to compare

@grarcht grarcht released this 20 May 15:09
  • DON'T USE...USE 2.0.2 instead

Added

  • the new back press callback for SDK version 33
  • the new back press trigger for SDK version 33 to avoid the deprecated call
    to activity.onBackPressed().

Changed

  • updated versions for many dependencies
  • updated unit tests to remove redundant annotations
  • updated unit tests to test the new back press handling

Removed

  • Some nullability handling that is no longer needed since the objects cannot be null