Add @ExperimentalAppPlatform in :common:public for APIs that require explicit consumer opt-in.
Add experimental MoleculePresenter.presentDetached() to compose presenter subtrees in detached Molecule hierarchies so busy parent presenters do not recompose slower child presenters.
Add experimental Molecule presenter-backed text field state helpers for sharing text input state between presenters and Compose renderers.
Add experimental ReturningSaveableStateHolder in :presenter-molecule:public for preserving rememberSaveable state in value-returning Molecule presenter subtrees.
Add experimental Navigation 3 presenter backstack APIs and the enableMoleculePresenterBackstack Gradle plugin option.
Use the Dispatchers.Main as default main dispatcher instead of the immediate main dispatcher.
Upgrade Kotlin to 2.3.21, Compose Multiplatform to 1.11.0, Metro to 1.1.1, and other dependencies.
Breaking change: The App Platform Gradle plugin doesn’t apply the KSP plugin automatically anymore. If you use kotlin-inject as DI framework, then you need to add a dependency on KSP yourself (similar to how you apply the App Platform Gradle plugin).
@ContributesRobot no longer requires @Inject for robots with constructor parameters. The generated contribution now provides a constructor-calling @Provides function that injects the same arguments.
@ContributesRenderer no longer requires @Inject for renderers with constructor parameters. The generated contribution now provides a constructor-calling @Provides function and reports an error when multiple constructors make that provider ambiguous.
@ContributesScoped no longer requires @Inject for classes with constructor parameters. The generated contribution now provides a constructor-calling @Provides function and reports an error when multiple constructors make that provider ambiguous.
Breaking change: Added an optional Modifier parameter to BaseComposeRenderer.renderCompose() and forwarded it to ComposeRenderer.Compose() so callers can apply standard Compose modifiers at the renderer boundary.
Metro to 1.0.0
Moved the Navigation 3 recipe to commonMain now that it is KMP ready.
Migrate the blueprints/starter app from kotlin-inject to Metro, see #178
Add a compiler plugin for Metro extensions, see #179. The compiler plugin is now used by default, but the KSP implementations can be enabled by setting the Gradle property -Papp.platform.metro.ksp=true.
Convert the sample app to Metro, see #173. With the recent Kotlin and Metro version updates, issues we saw with Metro and targets other than Android/JVM are solved, and Metro is now the recommended default for dependency injection.
Added support for Metro as dependency injection framework. User can choose between kotlin-inject-anvil and Metro. For more details see the documentation for how to setup and use both dependency injection frameworks with App Platform.
Changed the provided CoroutineScope within ViewRenderer from a custom scope to MainScope(), see #124.
Disallow changing the parent View for ViewRenderers. For a different parent view RendererFactory.getRenderer() will now return a new Renderer instead of the cached instance. The cached instance is only returned for the same parent view, see #139.
Added a blueprint project for App Platform that can be copied to spin up new projects faster, see #63.
Added support for back press events in Presenters. The API is similar to the one from Compose Multiplatform and Android Compose. See the documentation in the wiki for more details.
Breaking change: Changed the constructor from ComposeAndroidRendererFactory to two factory functions instead. A new API allows you to use this factory without an Android View as parent, see #39.