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: :metrics is 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:

    • onActionDispatch hook will trigger when side-effects are dequeued , as opposed to onAction which triggers when enqueued
    • onIntentEnqueue hook will trigger when intents are enqueued , as opposed to onIntent which triggers when dequeued

    ShutdownContext

    ShutdownContext now implements StoreLifecycle which holds a reference to the last store lifetime. Previously, any lifecycle was
    grabbed from the Store itself which may not be the one that onStop was invoked with. This should improve reliability.

    This may be a behavioral breaking change if you relied on StoreLifecycle inside of onStop. Worth double-checking your onStop hooks 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 debounceIntents decorator
    • โœ… Migrate PluginTestScope to 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 StoreConfiguration now has storeId a 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 : onUndeliveredAction callback 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 onStop callbacks that use StoreLifecycle methods awaitUntilClosed etc for correctness
    • โฌ†๏ธ Upgrade debugger IDE plugin
    • Check onUndeliveredAction usages which should now work
    • ๐Ÿ”ง Check batchIntents decorator configuration for validity of passed values
    • ๐Ÿ“ˆ Wire/migrate to onActionDispatch or onIntentEnqueue based 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 storeName parameter 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