Skip to content

3.2.0

Choose a tag to compare

@github-actions github-actions released this 20 Sep 10:26
· 230 commits to master since this release
6f974e8

3.2.0

🚀 New Features

  • Child and Delegated Stores: New plugins childStorePlugin and storeDelegatePlugin allow composing stores into tree-like hierarchies and splitting responsibilities more easily. This enables better code organization by creating parent-child relationships between stores, where child stores can handle specific sub-features while maintaining their own lifecycle. The sample app demonstrates progressive content loading implemented with just 7 lines of code using this feature. Learn more in the delegates documentation.
  • SubscriptionAware: PipelineContext now implements SubscriptionAware interface to observe subscribers from within the store, enabling plugins to react to subscription lifecycle events. This foundation powers the completely reimplemented whileSubscribed plugin, which now includes a configurable delay before reporting unsubscriptions to avoid wasted resources during configuration changes (e.g., Android screen rotations). This makes resource management more efficient while maintaining responsiveness.
  • Updated IDE plugin live templates to generate plugins for specific stores
  • Custom descriptive exceptions for duplicate store startup
  • Added logging convenience functions like logi, logw, loge and more.

🧨 API Changes

  • Removed deprecated parentStore and savedState plugins
  • Saver API Changes: recover function deprecated in favor of new RecoveringSaver
  • Changed file saver path parameters to lazy lambdas (previous API deprecated)
  • Removed inline from CallbackSaver to fix compiler crashes
  • Migrated to context parameters partially (old receiver functions un-deprecated)

🐞 Bug Fixes

  • Fixed no-op saver test throwing ClassCastException on JVM
  • Created parent directories when writing files on native
  • Fixed saver on Native throwing obscure errors without considering recovery
  • Fixed no message when duplicate plugin installed in store
  • Fixed clipboard copy not working in debugger
  • Added interruption support to blocking file IO calls in save state plugin
  • Added missing DelicateStoreApi to state property
  • Added missing name parameter to init plugin

⚙️ Dependencies

  • Kotlin 2.2.20 (minimum supported: 2.0.x)
  • Gradle and Compose bumped to release versions
  • Compose Multiplatform 1.9.0
  • Kotlinx.datetime 0.7.1.

❔ Other

  • Android compile SDK updated to 36
  • Recreated Android keystore (made sample keystore optional for publishing)
  • Updated ConnectScreen UI of the debugger to fix layout issues
  • Added Google Play publishing requirements to sample app
  • Improved test task output
  • Added app store screenshots
  • Await startup completion in store test DSL
  • Refactored FileAccess to use kotlinx.io when possible

📚 Docs

  • Added documentation for delegated stores
  • Documented store delegate and child stores code
  • Updated documentation of whileSubscribed plugin and composable stores
  • Updated docs website title style

Testing

  • Added tests for various savers
  • Added tests for file write/read functions
  • Added tests for child stores and delegates
  • Added tests for new whileSubscribed plugin
  • Added tests for store lifecycle

Contributors

Changes since alpha06:

  • added logging convenience functions
  • CMP 1.9.0 and Kotlin 2.2.20