FlowMVI v3.3.0-alpha03 Release Notes
Release Date: 2026-01-04 // 5 months ago-
๐ This is a small release that downgrades kotlin to 2.2.21 until https://youtrack.jetbrains.com/issue/KT-83395 is resolved.
If you target 2.3.0, keep using alpha02. If you face KT-83395 or any other issues, consider alpha03.
Previous changes from v3.3.0-alpha02
-
๐ ๐ Performance Metrics
๐ New artifact:
:metricsis here!๐ With FlowMVI in just a 5 lines of code you can now set up metrics collection to understand the performance and usage patterns of your app!
โก๏ธ FlowMVI metrics collect over 66 different stats including speed of intent handling, state updates, error frequencies, data loading delays, bootstrapping time and lifecycle events, and more, then lets you upload to any popular metrics ingestion service such as OpenTelemetry, Prometheus, OpenMetrics etc, and visualize them in dashboards:
valmetrics=collectMetrics( reportingScope=applicationScope ) reportMetrics( metrics=metrics, sink=OtlpJsonSink(BackendSink()), )โฌ๏ธ The debugger IDE plugin and desktop apps have been upgraded to support the ingestion of metrics and also visualize them in a similar way out of the box, with minimal setup required to send metrics to the debugger:
Screen.Recording.2025-12-14.at.11.06.00.AM.mov
๐ Metrics are being benchmarked and are optimized to minimally influence the performance of your business logic, so that you can just plug them in your store configuration once and enjoy the benefits everywhere.
๐ Get started by reading the documentation
๐ New Hooks:
onActionDispatchhook will trigger when side-effects are dequeued , as opposed toonActionwhich triggers when enqueuedonIntentEnqueuehook will trigger when intents are enqueued , as opposed toonIntentwhich triggers when dequeued
ShutdownContext
ShutdownContext now implements StoreLifecycle which holds a reference to the last store lifetime. Previously, any lifecycle was
grabbed from theStoreitself which may not be the one thatonStopwas invoked with. This should improve reliability.This may be a behavioral breaking change if you relied on
StoreLifecycleinside ofonStop. Worth double-checking youronStophooks to be safe.๐ข Other New Stuff
โฌ๏ธ Note: Debugger of version 3.3.0 may be incompatible with FlowMVI 3.2x and older, downgrade or upgrade one of these to fix.
- ๐ Debugger will now merge events from stores if they have the same name
- โ Add
debounceIntentsdecorator - โ
Migrate
PluginTestScopeto be an interface instead of class. - โ Add validation to BatchIntentsDecorator modes. Worth re-checking that you don't pass invalid values there before shipping.
- Each
StoreConfigurationnow hasstoreIda unique UUID of the store instance. Using static unique names is now even more important with metrics to aggregate events per-screen reliably.
๐ ๐ Bug Fixes
Important fix :
onUndeliveredActioncallback wasn't properly wired and was never invoked since 3.1.0, fixed with this release + tests added that should prevent such issues in the future.- โ add failsafe to debug client store when events can't be deserialized
- โ add failsafe to debug server when events can't be deserialized
- let StoreConfiguration's state be covariant
Deps
- Kotlin 2.3.0-RC3
- Compose 1.10-rc1
- Ktor 3.3.3
โฌ๏ธ Safe upgrade checklist
- Check
onStopcallbacks that useStoreLifecyclemethodsawaitUntilClosedetc for correctness - โฌ๏ธ Upgrade debugger IDE plugin
- Check
onUndeliveredActionusages which should now work - ๐ง Check
batchIntentsdecorator configuration for validity of passed values - ๐ Wire/migrate to
onActionDispatchoronIntentEnqueuebased on your needs (analytics plugins etc)
Rest of the changelog
- โ add metrics decorator
- feat!: let ShutdownContext implement StoreLifecycle and pass one-time shutdown context there
- ๐จ refactor metrics collector for safe event handling across restarts
- implement Metrics api for decoupling metric collection and flushing
- 0๏ธโฃ implement default metrics flusher plugin
- implement OpenMetricsSink
- implement otel metrics
- โ add metrics schema versioning surface
- โ add metrics showcase to the sample app
- implement benchmarks evaluating metrics collection overhead
- โ add debounce intents decorator
- feat!: let ShutdownContext implement StoreLifecycle and pass one-time shutdown context there
- โ add debounce intents decorator
- feat!: add validation to BatchIntentsDecorator modes
- โ add wasm-wasi target to metrics and common debugger code
- introduce stable store IDs for debugging and metrics
- ๐ enable wasmJs and js for debugger plugin module
- implement DebuggerSink for metrics, wire metrics to sample app
- โ add
storeNameparameter to client events - accumulate metrics in debug server
- implement metrics visualization in the debugger
- โ add documentation for metrics visualization in debugger
- โก๏ธ update deps
- โฌ๏ธ downgrade kotest due to kotest/kotest#5203
- ๐ apply hack for JetBrains/intellij-platform-gradle-plugin#2062
- โฌ๏ธ downgrade intellij plugin due to JetBrains/intellij-platform-gradle-plugin#2062
- migrate compose deps to version catalog
- replace material debugger icons with custom iconpack
- migrate sample app from material icons extended dependency
- โ temporarily set logging level to quiet to silence fp warning
- โ cover enqueue dispatch hooks with tests
- โก๏ธ update agents and SECURITY.md
- โ provide fixed timestamp for tests to otel metrics mapper
- โ remove fluxo benchmarks
- โ add tests for sinks and basic apis
- โ more tests for edge cases of sinks
- โ add tests for quantiles/ema/perfmetrics
- โ cleanup to improve testability of new metrics internals
- โ add tests for debounce decorator
- โ add test utils for metrics
- โจ enhance and simplify test dsl for new tests
- โ add utils to test metrics with real store
- โ add full test suite for the MetricsCollector and plugin composition
- โ align collector tests
- โก๏ธ update readme with metrics and more benefits, reduce size
- ๐ temp remove claude workflow
- โก๏ธ update agents and SECURITY.md
- โ added testing guidance for agents
- ๐ create a documentation page on Metrics
Full Changelog : 3.2.1...3.3.0-alpha02