New
3.2.0
3.2.0
π New Features
- Child and Delegated Stores: New plugins
childStorePluginandstoreDelegatePluginallow 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:
PipelineContextnow implementsSubscriptionAwareinterface to observe subscribers from within the store, enabling plugins to react to subscription lifecycle events. This foundation powers the completely reimplementedwhileSubscribedplugin, 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
parentStoreandsavedStateplugins - Saver API Changes:
recoverfunction deprecated in favor of newRecoveringSaver - Changed file saver path parameters to lazy lambdas (previous API deprecated)
- Removed inline from
CallbackSaverto fix compiler crashes - Migrated to context parameters partially (old receiver functions un-deprecated)
π Bug Fixes
- Fixed no-op saver test throwing
ClassCastExceptionon 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
DelicateStoreApito 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
- @egorikftp made their first contribution
Changes since alpha06:
- added logging convenience functions
- CMP 1.9.0 and Kotlin 2.2.20