Change Log¶
Unreleased¶
Added¶
Changed¶
Deprecated¶
Removed¶
Fixed¶
- Allow the default Metro compiler integration to use
@ContributesBindingonScopedclasses with an explicit qualified set binding.
Security¶
Other Notes & Contributions¶
0.2.2 - 2026-09-25¶
Added¶
- Add a
startparameter toScope.launch()to choose aCoroutineStartmode; previously compiled callers must recompile.
Changed¶
- Upgrade Metro to
1.4.5.
Fixed¶
- Fix Metro compiler extension compatibility with Kotlin
2.5.0-Beta1while retaining Kotlin2.4.20support. - Allow canceled
Scope.destroyAndWait()calls to be retried.
0.2.1 - 2026-09-19¶
Added¶
- Add
LocalRendererFactoryandRender()for rendering child models without injecting a factory; Compose renderer factories provide the local automatically. - Add
RendererFactory.renderCompose()to look up and render a model in one call, with optional modifier and renderer ID. - Publish module structure APIs in
software.ralf.app.platform:module-structure. - Add
enableModuleStructureNestingCheckto validate library nesting from a root or folder project, with exact-path exceptions and an opt-out.
0.2.0 - 2026-09-18¶
Added¶
- Add
Scope.destroyAndWait()to destroy a scope and its children and wait for their coroutine cleanup to finish.
Changed¶
- Breaking change: Rename the Molecule-specific presenter API to Compose-focused names, including
MoleculePresentertoComposePresenter, its scope APIs, Gradle DSL options, and:presenter-molecule:*artifacts to:presenter-compose:*. - Make the Metro compiler extension more resilient to Kotlin compiler upgrades by using Metro’s compiler compat APIs.
- Start launched coroutines from
Scoped.onEnterScopeafter allScopedinstances have been registered to avoid asynchronous race conditions. - Use Metro binding containers for presenter implementation providers.
- Upgrade Metro to
1.4.4. - Upgrade Android Compose to
1.12.1.
Fixed¶
- Enforce module structure dependency rules for Android, JVM, and multiplatform test compilations with a per-module opt-out.
0.1.5 - 2026-09-07¶
Changed¶
- Breaking change: Upgrade Kotlin to
2.4.20. This is a breaking change if you use Metro over kotlin-inject. Recompile your source code with Kotlin 2.4.20.
0.1.4 - 2026-09-03¶
Added¶
- Add project-neutral coding agent skills for App Platform module structure, scopes, presenters, renderers, templates, and testing.
- Add experimental
withLocalRetainedValuesStore()for retaining childMoleculePresenterstate with caller-owned managed stores while it temporarily leaves the composition. - Expose
String.moduleTypeFromProjectPath()for parsing module types without aProjectinstance.
Changed¶
- Mark
BaseModelas stable so Compose treatsMoleculePresentermodels consistently through the shared interface. - Allow constructing
MoleculePresenterinstances with SAM syntax. - Upgrade KSP to
2.3.11. - Upgrade Compose Multiplatform to
1.12.0.
Removed¶
- Breaking change: Remove
returningCompositionLocalProvider()from the Molecule presenter API; use Compose runtime’s stablewithCompositionLocal()orwithCompositionLocals()instead.
Fixed¶
- Preserve decorated coroutine scope lifetimes in
FakeMoleculeScopeFactoryinstead of creating unmanaged test jobs.
0.1.3 - 2026-08-21¶
Added¶
- Allow robots to be contributed to any scope and find them automatically in child scopes during tests.
Changed¶
- Breaking binary change: Robot waiting helpers accept suspending callbacks and enforce timeouts across callback execution and polling delays; existing Kotlin call sites remain source-compatible, but previously compiled consumers must recompile.
- Upgrade Gradle to
9.7.1and replace deprecated rawProjectdependency notation with explicitProjectDependencydeclarations for Gradle 10 compatibility.
Fixed¶
- Enforce module structure dependency rules for Android and JVM test fixtures while allowing fixtures to use test-only modules.
- Preserve assertion failures when
waitUntilCatchingtimes out so test runners report failed assertions correctly.
0.1.2 - 2026-08-13¶
Changed¶
- Upgrade Metro to
1.4.2.
0.1.1 - 2026-07-30¶
Added¶
- Add the advanced
blueprints/list-detailKotlin Multiplatform blueprint with a modular architecture, adaptive phone and tablet navigation, bundled character portraits, four platform shells, and dedicated CI. The web app is available in the docs. - Add an
enableDependencyCheckmodule structure option that skips per-target dependency checks while preserving default module dependencies and lifecycle tasks.
Changed¶
- Compile the App Platform Gradle plugin against Android Gradle Plugin
9.3.1APIs and raise the plugin’s required JVM version and published bytecode target from Java 11 to Java 17.
Fixed¶
- Give module-structured projects unique default archive names based on their artifact IDs while preserving explicitly configured archive names.
0.1.0 - 2026-07-17¶
Changed¶
- Breaking change: Move App Platform packages, Maven coordinates, and the Gradle plugin ID from
software.amazon.app.platformtosoftware.ralf.app.platform. Consumers must update their plugin IDs, dependency coordinates, and imports together.
0.0.17 - 2026-07-15¶
IMPORTANT: This is the last release under the software.amazon namespace. The next release will use software.ralf.
Changed¶
- Upgrade Kotlin to
2.4.10, KSP to2.3.10, Metro to1.3.2, Compose Multiplatform to1.11.1, and AndroidX Compose to1.11.4. - Clarify the project’s independent ownership and remove obsolete Amazon contribution, conduct, and attribution files.
0.0.16 - 2026-07-02¶
IMPORTANT: Ownership of this project was transferred from amzn/app-platform to vRallev/app-platform.
Added¶
- Add
robot-compose-multiplatform-publicautomatically to Kotlin Multiplatform:apptest source sets when Compose UI is enabled, so Compose robot tests can run without a manual dependency.
Changed¶
- Upgrade Metro to
1.3.0. - Use JDK 25 for the repository build and CI toolchain while keeping published module JVM compatibility unchanged.
- Update documentation, publishing metadata, and generated site links for the repository move to
vRallev/app-platform.
Fixed¶
- Make the App Platform Gradle plugin work with AGP built-in Kotlin Android application and library modules that do not apply
org.jetbrains.kotlin.android, including Metro dependencies, module-structure dependencies, and compiler-plugin classpaths. - Treat
:apps:,:app-*, and:apps-*project path groups as app modules so module-structure checks allow those app boundaries to depend on:implmodules.
0.0.15 - 2026-06-15¶
Added¶
- Add an opt-in
allowLibraryImplToImplDependenciesmodule structure option for dependencies between:implmodules within the same library.
Changed¶
- Upgrade Kotlin to
2.4.0, Android Lint to9.2.1, KSP to2.3.9, and kotlin-compile-testing to0.13.0.
0.0.14 - 2026-05-20¶
Added¶
- Add
@ExperimentalAppPlatformin:common:publicfor 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
ReturningSaveableStateHolderin:presenter-molecule:publicfor preservingrememberSaveablestate in value-returning Molecule presenter subtrees. - Add experimental Navigation 3 presenter backstack APIs and the
enableMoleculePresenterBackstackGradle plugin option.
0.0.13 - 2026-05-14¶
Changed¶
- Use the
Dispatchers.Mainas default main dispatcher instead of the immediate main dispatcher. - Upgrade Kotlin to
2.3.21, Compose Multiplatform to1.11.0, Metro to1.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).
Fixed¶
- Make the App Platform Gradle plugin compatible with AGP 9’s Android KMP and built-in Kotlin behavior while staying compatible with AGP 8.
0.0.12 - 2026-05-12¶
Changed¶
@ContributesRobotno longer requires@Injectfor robots with constructor parameters. The generated contribution now provides a constructor-calling@Providesfunction that injects the same arguments.@ContributesRendererno longer requires@Injectfor renderers with constructor parameters. The generated contribution now provides a constructor-calling@Providesfunction and reports an error when multiple constructors make that provider ambiguous.@ContributesScopedno longer requires@Injectfor classes with constructor parameters. The generated contribution now provides a constructor-calling@Providesfunction and reports an error when multiple constructors make that provider ambiguous.
0.0.11 - 2026-05-03¶
Changed¶
- Breaking change: Added an optional
Modifierparameter toBaseComposeRenderer.renderCompose()and forwarded it toComposeRenderer.Compose()so callers can apply standard Compose modifiers at the renderer boundary. - Metro to
1.0.0 - Moved the Navigation 3 recipe to
commonMainnow that it is KMP ready.
Removed¶
- Removed Apple x86_64 targets from the repository builds by dropping
iosX64where it was still configured, aligning with Compose Multiplatform’s removal of Apple x86_64 target support: https://kotlinlang.org/docs/multiplatform/whats-new-compose-111.html#dropped-support-for-apple-x86-64-targets
0.0.10 - 2026-04-20¶
Added¶
- 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.
Changed¶
- Metro to
1.0.0-RC2
0.0.9 - 2026-04-13¶
Added¶
- 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.
Changed¶
- Kotlin to
2.3.20 - Gradle to
9.4.1 - metro to
0.13.2
0.0.8 - 2026-01-27¶
Added¶
- Added a recipe for
Presenterintegration with SwiftUI, see #154.
Changed¶
- Kotlin to
2.2.21, see #161 - KSP to
2.3.4 - kotlin-inject to
0.9.0 - kotlin-inject-anvil to
0.1.7 - metro to
0.10.1 - Remove testing for KSP1 and use KSP2
Other Notes & Contributions¶
- Special thanks to @rvenable for creating the original Swift APIs that served as the foundation for #154!
0.0.7 - 2025-09-26¶
Changed¶
- Changed the min SDK from 21 to 23, see #149.
Fixed¶
- Fix NPE when removing Android Views from multiple child renderers with the same parent on activity destruction, see #150.
0.0.6 - 2025-09-05¶
Added¶
- Added support for Metro as dependency injection framework. User can choose between
kotlin-inject-anviland Metro. For more details see the documentation for how to setup and use both dependency injection frameworks with App Platform.
Changed¶
- Changed the provided
CoroutineScopewithinViewRendererfrom a custom scope toMainScope(), see #124. - Disallow changing the parent View for
ViewRenderers. For a different parent viewRendererFactory.getRenderer()will now return a newRendererinstead of the cached instance. The cached instance is only returned for the same parent view, see #139.
Deprecated¶
- Deprecated
diComponent()and introducekotlinInjectComponent()as replacement, see #106. - Deprecated
RendererFactory.getChildRendererForParent().RendererFactory.getRenderer()now provides the same functionality, see #139.
Fixed¶
- Fix and stop suppressing NPE when removing Android Views, which lead to an inconsistent state and potential crashes laters, see #136.
- Cancel the
CoroutineScopeinViewRendererin rare cases whereonDetachfor the view isn’t triggered. This caused potential leaks, see #140.
0.0.5 - 2025-08-15¶
Added¶
- Added support for the new Android-KMP library plugin in App Platform’s Gradle plugin.
- Added a recipe for how to use the Navigation 3 library with App Platform.
Changed¶
- Upgraded Kotlin to
2.2.10.
0.0.4 - 2025-07-25¶
Added¶
- Added a search field to the wiki.
- 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. - Added a recipes application showing solutions to common problems. All solutions have been documented in the wiki.
Changed¶
- Upgraded Kotlin to
2.2.0.
0.0.3 - 2025-05-28¶
Added¶
- Wasm JS is now officially supported and artifacts are published.
Changed¶
- Snapshots are now published to the Central Portal Snapshots repository at https://central.sonatype.com/repository/maven-snapshots/.
- Upgraded Kotlin to
2.1.21.
Removed¶
- Removed the deprecated
onEventfunction used inMoleculePresenters. This is no longer needed since Kotlin 2.0.20, see #21.
0.0.2 - 2025-05-02¶
Changed¶
- Breaking change: Changed the constructor from
ComposeAndroidRendererFactoryto two factory functions instead. A new API allows you to use this factory without an Android View as parent, see #39.
Deprecated¶
- Deprecated the
onEventfunction used inMoleculePresenters. This is no longer needed since Kotlin 2.0.20, see #21.
Fixed¶
- Made the
ModuleStructureDependencyCheckTaskcacheable, see #19. - Fixed violations for Gradle’s project isolation feature, see #20.
Other Notes¶
- Updated the sample application with a shared transition animation to highlight how animations can be implemented for
Templateupdates, see #37.
0.0.1 - 2025-04-17¶
- Initial release.