401 KiB
1.11.0-alpha01 (December 2025)
Changes since 1.10.0-rc02
Migration Notes
Multiple Platforms
- The project has migrated to Kotlin language version and API version
2.2. The projects depending on Compose Multiplatform need to use the same version or newer #2614
Features
Multiple Platforms
- Clicking outside of any focusable node using the mouse will now clear focus from the currently focused node, if any. This behavior can be disabled by setting
isClearFocusOnMouseDownEnabled = falseinComposePanel,ComposeWindoworComposeDialog#2533 - Migrate window insets padding modifiers from
composedAPI toInsetsPaddingModifierNode#2572 - Add enter end exit animation for
Dialog. It can be disabled viaDialogProperties.animateTransitionor via global feature flagComposeUiFlags.isDialogAnimationEnabled#2596
Desktop
- Allow specifying AWT
AccessibleRoledirectly viaSemanticsPropertyReceiver.awtRole#2577 - Menu items in the context menu for text fields and
SelectionContainercan now be disabled #2617
Gradle Plugin
- Add a compatibility check for runtime libraries to ensure consistency with the expected Compose version #5485
Fixes
iOS
- Fix incorrectly consumed insets in
ModalBottomSheet#2572 - The rendering queue is running with the highest priority when
parallelRenderingis enabled #2623 - Fix possible text styles cache corruption (text color is sometimes randomly black) #2629
Desktop
- Fix changing the pointer from one custom cursor to another #2613
- Fix exception/crash when pasting in
TextFieldin headless mode #2612 - When there is no selection in
SelectionContainer, the "Copy" menu item will be disabled #2617 - Fix unnecessary redraws caused by
WindowInsetsRulersimplementation usingRulerScope.coordinates.size#2628
Web
WebElementViewis now available inwebMainsource set #2614- Deprecated
CanvasBasedWindowhas been deleted #2614
Resources
- Fix crash in
getSystemEnvironmenton headless desktop #5471
Lifecycle
- Fix saveable state restoration on non-android targets #2615
Components
Gradle plugin
org.jetbrains.compose version 1.11.0-alpha01
Libraries
| Library group | Coordinates | Based on Jetpack |
|---|---|---|
| Runtime | org.jetbrains.compose.runtime:runtime*:1.11.0-alpha01 |
Runtime 1.11.0-alpha01 |
| UI | org.jetbrains.compose.ui:ui*:1.11.0-alpha01 |
UI 1.11.0-alpha01 |
| Foundation | org.jetbrains.compose.foundation:foundation*:1.11.0-alpha01 |
Foundation 1.11.0-alpha01 |
| Material | org.jetbrains.compose.material:material*:1.11.0-alpha01 |
Material 1.11.0-alpha01 |
| Material3 | org.jetbrains.compose.material3:material3*:1.11.0-alpha01 |
Material3 1.5.0-alpha10 |
| Material3 Adaptive | org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha03 |
Material3 Adaptive 1.3.0-alpha05 |
| Lifecycle | org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha07 |
Lifecycle 2.10.0 |
| Navigation | org.jetbrains.androidx.navigation:navigation-*:2.9.1 |
Navigation 2.9.4 |
| Navigation3 | org.jetbrains.androidx.navigation3:navigation3-*:1.1.0-alpha01 |
Navigation3 1.1.0-alpha01 |
| Navigation Event | org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-rc02 |
Navigation Event 1.0.1 |
| Savedstate | org.jetbrains.androidx.savedstate:savedstate*:1.4.0 |
Savedstate 1.4.0 |
| WindowManager Core | org.jetbrains.androidx.window:window-core:1.5.1 |
WindowManager 1.5.1 |
1.10.0-rc02 (December 2025)
Changes since 1.10.0-rc01
Fixes
Multiple Platforms
- Fix possible corruption of the layout nodes tree #2611
iOS
- Fix crash in accessibility when
SemanticNodeis not attached #2616
Components
Gradle plugin
org.jetbrains.compose version 1.10.0-rc02
Libraries
| Library group | Coordinates | Based on Jetpack |
|---|---|---|
| Runtime | org.jetbrains.compose.runtime:runtime*:1.10.0-rc02 |
Runtime 1.10.0 |
| UI | org.jetbrains.compose.ui:ui*:1.10.0-rc02 |
UI 1.10.0 |
| Foundation | org.jetbrains.compose.foundation:foundation*:1.10.0-rc02 |
Foundation 1.10.0 |
| Material | org.jetbrains.compose.material:material*:1.10.0-rc02 |
Material 1.10.0 |
| Material3 | org.jetbrains.compose.material3:material3*:1.10.0-alpha05 |
Material3 1.5.0-alpha08 |
| Material3 Adaptive | org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha02 |
Material3 Adaptive 1.3.0-alpha03 |
| Lifecycle | org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha06 |
Lifecycle 2.10.0 |
| Navigation | org.jetbrains.androidx.navigation:navigation-*:2.9.1 |
Navigation 2.9.4 |
| Navigation3 | org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha06 |
Navigation3 1.0.0 |
| Navigation Event | org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-rc02 |
Navigation Event 1.0.1 |
| Savedstate | org.jetbrains.androidx.savedstate:savedstate*:1.4.0 |
Savedstate 1.4.0 |
| WindowManager Core | org.jetbrains.androidx.window:window-core:1.5.1 |
WindowManager 1.5.1 |
1.10.0-rc01 (December 2025)
Changes since 1.10.0-beta02
Migration Notes
iOS
- Removed deprecated since 1.8.0
defaultUIKitMain(). Please follow up-to-date guidelines to create an iOS application #2578
Fixes
Multiple Platforms
- Fix crash when selecting text that only contains inline content #2600
iOS
- Fix
NSRangeExceptionon back gesture #2605 - Fix focusing of
DialogandPopupwhen the Full Keyboard Mode is enabled #2606
Desktop
- [macOs] Fix
[MTLTextureDescriptorInternal validateWithDevice:]crash when using zero-sizeComposePanelwithcompose.swing.render.on.graphics=true#2585 - [Linux] Support distributions with glibc 2.27 #2585
- Fixed a race condition that occurred when multiple processes attempted to unpack Skiko binary files at startup #2585
Resources
- (prerelease fix) Fixed compatibility with Kotlin 2.2.20 on Web #5484
Lifecycle
- (prerelease fix) Fixed
lifecycle-viewmodel-compose2.10 compatibility with Compose1.9.*#2579
SavedState
- (prerelease fix) Fix
SavedStateHandlesinitialization on web #2576
Components
Gradle plugin
org.jetbrains.compose version 1.10.0-rc01
Libraries
| Library group | Coordinates | Based on Jetpack |
|---|---|---|
| Runtime | org.jetbrains.compose.runtime:runtime*:1.10.0-rc01 |
Runtime 1.10.0-rc01 |
| UI | org.jetbrains.compose.ui:ui*:1.10.0-rc01 |
UI 1.10.0-rc01 |
| Foundation | org.jetbrains.compose.foundation:foundation*:1.10.0-rc01 |
Foundation 1.10.0-rc01 |
| Material | org.jetbrains.compose.material:material*:1.10.0-rc01 |
Material 1.10.0-rc01 |
| Material3 | org.jetbrains.compose.material3:material3*:1.10.0-alpha05 |
Material3 1.5.0-alpha08 |
| Material3 Adaptive | org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha02 |
Material3 Adaptive 1.3.0-alpha03 |
| Lifecycle | org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha06 |
Lifecycle 2.10.0 |
| Navigation | org.jetbrains.androidx.navigation:navigation-*:2.9.1 |
Navigation 2.9.4 |
| Navigation3 | org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha06 |
Navigation3 1.0.0 |
| Navigation Event | org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-rc01 |
Navigation Event 1.0.0 |
| Savedstate | org.jetbrains.androidx.savedstate:savedstate*:1.4.0 |
Savedstate 1.4.0 |
| WindowManager Core | org.jetbrains.androidx.window:window-core:1.5.1 |
WindowManager 1.5.1 |
1.10.0-beta02 (November 2025)
Changes since 1.10.0-beta01
Fixes
Multiple Platforms
- Fixed
LocalInputModeManager.current.inputModenot being reset between tests #2548
iOS
- Fix the spoken text in merged accessibility nodes #2539
- Fix an issue where accessibility elements inside other accessibility elements may not be accessible #2539
- Fix crash on iOS older than 17 when accessibility is enabled #2541
Desktop
- Fix the accessibility issue where screen readers cannot review text in a text field #2553
- Fix the accessibility issue where scrollable text fields are not accessible for screen readers #2553
- Children of nodes with
isTraversalNodesemantics are now ordered according to theirtraversalIndex#2544 - (prerelease fix) Fixed issue where it's unable to create run task 'jvmDesktopRun' #5477
- (prerelease fix) Fixed issue where the Java installation could not be found #5477
Web
- Fix the issue where Hangul input behaves inconsistently after deleting with Backspace #2559
Resources
- Fix resource gradle tasks invocation on AGP < 9.0.0 for Android Studio previews #5478
- Update iOS resource copying to an iOS app bundle to support Swift Export libraries #5480
SavedState
- All platforms have
HasDefaultViewModelProviderFactoryimplementation now, and it provides an ability to usecreateSavedStateHandle()function without a navigation library #2554
Components
Gradle plugin
org.jetbrains.compose version 1.10.0-beta02
Libraries
| Library group | Coordinates | Based on Jetpack |
|---|---|---|
| Runtime | org.jetbrains.compose.runtime:runtime*:1.10.0-beta02 |
Runtime 1.10.0-beta02 |
| UI | org.jetbrains.compose.ui:ui*:1.10.0-beta02 |
UI 1.10.0-beta02 |
| Foundation | org.jetbrains.compose.foundation:foundation*:1.10.0-beta02 |
Foundation 1.10.0-beta02 |
| Material | org.jetbrains.compose.material:material*:1.10.0-beta02 |
Material 1.10.0-beta02 |
| Material3 | org.jetbrains.compose.material3:material3*:1.10.0-alpha05 |
Material3 1.5.0-alpha08 |
| Material3 Adaptive | org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha02 |
Material3 Adaptive 1.3.0-alpha03 |
| Lifecycle | org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha05 |
Lifecycle 2.10.0-rc01 |
| Navigation | org.jetbrains.androidx.navigation:navigation-*:2.9.1 |
Navigation 2.9.4 |
| Navigation3 | org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha05 |
Navigation3 1.0.0-rc01 |
| Navigation Event | org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-beta02 |
Navigation Event 1.0.0-rc01 |
| Savedstate | org.jetbrains.androidx.savedstate:savedstate*:1.4.0-rc01 |
Savedstate 1.4.0 |
| WindowManager Core | org.jetbrains.androidx.window:window-core:1.5.0 |
WindowManager 1.5.0 |
1.9.3 (November 2025)
Changes since 1.9.2
Fixes
iOS
- Fix crash on iOS older than 17 when accessibility is enabled #2541
Gradle Plugin
- Support AGP 9.0.0 #5391
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.3. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0. Based on Jetpack Compose Material3 1.4.0 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0. Based on Jetpack Compose Material3 Adaptive 1.2.0 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.6. Based on Jetpack Lifecycle 2.9.4 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.1. Based on Jetpack Navigation 2.9.4 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate*:1.3.6. Based on Jetpack Savedstate 1.3.3 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0. Based on Jetpack WindowManager 1.4.0
1.10.0-beta01 (November 2025)
Changes since 1.10.0-alpha03
Highlights
Desktop
- Compose Hot Reload Gradle plugin is bundled with Compose Gradle plugin (no need to configure it separately) #5444
Known Issues
Multiple Platforms
- Due to the bundled Hot Reload Gradle plugin, Compose Multiplatform requires Kotlin version 2.1.20 or higher #5444
Migration Notes
Multiple Platforms
- Remove experimental annotation from
usePlatformInsets,useSoftwareKeyboardInsetandscrimColorinDialogProperties#2495 - Remove experimental annotation from
usePlatformDefaultWidth,usePlatformInsetsinPopupProperties#2495 - Deprecation level of
Popupoverloads withoutPopupPropertiesparameter changed fromWARNINGtoERROR#2495 - Dependency aliases in Gradle plugin (e.g.
compose.ui) are now deprecated. Use provided direct artifact coordinates and add them to the version catalog #5462
Features
iOS
- Add support for self-sizing of UIKit interop views in Compose #2485
- Add experimental
UIKitInteropProperties.placedAsOverlayflag, which allows to place interop views above the Compose canvas. This allows interop views with a transparent background or shader effect to be used #2501
Web
- Esc button calls back navigation event on the web now #2499
- Add support of
importantkeyword for CSS properties #5439
Navigation
- Published
org.jetbrains.compose.material3.adaptive:adaptive-navigation3library #2516 - Add a new configuration option in
ComposeUIViewControllerto set end-edge gestures behavior #2519
Fixes
Multiple Platforms
- Align
roundToPx()behavior between platforms:NaNvalue produces0instead ofIllegalArgumentExceptionon non-JVM platforms now #2526 - Added previously missing
ExperimentalComposeUiApiannotation to platform-specificDragAndDropTransferData,DragAndDropEventandClipEntryconstructors on Desktop and Web. Working with these APIs already requires this annotation due to types of parameters, so it wasn't supposed to be marked as "stable" yet. You can follow CMP-7624 to track the updates about finalizing the shape of these APIs #2538
iOS
- Fix
onKeyEventhandling whenFull Keyboard Accessis enabled #2494 - Fix incorrect tap responses in
DialogwhenLocalDensityis modified #2527 - (prerelease fix) Fix crash when interacting with scrollables with overscroll #2532
Desktop
- Fix
SwingPanelblocking mouse wheel scroll events from going to its parent #2486
Web
- Correct drag-and-drop behaviour on mobile devices #2510
- Fix incorrect interpretation of
ontouchendevents #2490 - Unblock autocomplete and the other keyboard features on mobile iOS #2529
- Correct behaviour when a virtual keyboard suggestion was accepted while the cursor was in the middle of the word #2530
Resources
- Use Web Cache API for all resources to avoid repeated and redundant HTTP requests #5379
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.10.0-beta01. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.10.0-alpha04. Based on Jetpack Compose Material3 1.5.0-alpha07 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha01. Based on Jetpack Compose Material3 Adaptive 1.3.0-alpha02 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha04. Based on Jetpack Lifecycle 2.10.0-beta01 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.1. Based on Jetpack Navigation 2.9.4 -
Navigation 3 libraries
org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha04. Based on Jetpack Navigation 3 -
Navigation Event library
org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-beta01. Based on Jetpack Navigation Event 1.0.0-beta01 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate*:1.4.0-beta01. Based on Jetpack Savedstate 1.4.0-rc01 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.5.0-rc01. Based on Jetpack WindowManager 1.5.0
1.9.2 (October 2025)
Changes since 1.9.1
Fixes
Multiple Platforms
- Prevent possible symbol duplicates in
savedstate-composedue to redirects to Google'sruntime-saveablethat supports all KMP platforms #2503
Web
- Removed an outline on a
Canvaselement when it's focused #2450 - Fix focus with Tab behaviour in Text Fields #2452
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.2. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0. Based on Jetpack Compose Material3 1.4.0 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0. Based on Jetpack Compose Material3 Adaptive 1.2.0 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.5. Based on Jetpack Lifecycle 2.9.4 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.1. Based on Jetpack Navigation 2.9.4 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate*:1.3.5. Based on Jetpack Savedstate 1.3.3 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0. Based on Jetpack WindowManager 1.4.0
1.10.0-alpha03 (October 2025)
Changes since 1.10.0-alpha02
Migration Notes
Multiple Platforms
- (prerelease fix) Disabled (by default) the new text context menus until they are fully supported. You can enable them by setting
ComposeFoundationFlags.isNewContextMenuEnabled = true#2466 - Deprecate
org.jetbrains.compose.ui.tooling.preview.Previewannotation in favor ofandroidx.compose.ui.tooling.preview.Previewto reduce variety of Preview annotations #5453
iOS
- Remove experimental annotation from
LocalUIView#2478
Desktop
- Deprecate
androidx.compose.desktop.ui.tooling.preview.Previewannotation in favor ofandroidx.compose.ui.tooling.preview.Previewto reduce variety of Preview annotations #2474
Features
Lifecycle
- Publish multiplatform
lifecycle-viewmodel-navigation3library #2476
Fixes
Multiple Platforms
- (prerelease fix) Provide
LocalWindowInfo.current.containerDpSizevalue #2493
iOS
- Fix crash when
parallelRenderingis enabled #2448 - Fix text context menu interaction on
Popups andDialogs #2434 - Fix crash when dragging two Scrollable components with two fingers #2456
- Fix the crash that occurs when the magnifier appears in text fields that are zero size #2460
- Fix Lifecycle status updates for multi-window applications using
UIScenenotifications #2472 - Support updating of the
WindowInfo.isWindowFocusedproperty when the window's state changes #2482 - Fix the text removal issue when inputting text using dictation #2488
Desktop
- ComposePanel now re-dispatches unconsumed mouse wheel events, allowing scrollable components beneath to be scrolled. To disable this, set the system property
"compose.swing.redispatchMouseWheelEvents"to"false"#2425 - Fix background flashing when showing a window/dialog #2471
Web
- Removed an outline on a
Canvaselement when it's focused #2450 - Fix focus with Tab behaviour in Text Fields #2452
- Mobile. Composite input. When a syllable block is created, a new block is added instead of replacing the old one #2454
Resources
- Fixed an issue where resources were not copied when packaging the macOS native target, causing the application to crash when it attempted to read those resources #5431
- Fixed resources generated code to be reproducible between different machines #5446
- Fix a crash when calling
getStringand the Locale has no region specified #5447 - Use the non-empty font as the default when awaiting a asynchronous request completion on the web #5456
Navigation
- Ignore back gestures in navigation in case of open dialog for non-android targets #2439
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.10.0-alpha03. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.10.0-alpha03. Based on Jetpack Compose Material3 1.5.0-alpha06 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-beta01. Based on Jetpack Compose Material3 Adaptive 1.2.0-rc01 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha03. Based on Jetpack Lifecycle 2.10.0-alpha05 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.1. Based on Jetpack Navigation 2.9.4 -
Navigation 3 libraries
org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha03. Based on Jetpack Navigation 3 -
Navigation Event library
org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-alpha02. Based on Jetpack Navigation Event 1.0.0-beta01 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.4.0-alpha03. Based on Jetpack Savedstate 1.4.0-beta01 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.5.0-beta01. Based on Jetpack WindowManager 1.5.0
1.9.1 (October 2025)
Changes since 1.9.0
Migration Notes
Multiple Platforms
-
compose.material3alias from Gradle plugin now points toorg.jetbrains.compose.material3:material3:1.9.0(based on Jetpack Compose Material31.4.0), it wasorg.jetbrains.compose.material3:material3:1.8.2(based on Jetpack Compose Material31.3.2) in Compose Multiplatform1.9.0. If you want to stay on the same minor version, replace the alias by an explicit dependency: #5441// was implementation(compose.material3) // replace by implementation("org.jetbrains.compose.material3:material3:1.8.2")
Fixes
iOS
- Add ability to reach internal accessibility elements inside accessibility nodes #2416
- Fix input session restarts triggered by
PlatformImeOptionsImplnot being@Immutable#2413 - Fix crash when removing characters after string replacement #2361
- Fix context menu appearance for text fields with transformation #2377
Desktop
ComposePanelcan now re-dispatch unconsumed mouse wheel events, allowing scrollable components beneath to be scrolled. To enable this behavior, set the system property"compose.swing.redispatchMouseWheelEvents"to"true"#2438
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.1. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0. Based on Jetpack Compose Material3 1.4.0 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha05. Based on Jetpack Compose Material3 Adaptive 1.2.0-alpha10 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.5. Based on Jetpack Lifecycle 2.9.4 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.1. Based on Jetpack Navigation 2.9.4 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.5. Based on Jetpack Savedstate 1.3.3 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0. Based on Jetpack WindowManager 1.4.0
1.10.0-alpha02 (October 2025)
Changes since 1.10.0-alpha01
Highlights
Multiple Platforms
androidx.compose.ui.tooling.preview.Previewannotation is now available fromcommonMainsource set #2424
Navigation
- Provide required
NavigationEventDispatcherOwnerfor a correct Navigation3 support #2382
Features
Multiple Platforms
- Provide
LocalLifecycleOwnerinsiderunComposeUiTestby default #2400
iOS
- Add API to configure
UITextInputTraits.writingToolsBehaviorwithPlatformImeOptions#2435
Desktop
- Experimental
-Dskiko.gpu.resourceCacheLimitVM property is introduced to limit GPU resource cache used for one window (default is 256M) #2422
Resources
- Add
setResourceReaderAndroidContextto configure Android context in cases when a provider initialization is not available #5434
Navigation
- Basic support of the navigation3 library #2436
Fixes
Multiple Platforms
- (prerelease fix) Fix "Cinterop fails with an error when Compilation works fine" #2386
- (prerelease fix) Fix "warning: KLIB resolver: Could not find" #2386
iOS
- Clear
TextFieldfocus when another view becomes first responder #2337 - Fix context menu appearance for text fields with transformation #2377
- Fix input session restarts triggered by
PlatformImeOptionsImplnot being@Immutable#2413 - Add ability to reach internal accessibility elements inside accessibility nodes #2416
Desktop
- Fixed
ComposePanelnot initially focusing the first focusable node, when running in JetBrains Runtime JVM #2384 - Fixed background flashing when a window or dialog are closed #2403
- Fix "ComposePanel doesn't use hardware acceleration with
RenderSettings.SwingGraphicson Linux" #2422
Resources
- Fix resource access in a Robolectric test environment #5433
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.10.0-alpha02. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.10.0-alpha02. Based on Jetpack Compose Material3 1.5.0-alpha04 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha07. Based on Jetpack Compose Material3 Adaptive 1.2.0-beta03 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha02. Based on Jetpack Lifecycle 2.10.0-alpha04 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0. Based on Jetpack Navigation 2.9.1 -
Navigation Event library
org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-alpha01. Based on Jetpack Navigation Event 1.0.0-alpha09 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.4.0-alpha02. Based on Jetpack Savedstate 1.4.0-alpha03 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.5.0-alpha02. Based on Jetpack WindowManager 1.5.0
1.9.0 (September 2025)
Changes since 1.8.2
See also What's new.
Highlights
Web
- Added a
WebElementViewComposable function for embedding the absolutely positioned HTML content in Compose for web target. It's supported only when usingComposeViewportentry point and it's not supported withCanvasBasedWindow, which is deprecated now #2145 - Text context menu is supported on web platforms for both modes: mobile and desktop #2207
- Introduce the basic support of accessibility in the web target #2188
Migration Notes
Multiple Platforms
- Material3 versioning is decoupled for the Compose Multiplatform 1.9.* release due the upstream Jetpack Compose Material3 1.4 has not been released as stable yet #5360
compose.material3now points to the latest stable Material3 version, 1.8.2. If the latest Material3 features are needed, please include it this way: #5360implementation("org.jetbrains.compose.material3:material3:1.9.0-beta06")- [If you use
org.jetbrains.compose.material3:material3:1.9.0-beta06]kotlinx-datetimeis updated to0.7.1. If you also use it in your projects, please update it to this version to ensure compatibility #2276
iOS
- Remove experimental attribute from
UIKitInteropInteractionMode#2215
Desktop
WindowandDialogWindowoverloads that create aComposeWindow/ComposeDialoghave been renamed toSwingWindow/SwingDialogand the old versions have been deprecated #2141- When the window is iconified, converting to/from screen coordinates (with e.g.
LayoutCoordinates.positionOnScreen()) will returnOffset.Unspecified#2163 - Deprecated experimental
Modifier.mouseClickableis removed. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-desktop-mouse-events.html for alternatives #2194 - Kotlin 2.1 is required for all platforms including JVM (it was required only for native and web before) #2276
Web
fun ComposeViewportwithviewportContainerId: String?parameter now can be called from a web-commonfun main(k/js and k/wasm) #2226CanvasBasedWindowis deprecated, useComposeViewportinstead. UnlikeCanvasBasedWindow, which expect as an input param the id to theHTMLCanvasElementthat will be used for rendering,ComposeViewportone passesparentContainer(and corresponding HTML Canvas element will be created automatically). By default such container isdocument.body#2280- Setting
org.jetbrains.compose.experimental.jscanvas.enabled=trueis not required anymore when having a kotlin/js target #5340
Gradle Plugin
- The Compose Gradle plugin requires the Kotlin Gradle plugin version 2.+ now. Old
org.jetbrains.compose.compileris not supported anymore and the API to configure it was removed #5283
Features
Multiple Platforms
- Adopted a change in
ComposeUiTestAPI. TheblockinrunComposeUiTestissuspendnow. It allows to callawaitIdleand other suspend functions. It ensures a correct execution of a test on all platforms. See the web specifics inkotlinx.coroutines.test.runTestdocumentation #2066 - Support customizable shadows #2183
- Extended the
@Preview(org.jetbrains.compose.ui.tooling.preview) annotation with the following parameters: name, group, widthDp, heightDp, locale, showBackground, backgroundColor. IDE (IJ or AS) will pick up these parameters in the same way it works forandroidxPreview annotations #5339
iOS
- Add support for native IME configuration with
PlatformImeOptions#2108 - Add support for
keepScreenOnmodifier #2180 - Support new context menu API with default menu #2214
- Add support for frame rate voting #2205
- Support scroll commands with Voice Control #2234
- Implement accessibility scroll to focused interop views #2228
Desktop
- Add accessibility role for
Switch, reporting it as a checkbox #2136 - Added
SwingFrameandSwingDialogcomposables that allow configuring the window/dialog before it is shown #2139 - Full
AnnotatedStringis available as a data flavor inClipEntry, instead of only its text #2092 - Add
RenderSettings.SwingGraphicsoption forComposePanel.renderSettingsargument #2071 - Basic support for new context menu API #2196
- Added experimental support for save and restore compose state.
ComposePanel,ComposeWindowandComposeDialognow hassavedStateconstructor parameter to restore previous state andsaveStatefunction to save the current state for later use #2225
Web
- Support the new context menu API in web targets in the desktop mode #2224
- Support of the new context menu toolbar in web mobile targets #2251
- [js] there's no need to manually add skiko.js to the html page any more #2264
- Introduce
composeCompatibilityBrowserDistributiontask. This task combines two prod distributions - for js and for wasm in such way so that if modern required features are not supported by the consumer browser, application switch to js mode #5375
Resources
- Added
JvmResourceReaderAPI and madeLocalResourceReaderpublic to allow providing a custom classloader for desktop target #5334
Navigation
- A new API was added to bind the browser navigation state with the
NavController-suspend fun NavController.bindToBrowserNavigation. And the existing functionsuspend fun Window.bindToNavigationis deprecated now #2189
Fixes
Multiple Platforms
- Fix extra draw invalidations during scrolling (1.8 regression) #2212
- Fix text ellipsis if there's not enough vertical space to fit all lines #2246
- Fix "IrLinkageError: Function can not be called: No function found for symbol" #2293
ExperimentalMaterial3ExpressiveApiannotation removed from no-longer-experimental API #2298
iOS
- Fix issue where keyboard would appear after second tap when text input session was intercepted #2049
- Change the accessibility selection to the element that has most recently been focused on #2217
- Fix Full Keyboard Access on iOS 17 and lower #2216
- Fixes the appearance of the keyboard when a pop-up or dialog on the background is dismissed #2240
- Do not flatten accessibility tree inside accessibility elements #2243
Desktop
- [macOS] Fix the background flashing when closing a window/dialog and an animation is running #2058
- [macOS; JBR] Fixed the current composition in a text field being duplicated into another text field when switching focus to it #2026
- [macOS] Fixed strange glyph being displayed in a text field if window becomes unfocused, then focused again while there's an active composition in the text field (after pressing e.g. backspace) #2026
- [macOS] Fix showing the input method toolbar before any text field becomes focused (on JBR only; other runtimes continue to be buggy) #2047
- Improved performance for
ComposePanelwithSystem.setProperty("compose.swing.render.on.graphics", "true")#2097 - Fix the positioning of the IME popup being too far away from the text, on screens with density greater than 1 #2118
- Fixed the position of the IME popup, which was below the previous, rather than the current, cursor position #2122
- [Accessibility, macOS] Fixed VoiceOver to announce a Slider's value on every change #2152
- Return
Offset.Unspecifiedinstead of throwing an exception inLayoutCoordinates.localToScreenandLayoutCoordinates.screenToLocal#2160 - When the window moves or becomes iconified/de-iconified, all instances of
Modifier.onGloballyPositionedwill be called #2163 - Implemented a context menu for
BasicTextField(TextFieldState)#2168 SemanticsProperties.TextandSemanticsProperties.ContentDescriptionvalues will now be correctly concatenated whenModifier.semantics(mergeDescendants = true)is used #2202- Fixed the case when the IME's first event to a text field is to commit a composition #2210
- Elements marked with Modifier.semantics { hideFromAccessibility() } should now be correctly hidden from a11y #2204
- [macOS] Fix composite (e.g. Chinese) input after pressing backspace #2250
- [TextField] Fixed duplication of the composed characters when moving the caret by clicking during a composition #2255
- Correctly remove
SwingPanelchildren ofComposePanel, when the compose panel is itself removed from the hierarchy #2277 - Fix
runReleasetask when navigation andobfuscate.set(true)are used #5384
Web
- Fixed an unexpected back gesture after a horizontal scroll #2186
- Mitigate a typing delay regression in Safari browsers #2195
- Web Lifecycle triggers
START/STOPevents on thevisibilitychangecallback now #2219 - Lifecycle fix on iOS Safari: now touch events trigger
ON_RESUMEbecause Safari ignores interactions and doesn't request the focus #2219 - Fix software keyboard behaviour for Compose Text Fields in iOS Safari #2260
- Fixed the bugs with composite text input #2256
- Fixed the issue with software keyboard when it was shown repeatedly in Chrome mobile #2279
- Fix the issue where deleting a word in the middle of a sentence also affects the word next to it #2372
Gradle Plugin
- Don't fail gradle sync if
TargetFormat.AppImageis specified intargetFormatson macOS #5332 - Fix codesigning on macOS when the developer id contains non-ASCII characters. Note that this requires JDK 21 or later #5358
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.0. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0-beta06. Based on Jetpack Compose Material3 1.4.0-beta03 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha06. Based on Jetpack Compose Material3 Adaptive 1.2.0-alpha11 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.4. Based on Jetpack Lifecycle 2.9.2 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0. Based on Jetpack Navigation 2.9.1 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.4. Based on Jetpack Savedstate 1.3.1 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0. Based on Jetpack WindowManager 1.4.0
1.9.0-rc02 (September 2025)
Changes since 1.9.0-rc01
Fixes
Multiple Platforms
- (prerelease fix) Fix "Cinterop fails with an error when Compilation works fine" #2386
- (prerelease fix) Fix "warning: KLIB resolver: Could not find" #2386
Web
- Fix the issue where deleting a word in the middle of a sentence also affects the word next to it #2372
Gradle Plugin
- (prerelease fix) Fix
composeCompatibilityBrowserDistributiontask lazy configuration #5398
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.0-rc02. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0-beta05. Based on Jetpack Compose Material3 1.4.0-beta03 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha06. Based on Jetpack Compose Material3 Adaptive 1.2.0-alpha11 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.4-rc01. Based on Jetpack Lifecycle 2.9.2 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-rc02. Based on Jetpack Navigation 2.9.1 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.4-rc01. Based on Jetpack Savedstate 1.3.1 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0-rc02. Based on Jetpack WindowManager 1.4.0
1.10.0-alpha01 (September 2025)
Changes since 1.9.0-rc01
Highlights
Multiple Platforms
widgets-gallerysample has been removed in favor of the interactive API reference #5365
Breaking Changes
iOS
- Align
@Composableattribute inWindowInsets.Companion.captionBarto other platforms #2258
Migration Notes
Multiple Platforms
- The pre‑1.7 workaround in the common
PopupProperties/DialogPropertiesconstructors (annotatedDeprecated(HIDDEN)since 1.7) has been removed. This change may formally affect binary compatibility. Although we are not aware of concrete cases, if your project depends on third‑party libraries that reference this constructor, please update those dependencies to versions compatible with this release #2303 - Kotlin 2.2 is required for native and web platforms #2357
Desktop
Features
Multiple Platforms
- Update skia to m138 (see release notes) #2304
- The new context menu is enabled by default on all platforms now. It still might be disabled via
ComposeFoundationFlags.isNewContextMenuEnabledflag in case of issues #2341 - Provide public API for
@ResourceContentHashannotation generation #5402
iOS
- Add support for
WindowInsetsRulers#2258 - Support automatic scrolling for Full Keyboard Access #2222
- Support custom menu items for text context menu #2324
- Add API to configure
UIResponder.inputViewwithPlatformImeOptions#2350 - Add API to configure
UIResponder.inputAccessoryViewwithPlatformImeOptions#2350
Desktop
- Added
modalityTypeparameter toDialogWindow()#2300 - The Compose entry points on the desktop (
ComposeWindow,ComposePanelandImageComposeScene) now exposeval semanticsOwners: Collection<SemanticsOwner>#2358
Fixes
Multiple Platforms
- Fix application of
baselineShiftparameter in text layout #2304 - Fix setting
lineHeightto0in text layout #2304
iOS
- Fix incorrect behavior of
WindowInsets.displayCutoutin different interface orientations #2301 - Fix incorrect behavior of
WindowInsets.displayCutouton iPad #2301 - Fix the ability to use UIKitViewController inside
Popups andDialogs #2270 - Fix Accessibility announcing the old state of component #2327
- Align the semantics of TextFields with iOS text inputs #2331
- Fix crash when removing characters after string replacement #2361
Desktop
- Fix non-focusable popup with
compose.layers.type=WINDOWstealing focus #2285 - Change
ComposePanel.getPreferredSizeto return 0x0 instead ofnull#2283 - Request initial focus for focusable popups when used from
ComposePanelin some cases #2289 - In experimental
compose.layers.typemodes, fixPopup/Dialogcontainer size calculation that prevents mouse interactions on base compose scene #2304 - Fixed the sizing of unfocusable layers when
compose.layers.type=COMPONENTis used #2305 SwingPanelno longer requires to be manually sized to a fixed value; it will size according to its content's min/pref/max sizes #2310- Made disabled new context menu items actually disabled, including the right semantics #2347
Web
- Fix the issue where deleting a word in the middle of a sentence also affects the word next to it #2372
Gradle Plugin
- Support
AGP 9.0.0#5391 - (prerelease fix) Fix composeCompatibilityBrowserDistribution task lazy configuration #5398
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.10.0-alpha01. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.10.0-alpha01. Based on Jetpack Compose Material3 1.5.0-alpha03 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha06. Based on Jetpack Compose Material3 Adaptive 1.2.0-alpha11 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha01. Based on Jetpack Lifecycle 2.10.0-alpha03 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-rc01. Based on Jetpack Navigation 2.9.1 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.4.0-alpha01. Based on Jetpack Savedstate 1.4.0-alpha03 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.5.0-alpha01. Based on Jetpack WindowManager 1.5.0-beta02
1.9.0-rc01 (August 2025)
Changes since 1.9.0-beta03
Fixes
Multiple Platforms
- (prerelease fix) Fix incorrect light source position for dynamic shadows in some cases #2328
Desktop
- (prerelease fix) Fixed focus indication being shown in touch input mode #2342
- Fix
runReleasetask when navigation andobfuscate.set(true)are used #5384
Lifecycle
- Fix dependency to Compose in
lifecycle-viewmodel-composemodule:2.9.2incorrectly refer Compose Multiplatform1.9.0-beta03. Now it reverted back to1.8.2#2318
SavedState
- Fix dependency to Compose in
savedstate-composemodule:1.3.2incorrectly refer Compose Multiplatform1.9.0-beta03. Now it reverted back to1.8.2#2321
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.0-rc01. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0-beta04. Based on Jetpack Compose Material3 1.4.0-beta02 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha05. Based on Jetpack Compose Material3 Adaptive 1.2.0-alpha10 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.3. Based on Jetpack Lifecycle 2.9.2 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-rc01. Based on Jetpack Navigation 2.9.1 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.3. Based on Jetpack Savedstate 1.3.1 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0-rc01. Based on Jetpack WindowManager 1.4.0
1.9.0-beta03 (August 2025)
Changes since 1.9.0-beta01
Breaking Changes
Multiple Platforms
-
(prerelease fix) All public APIs tagged with
ExperimentalMaterial3ExpressiveApiorExperimentalMaterial3ComponentOverrideApihave been removed, see Google Jetpack changelog. Please use the previous Material3 alpha version explicitly to continue enjoying these features: #2278implementation("org.jetbrains.compose.material3:material3:1.9.0-alpha04")
Migration Notes
Multiple Platforms
kotlinx-datetimeis updated to0.7.1. If you also use it in your projects, please update it to this version to ensure compatibility #2276
Desktop
- Kotlin 2.1 is required for all platforms including JVM (it was required only for native and web before) #2276
Web
CanvasBasedWindowis deprecated, useComposeViewportinstead. UnlikeCanvasBasedWindow, which expect as an input param the id to theHTMLCanvasElementthat will be used for rendering,ComposeViewportone passesparentContainer(and corresponding HTML Canvas element will be created automatically). By default such container isdocument.body#2280
Features
Web
- Support of the new context menu toolbar in web mobile targets #2251
- [js] there's no need to manually add skiko.js to the html page any more #2264
- Introduce
composeCompatibilityBrowserDistributiontask. This task combines two prod distributions - for js and for wasm in such way so that if modern required features are not supported by the consumer browser, application switch to js mode #5375
Fixes
Multiple Platforms
- Fix text ellipsis if there's not enough vertical space to fit all lines #2246
- Fix "IrLinkageError: Function can not be called: No function found for symbol" #2293
ExperimentalMaterial3ExpressiveApiannotation removed from no-longer-experimental API #2298
iOS
- Do not flatten accessibility tree inside accessibility elements #2243
Desktop
- [macOS] Fix composite (e.g. Chinese) input after pressing backspace #2250
- [TextField] Fixed duplication of the composed characters when moving the caret by clicking during a composition #2255
- (prerelease fix) Close the context menu when a menu item is clicked (old context menu API) #2259
- Correctly remove
SwingPanelchildren ofComposePanel, when the compose panel is itself removed from the hierarchy #2277 - (prerelease fix) Fix
DialogWindowcausing a taskbar icon to be displayed in some cases where it shouldn't #2291
Web
- Fix software keyboard behaviour for Compose Text Fields in iOS Safari #2260
- Fixed the bugs with composite text input #2256
- (prerelease fix) Hide disabled context menu items in the web text toolbar menu #2268
- (prerelease fix) Show the "paste" item regardless of the the clipboard content state if the Clipboard API is supported #2267
- (prerelease fix) The context menu will not show the Clipboard-related items when the Clipboard API are not supported by a browser #2266
- Fixed the issue with software keyboard when it was shown repeatedly in Chrome mobile #2279
- (prerelease fix) The context menu had only "Select All" item when targeting k/js #2296
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.0-beta03. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0-beta03. Based on Jetpack Compose Material3 1.4.0-beta01 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha05. Based on Jetpack Compose Material3 Adaptive 1.2.0-alpha10 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.2. Based on Jetpack Lifecycle 2.9.2 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-beta05. Based on Jetpack Navigation 2.9.1 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.2. Based on Jetpack Savedstate 1.3.1 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0-beta01. Based on Jetpack WindowManager 1.4.0
1.9.0-beta01 (July 2025)
Changes since 1.9.0-alpha03
Highlights
Web
- Text context menu is supported on web platforms for both modes: mobile and desktop #2207
- Introduce the basic support of accessibility in the web target #2188
Migration Notes
Multiple Platforms
-
Material3 versioning is decoupled for the Compose Multiplatform 1.9.* release due the upstream Jetpack Compose Material3 1.4 has not been released as stable yet #5360
-
compose.material3now points to the latest stable Material3 version, 1.8.2. If the latest Material3 features are needed, please include it this way: #5360implementation("org.jetbrains.compose.material3:material3:1.9.0-alpha04")
iOS
- Remove experimental attribute from
UIKitInteropInteractionMode#2215
Web
fun ComposeViewportwithviewportContainerId: String?parameter now can be called from a web-commonfun main(k/js and k/wasm) #2226
Features
Multiple Platforms
- Extended the
@Preview(org.jetbrains.compose.ui.tooling.preview) annotation with the following parameters: name, group, widthDp, heightDp, locale, showBackground, backgroundColor. IDE (IJ or AS) will pick up these parameters in the same way it works forandroidxPreview annotations #5339
iOS
- Support new context menu API with default menu #2214
- Add support for frame rate voting #2205
- Support scroll commands with Voice Control #2234
- Implement accessibility scroll to focused interop views #2228
Desktop
- Basic support for new context menu API #2196
- Added experimental support for save and restore compose state.
ComposePanel,ComposeWindowandComposeDialognow hassavedStateconstructor parameter to restore previous state andsaveStatefunction to save the current state for later use #2225
Web
- Support the new context menu API in web targets in the desktop mode #2224
Resources
- Added
JvmResourceReaderAPI and madeLocalResourceReaderpublic to allow providing a custom classloader for desktop target #5334
Navigation
- A new API was added to bind the browser navigation state with the
NavController-suspend fun NavController.bindToBrowserNavigation. And the existing functionsuspend fun Window.bindToNavigationis deprecated now #2189
Fixes
Multiple Platforms
- Fix extra draw invalidations during scrolling (1.8 regression) #2212
- (prerelease fix) Fix trigger of
Modifier.onFirstVisiblemodifier (added in Jetpack Compose1.9.0-alpha03) #2233
iOS
- Change the accessibility selection to the element that has most recently been focused on #2217
- Fix Full Keyboard Access on iOS 17 and lower #2216
- (prerelease fix) Fixed
Undefined symbols for architecture arm64: _kfun:androidx.compose.material3.adaptive.WindowAdaptiveInfo#2236 - Fixes the appearance of the keyboard when a pop-up or dialog on the background is dismissed #2240
Desktop
- Fixed the case when the IME's first event to a text field is to commit a composition #2210
- Elements marked with Modifier.semantics { hideFromAccessibility() } should now be correctly hidden from a11y #2204
- (prerelease fix) Fix focus switching for ComposePanel embedded in Swing UI #2232
- (prerelease fix) Fix Maven project doesn't work with 1.9.0-alpha03 #2248
Web
- Web Lifecycle triggers
START/STOPevents on thevisibilitychangecallback now #2219 - Lifecycle fix on iOS Safari: now touch events trigger
ON_RESUMEbecause Safari ignores interactions and doesn't request the focus #2219
Gradle Plugin
- Fix codesigning on macOS when the developer id contains non-ASCII characters. Note that this requires JDK 21 or later #5358
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.0-beta01. Based on Jetpack Compose libraries: -
Compose Material3 libraries
org.jetbrains.compose.material3:material3*:1.9.0-alpha04. Based on Jetpack Compose Material3 1.4.0-alpha17 -
Compose Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha04. Based on Jetpack Compose Material3 Adaptive 1.2.0-alpha08 -
Graphics-Shapes library
org.jetbrains.androidx.graphics:graphics-shapes:1.0.0-alpha09. Based on Jetpack Graphics-Shapes 1.0.1 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.1. Based on Jetpack Lifecycle 2.9.1 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-beta04. Based on Jetpack Navigation 2.9.1 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.1. Based on Jetpack Savedstate 1.3.0 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0-alpha09. Based on Jetpack WindowManager 1.4.0
1.9.0-alpha03 (July 2025)
Changes since 1.9.0-alpha02
Highlights
Web
- Added a
WebElementViewComposable function for embedding the absolutely positioned HTML content in Compose for web target. It's supported only when usingComposeViewportentry point and it's not supported withCanvasBasedWindow, which is deprecated now #2145
Migration Notes
Desktop
WindowandDialogWindowoverloads that create aComposeWindow/ComposeDialoghave been renamed toSwingWindow/SwingDialogand the old versions have been deprecated #2141- When the window is iconified, converting to/from screen coordinates (with e.g.
LayoutCoordinates.positionOnScreen()) will returnOffset.Unspecified#2163 - Deprecated experimental
Modifier.mouseClickableis removed. See https://www.jetbrains.com/help/kotlin-multiplatform-dev/compose-desktop-mouse-events.html for alternatives #2194
Web
- Setting
org.jetbrains.compose.experimental.jscanvas.enabled=trueis not required anymore when having a kotlin/js target #5340
Features
Multiple Platforms
- Support customizable shadows #2183
iOS
- Add support for
keepScreenOnmodifier #2180
Desktop
- Added
SwingFrameandSwingDialogcomposables that allow configuring the window/dialog before it is shown #2139 - Full
AnnotatedStringis available as a data flavor inClipEntry, instead of only its text #2092 - Add
RenderSettings.SwingGraphicsoption forComposePanel.renderSettingsargument #2071
Fixes
Multiple Platforms
- Fixed caret placement near glyphs if glyphs are compound symbols and part of them are non-spacing marks #2147
- (prerelease fix) Fix applying
colorFilterandblendModefromGraphicsLayerScopetoGraphicsLayer#2184
Desktop
- [Accessibility, macOS] Fixed VoiceOver to announce a Slider's value on every change #2152
- Return
Offset.Unspecifiedinstead of throwing an exception inLayoutCoordinates.localToScreenandLayoutCoordinates.screenToLocal#2160 - When the window moves or becomes iconified/de-iconified, all instances of
Modifier.onGloballyPositionedwill be called #2163 - Implemented a context menu for
BasicTextField(TextFieldState)#2168 - (prerelease fix)
Could not find org.jetbrains.androidx.window:window-core-desktop:1.4.0-alpha07when usingmaterial-adaptiveormaterial3-adaptive-navigation-suite#2179 SemanticsProperties.TextandSemanticsProperties.ContentDescriptionvalues will now be correctly concatenated whenModifier.semantics(mergeDescendants = true)is used #2202
Web
- Fixed an unexpected back gesture after a horizontal scroll #2186
- Mitigate a typing delay regression in Safari browsers #2195
Gradle Plugin
- Don't fail gradle sync if TargetFormat.AppImage is specified in
targetFormatson macOS #5332
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.0-alpha03. Based on Jetpack Compose libraries: -
Graphics-Shapes library
org.jetbrains.androidx.graphics:graphics-shapes:1.0.0-alpha09. Based on Jetpack Graphics-Shapes 1.0.1 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.1. Based on Jetpack Lifecycle 2.9.1 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha03. Based on Jetpack Material3 Adaptive 1.2.0-alpha07 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-beta03. Based on Jetpack Navigation 2.9.0 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.1. Based on Jetpack Savedstate 1.3.0 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0-alpha08. Based on Jetpack WindowManager 1.4.0
1.8.2 (June 2025)
Changes since 1.8.1
Fixes
Multiple Platforms
-
Fixed
TextField(TextFieldValue)when used with a visual transformation with a non-identity offset mapping (potentially even crashing) #2130 -
Fixed a memory leak and performance degradation when
ComposeUiFlags.isRectTrackingEnabledset totrue(by default) #2123 -
Fixed caret placement near glyphs if glyphs are compound symbols and part of them are non-spacing marks #2155
-
Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported #5323
Example usage:
import androidx.compose.runtime.Composable import org.jetbrains.compose.ui.tooling.preview.Preview import org.jetbrains.compose.ui.tooling.preview.PreviewParameter import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider class MyPreviewParameterProvider : PreviewParameterProvider<String> { override val values = sequenceOf("Hello, Compose!", "Hello, World!") } /** * This function will generate two preview images with different texts. */ @Preview @Composable fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) { Text(text) }
Desktop
- Fix the positioning of the IME popup being too far away from the text, on screens with density greater than
1.0#2158
Navigation
- Fix the browser navigation integration problem due encoded routes #2143
- Fix a crash on iOS when a
NavHostis located in a scrollable container #2146
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.2. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.1. Based on Jetpack Lifecycle 2.9.1 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.2. Based on Jetpack Material3 Adaptive 1.1.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-beta03. Based on Jetpack Navigation 2.9.0 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.1. Based on Jetpack Savedstate 1.3.0 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0-alpha07. Based on Jetpack WindowManager 1.4.0-alpha04
1.9.0-alpha02 (June 2025)
Changes since 1.8.1
Highlights
Multiple Platforms
material3library now includes new experimentalMaterialExpressiveTheme#2127
Migration Notes
Gradle Plugin
- The Compose Gradle plugin requires the Kotlin Gradle plugin version 2.+ now. Old
org.jetbrains.compose.compileris not supported anymore and the API to configure it was removed #5283
Features
Multiple Platforms
- Adopted a change in
ComposeUiTestAPI. TheblockinrunComposeUiTestissuspendnow. It allows to callawaitIdleand other suspend functions. It ensures a correct execution of a test on all platforms. See the web specifics inkotlinx.coroutines.test.runTestdocumentation #2066
iOS
- Add support for native IME configuration with
PlatformImeOptions#2108
Desktop
- Add accessibility role for
Switch, reporting it as a checkbox #2136
Fixes
Multiple Platforms
- Fixed
TextField(TextFieldValue)when used with a visual transformation with a non-identity offset mapping (potentially even crashing) #2117 - Fixed a memory leak and performance degradation when
ComposeUiFlags.isRectTrackingEnabledset totrue(default) #2112 - Support Preview parameters for Previews in common source sets in IJ and AS. Note: IDEs also need to implement support on their end. Please check the respective IDE release notes to confirm this is supported #5319
Example usage:
import androidx.compose.runtime.Composable import org.jetbrains.compose.ui.tooling.preview.Preview import org.jetbrains.compose.ui.tooling.preview.PreviewParameter import org.jetbrains.compose.ui.tooling.preview.PreviewParameterProvider class MyPreviewParameterProvider : PreviewParameterProvider<String> { override val values = sequenceOf("Hello, Compose!", "Hello, World!") } /** * This function will generate two preview images with different texts */ @Preview @Composable fun MyPreview(@PreviewParameter(MyPreviewParameterProvider::class) text: String) { Text(text) }
iOS
- Fix issue where keyboard would appear after second tap when text input session was intercepted #2049
Desktop
- [macOS] Fix the background flashing when closing a window/dialog and an animation is running #2058
- [macOS; JBR] Fixed the current composition in a text field being duplicated into another text field when switching focus to it #2026
- [macOS] Fixed strange glyph being displayed in a text field if window becomes unfocused, then focused again while there's an active composition in the text field (after pressing e.g. backspace) #2026
- [macOS] Fix showing the input method toolbar before any text field becomes focused (on JBR only; other runtimes continue to be buggy) #2047
- Improved performance for
ComposePanelwithSystem.setProperty("compose.swing.render.on.graphics", "true")#2097 - Fix the positioning of the IME popup being too far away from the text, on screens with density greater than 1 #2118
- Fixed the position of the IME popup, which was below the previous, rather than the current, cursor position #2122
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.9.0-alpha02. Based on Jetpack Compose libraries: -
Graphics-Shapes library
org.jetbrains.androidx.graphics:graphics-shapes:1.0.0-alpha08. Based on Jetpack Graphics-Shapes 1.0.1 -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0. Based on Jetpack Lifecycle 2.9.0 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.2.0-alpha02. Based on Jetpack Material3 Adaptive 1.2.0-alpha06 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-beta02. Based on Jetpack Navigation 2.9.0 -
Savedstate library
org.jetbrains.androidx.savedstate:savedstate:1.3.0. Based on Jetpack Savedstate 1.3.0 -
WindowManager Core library
org.jetbrains.androidx.window:window-core:1.4.0-alpha07. Based on Jetpack WindowManager 1.4.0
1.8.1 (May 2025)
Changes since 1.8.0
Features
Resources
- Now a Compose library with resources may be built and used as XCFramework (it requires Kotlin Gradle plugin 2.2 or higher) #5294
- Gradle Plugin DSL to change the generated
Resclass name #5296
Fixes
Multiple Platforms
- Fix incorrect pointer position calculation with rotation around unspecified pivot #2082
iOS
- Fix dialogs after modal view controller presentation #2085
- Fix issue where
androidx.compose.material3.ModalBottomSheetcloses after any tap #2086 - Fix context menu appearance after triple-tap #2087
- Fix a memory leak in
ComposeUIViewControllerwhen text input starts #2088 - Use the cross-fade animation effect when rotating the screen with interop views #2101
- Show an error message when
UIKitViewControllerinsidePopuporDialog#2102 - Fix an issue where the keyboard would appear after the second tap when the text input session was intercepted #2103
Desktop
- [Linux] Fix
svgPainterdoesn't show any images #2096 - Fix deadlock between
BroadcastFrameClock.lockandRecomposer.stateLock#2098 - Fix "Serializer for class is not found" using
androidx.navigationand running./gradlew runRelease#5314 kotlinx.serializationProGuard rules are bundled in the Compose Gradle plugin #5314
Web
- Fixed the positioning and the dimensions of the backing text input (HTML element). The bug used to lead to unexpected scrolls on the page due to the browser trying to bring the HTML element into a view #2081
Resources
- Fix IDE highlighting/resolution when a generated file with resource accessors is too big #5298
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.1. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0. Based on Jetpack Lifecycle 2.9.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-beta02. Based on Jetpack Navigation 2.9.0 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.1. Based on Jetpack Material3 Adaptive 1.1.0
1.8.0 (May 2025)
Changes since 1.7.3
Highlights
Multiple Platforms
- Compose Multiplatform codebase is fully migrated to K2. Please note that native and web klibs can be consumed only with Kotlin 2.1.0 or newer. Also, due to underlying changes in the compiler plugin, it's better to recompile libraries against the new version. Please let us know if you find any compatibility issues during this migration #1778
- Implement multiplatform
BackHandlerandPredictiveBackHandler. And use them in material3 widgets and androidx-navigation library #1771
iOS
- Remove experimental flag from
fun enableTraceOSLog()#1652
Web
- Improves text input support in Safari on mobile and desktop #1941
- Correct certain text input scenarios on Web targets #1941
Resources
- Add
FontVariation.Settingssupport to the resources library #5183
Breaking Changes
Tests
runOnIdlewill now executeactionon the UI thread aligning the behavior with Android #1601runOnIdlewill no longer callwaitForIdleafter executing the action aligning the behavior with Android #1601- Advancing
mainClocksuch that it doesn't reach the next frame, will no longer cause a recomposition #1618 - IdlingResource interface was moved from commonMain to android and desktop source sets. The related experimental methods of ComposeUiTest were moved too. They are not available for Web and iOS anymore. Consider using waitUntil function as an alternative. Note: it's a breaking change only for Web and iOS, but not for Desktop and Android #1822
Multiple Platforms
- Multiplatform lifecycle was migrated from a internal
core-bundlemodule to the androidx SavedState. Libraries that useorg.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstateororg.jetbrains.androidx.savedstate:savedstateshould migrate to the latest version #1850 - A custom implementation for deprecated
LocalTextInputServiceis no longer supported #1974
iOS
- Update
AccessibilitySyncOptionsand removeAccessibilityDebugLoggerfrom public API #1604 - Remove obsolete Canvas Layers mode on iOS #1680
- Add Composable annotation to the
WindowInsets.Companion.waterfallgetter to match the expected API #1919
Desktop
- Deprecated/experimental
Modifier.onExternalDraghas been removed - commonModifier.dragAndDropTargetAPI should be used instead #1606
Migration Notes
Multiple Platforms
- Google Maven now contains some artifacts for all Kotlin targets including Wasm and JS. Compose Multiplatform now depends on those artifacts and user projects might need to add
google()repo torepositories {...}block if it is not there yet #1819 - material/material3 libraries no longer add a dependency to
material-icons-coreso if your project relied on that, you will have to explicitly add that dependency in yourbuild.gradle[.kts]files: #2030implementation("org.jetbrains.compose.material:material-icons-core:1.7.3")
iOS
LocalUIViewControllermoved to theandroidx.compose.ui.uikitmodule #1608ComposeUIViewControllerDelegatemarked as deprecated. Use the parent view controller to override the methods of theUIViewControllerclass #1651- Experimental classes
CupertinoScrollDecayAnimationSpecandCupertinoOverscrollEffectare removed from public API #1806
Gradle Plugin
- The Compose Gradle Plugin requires Kotlin Gradle Plugin 2.+ version now. Old
org.jetbrains.compose.compileris not supported anymore and the API to configure it was removed #5293
Features
Multiple Platforms
- Support configurable vertical text centering via
LineHeightStyle.Alignment#1569 - Support Variable Fonts In All Platforms #1623
- Update skia to m132 #1823
- Adopt a new
Clipboardinterface with suspend functions, which work correctly on all targets including Web. TheClipboardManagerwas deprecated because it was not possible to correctly implement it for Web #1796
iOS
- Support state announcements for scrollable lists in VoiceOver #1644
- Support for accessibility gestures for left-to-right languages #1663
- (Experimental)
ComposeUIViewControllerConfiguration.useSeparateRenderThreadWhenPossibleflag that allows offloading GPU commands encoding to the separate thread and improving performance #1694 - Initial Drag&Drop support #1690
- Align Compose components semantics with UIKit views accessibility #1719
- Accessibility navigation uses safe area to calculate when focused rect is out of bounds #1745
- Support VoiceControl on iOS #1780
AccessibilitySyncOptionsremoved. The accessibility tree is built on demand #1780- Calculate the order and location of semantic elements in the same way as it's done on Android #1809
- Support
UIAccessibilityContainerTypeSemanticGroupfor traversal groups #1809 - Compose works correctly with nested
UIScrollViews, as well as withinUIScrollViews #1818 - Added the ability to close modal Compose view controllers (with non-scrollable content on them) with a swipe gesture #1818
- Support new haptic feedback types #1831
- Support for focusable nodes when Full Keyboard Access is enabled on iOS #1825
- Floating cursor support for
BasicTextField(TextFieldState)#1598 - Add support for Bold Text accessibility setting #1846
- Bhojpuri language support for VoiceOver #1838
- Add support for Reduce Motion accessibility setting #1847
- Default
androidx.navigationtransition animation on iOS is as close as possible to the iOS back gesture #1861 - Support accessibility text input #1875
- Support text input for UI Tests #1875
- Accessibility: added ability to traverse nodes within a scrollable container #1837
- Add ability to recreate Composable after
ComposeUIViewControllerleaves view controller hierarchy #1877 - Support trackpad pointer input #1893
- Save Composable state when view controller leaves view controller hierarchy #1904
- Support text input when Full Keyboard Access is enabled #1917
- Added native behavior for tap, long tap and multiple tap to
BasicTextField(TextFieldState)#1923 - Magnifier support for
BasicTextField(TextFieldState)#1926
Desktop
- Improved performance on Windows by replacing the native code compiler to Clang (in 1.8.0 comparing to 1.7.3) #1863
- Software rendering (used on some VMs) FPS is 6.397x higher on average
- Reducing the size of a packaged application. Example https://kmp.jetbrains.com:
- the installer size is changed from 44.9 Mb to 44.1 Mb
- the installed size is changed from 107 Mb to 103 Mb
- The default ProGuard version is set to 7.7.0 #5279
- If there are any new errors in the release build, update the ProGuard rules
- A usual workaround is to add
-keep classfor the associated with error class in "Location:" - If the error contains
androidx.package, it might a Compose bug, please report in https://youtrack.jetbrains.com/issues/CMP. The-keep classworkaround should also work in this case
Web
- Adds experimental
PointerIcon.fromKeywordfunction to change the browser cursor #1704
Resources
- Add new API to preload and cache font and image resources on web targets:
preloadFont,preloadImageBitmap,preloadImageVector#5159
Gradle Plugin
- Support compose resources in
androidLibrarytarget #5157
Navigation
- Basic support a navigation by deep links #1610
- Commonize
navController.navigate(Uri)method #1617 - Implemented non-android
navController.handleDeepLink(NavDeepLinkRequest)method #1617 - New API to configure browser navigation buttons and the address line #1621
- Navigation via a browser address field #1640
Fixes
Tests
- Clear the canvas before rendering each frame in tests, to avoid drawing different frames on top of each other, resulting in incorrect images being returned by
captureToImage#1820
Multiple Platforms
- Fix changing
FontRenderingSettingsis not reflected until composition restarts #1595 - The overhead for running an empty test has been significantly reduced #1615
- Fix missing implementation on non-Android platforms for
ModalDrawerSheetoverload withDrawerStateargument #1763 - Fix light position for during shadow rendering to match the Material specification and Android behaviour #1754
- Fix light source position for shadow rendering to match the Material specification and Android behavior #1784
- Fix inconsistency between Android and Desktop in
placeWithLayerscale application: offset is not scaled now (Android behavior) #1784 - Fixed the output of
TextField(TextFieldState)(akaBasicTextField2) transformations incorrectly leeching into the untransformed text itself, when input method is used (Chinese and other languages with multi-keystroke character input) #1833 - Fix possible
IllegalArgumentException: Object already closedduringGraphicsLayer.record#1839 - Compose runtime module now exposes its dependency on Kotlin Coroutines API (changed from
implementation()toapi()) #1883 - Correctly set
ScrollState.viewportSizefor (Basic)TextField(TextFieldState)#1896 - Changes pressing backspace in a textfield to delete diacritic marks, if any, rather than the entire character #1869
- Fixed
IllegalArgumentException: maxWidth(value) must be >= than minWidth(0)crashes when aTextFieldwithtrailingIconis too narrow #1936 - Fixed crash when dragging selection in
TextField(TextFieldState)while also editing the text, such as by pressing Backspace #1969 - Fix
InterceptPlatformTextInputfor the legacy TextField #1974
iOS
- Deprecate
defaultUIKitMain()#1585 - Fixed visibility of
androidx.compose.material3.internal.formatWithSkeletonthat was accidently marked as public #1609 - Fix a bug where the accessibility tree did not reload when VoiceOver was enabled #1656
- Fix Display Cutout Padding when rotating the device #1645
- Fixes an interruption while typing characters on a Chinese keyboard #1692
- Accessibility reading of content when obscured by layers such as pop-ups and dialogs #1698
- Enables Cupertino Overscroll by default for scrollable components #1753
- Experimental method
optOutOfCupertinoOverscroll()removed #1753 - Fix iOS Accessibility element tree construction within merged nodes #1750
- Performance issues when iOS screen reader is active fixed #1780
- Fixed issues where the interactive pop gesture would stop working #1818
- Fixes an issue where it's not possible to close the
UIMenuthat appears over the Compose content #1818 - Fix touches tracking for multitouch gestures #1827
- Fixed a bug where touches could be handled by back gesture and composable content at the same time #1879
- Removed permissions alert when pasting text into a
TextField#1894 - Fix crash when removing popup during scene size change animation #1878
- Fix accessibility elements rects when
ComposeUIViewControlleris shifted #1899 - Fixed an issue where it wasn't possible to open a popup using pointer input devices #1906
- Fix popup safe drawing padding when
usePlatformInsets = true#1920 - Fix an issue where Compose would retain the old state when its view was reappeared #1921
- Fix Text Menu opening after Select All action tap #1930
- Fix freeze where scrolling was cancelled but the overscroll effect was not completed #1928
- Fix overscroll animation freeze when pull-to-refresh is triggered #1932
- Fix issue where root compose canvas does not resize without animation #1934
- Fix issue where dialog layer may not be shown #1934
- Remove focus on accessibility nodes with clearing semantics #1933
- Fix adding extra
MetalViewwhen Compose controller re-enters view hierarchy #1938 - Fix the first layer appearance freeze #1948
- Fixed text editing behavior (typing / deleting) in
BasicTextField(TextFieldState)with appliedOutputTransformation#1953 - Fixed incorrect undo behavior for text deletion in
BasicTextField(TextFieldState)#1956 - Fix composite input in
BasicTextField(TextFieldState)#1984 - Fixes an issue where the accessibility engine could leave a scrollable list without reading it to the end #1986
- Fix Accessibility navigation through traversal groups in Container mode #1987
- Fix focus for items within dialogs when full keyboard access is enabled #1990
- Fix gesture handling for third party interop views #1993
- Fix the keyboard reappearing after it was dismissed via
LocalSoftwareKeyboardControllerinBasicTextField(TextFieldState)#1974 - Fix overscroll touches assertion when back handler is involved #2017
- Fixed incorrect selection and navigation by arrow keys from a hardware keyboard in
BasicTextField(TextFieldState)#2018 - Fix back gesture after modal popup appearance #2019
- Fixed the behavior of a context menu in the text fields inside modal screens #2028
Desktop
- Fix for excessive garbage generation from redrawing on Swing #1657
- Fix drag-and-drop when the list of supported actions doesn't include
Move#1683 - Fix accessibility focus when using
compose.swing.render.on.graphics=true#1688 - Fix "Context menu on desktop shows incorrect items after the second showing" #1693
- Fixed rare crash when using a scrollbar for lazy grid with animated enter/exit items #1707
- Fix possible exception during
Dialog/Popupcreation in case ofcompose.layers.type=COMPONENTand pointingwindowContainertoComposePanelitself #1747 - Fix interop initial z-order placement on Windows with
compose.interop.blendingflag (1.7.0 regression) #1774 - Fixed the background of transparent windows/dialogs on Windows becoming opaque as the window is moved #1772
- Elements marked with
Modifier.semantics { hideFromAccessibility() }should now be correctly hidden from a11y #1798 - Fixed the positioning of the IME candidate popup for
TextField(TextFieldState)(akaBasicTextField2) #1794 - Fixed input of diacritics via long-press on macOS in
TextField(TextFieldState)(akaBasicTextField2) #1810 - Radio buttons and any other elements using
Modifier.selectablewithRole.RadioButtonwill have their state reported to accessibility viaAccessibleValue.getCurrentAccessibleValue()and asAccessibleState.CHECKEDingetAccessibleStateSet()#1797 - [Windows] Fixed ordering of
SwingPanels when usingcompose.interop.blending=true#1901 - [macOS] Fix, for some cases, the background flashing when closing a window/dialog. This can still happen if an animation is running when the window or dialog is closing #1911
- Fix
onRenderApiChangedinComposeWindowandComposeDialognot working when the renderer changes due to fallback, rather than explicit change #1911 - [Swing Interop] Fixed
compose.interop.blending=truecompletely breaking Swing interop on Windows when Direct3D is unsupported. Note that interop blending is still supported on Windows only if Direct3D is available #1913 - Fixed only the first character being temporarily shown in a
SecureTextField#1853 - Changes in
TextFieldStateare now correctly reported to the transformations when inputting composite characters (e.g. ㅀ), instead of the whole text being replaced on each new character #1853 - Fixed a potential deadlock when calling
Snapshot.sendApplyNotificationsfrom a thread other than the event dispatching thread #1955 - Fix missing window shadows on macOS in case of usage
compose.interop.blendingflag #1908 - Fix
Execution failed for task ':composeApp:proguardReleaseJars'whenmaterial3is included in the project #5261
Web
- The
BasicTextFieldhandles browser copy/cut/paste events correctly now. Previously, they were ignored #1795 - Mobile browsers: the virtual keyboard is shown when the
TextFieldis clicked/receives focus #1865 - Fix text selection with mouse in
TextField#1876 - Fix horizontal scroll when using touchpad and pressing Shift #1909
- Prevent app from crashing when running in an insecure context where Web Clipboard API is unavailable #1931
- Replace tab characters with spaces in
TextandTextFields, to avoid them being drawn as tofu #1943 - Fix touch events processing. Now
Modifier.detectTransformGestureswill allow to handle zoom and rotation gestures #1942
Resources
- Read
android:autoMirrored="true"property and pass it to ImageVector builder #5140 - Fix string resource's regex for placeholders to correctly match multi-digit placeholders #5187
Navigation
- Fixed
No destination with ID 0 is on the NavController's back stackcrash on iOS #1596 - Fix incorrect navigation up on the root screen for non-android targets #1736
- Fixed browser navigation integration when route paths contain special symbols #1738
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-beta01. Based on Jetpack Lifecycle 2.9.0-beta01 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-beta01. Based on Jetpack Navigation 2.9.0-beta01 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0. Based on Jetpack Material3 Adaptive 1.1.0
1.8.0-rc01 (April 2025)
Changes since 1.8.0-beta02
Highlights
Web
- Improves text input support in Safari on mobile and desktop #1941
- Correct certain text input scenarios on Web targets #1941
New
WebTextInputServiceseeks to achieve the following goals:
- Add support to Safari (which happens to have its own flow of input events that are inconsistent with other browsers)
- Correct behavior for composition and accent dialogue scenarios
- Introduce some changes that we will use for improving accessibility
Breaking Changes
Multiple Platforms
- A custom implementation for deprecated
LocalTextInputServiceis no longer supported #1974
Migration Notes
Multiple Platforms
- material/material3 libraries no longer add a dependency to
material-icons-coreso if your project relied on that, you will have to explicitly add that dependency in yourbuild.gradle[.kts]files: #2025, #2030
implementation("org.jetbrains.compose.material:material-icons-core:1.7.3")
Gradle Plugin
- The Compose Gradle Plugin requires Kotlin Gradle Plugin 2.+ version now. Old
org.jetbrains.compose.compileris not supported anymore and the API to configure it was removed #5293
Lifecycle
- (prerelease fix) Remove deprecated
AbstractSavedStateViewModelFactoryfrom common code #1976
Features
Desktop
- The default ProGuard version is set to 7.7.0 #5279
- If there are any new errors in the release build, update the ProGuard rules
- A usual workaround is to add
-keep classfor the associated with error class in "Location:" - If the error contains
androidx.package, it might a Compose bug, please report in https://youtrack.jetbrains.com/issues/CMP. The-keep classworkaround should also work in this case
- (prerelease fix)
./gradlew runReleasedoesn't crash withjava.lang.VerifyError#5279
Fixes
Multiple Platforms
- (prerelease fix)
org.jetbrains.compose.material3:material3-adaptive-navigation-suite,org.jetbrains.compose.material3:material3-window-size-classare reverted to the 1.3.1 state. They will be promoted to 1.4 in Compose Multiplatform 1.9 with material3 #1995 - Fix
InterceptPlatformTextInputfor the legacy TextField #1974
iOS
- (prerelease fix) Fix Text Menu placement for
TextField(TextFieldState)#1972 - (prerelease fix) Fix Full Keyboard Access focus when Compose is located inside SwiftUI view #1975
- (prerelease fix) Fix an issue where traversal group nodes with test tag are missing in the accessibility tree #1977
- Fix composite input in
BasicTextField(TextFieldState)#1984 - Fixes an issue where the accessibility engine could leave a scrollable list without reading it to the end #1986
- Fix Accessibility navigation through traversal groups in Container mode #1987
- Fix focus for items within dialogs when full keyboard access is enabled #1990
- (prerelease fix) Fixed a white scene background on iOS when a dark theme is activated #1989
- Fix gesture handling for third party interop views #1993
- Fix overscroll touches assertion when back handler is involved #2017
- Fixed incorrect selection and navigation by arrow keys from a hardware keyboard in
BasicTextField(TextFieldState)#2018 - Fix back gesture after modal popup appearance #2019
- Fixed the behavior of a context menu in the text fields inside modal screens #2028
- (prerelease fix) Change runtime experimental annotations to proper "ui" experimental annotations for a few fields inside
ComposeUIViewControllerConfiguration#2034 - (prerelease fix) Fix back gesture handling after modal view controller dismissal #2048
- (prerelease fix) Fix overscroll when RTL is enabled #2054
Desktop
- (prerelease fix) [macOS] Fixed accented character input via long press #1980
Navigation
- (prerelease fix) Fix custom navigation animation in nested graphs in non-android targets #1982
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0-rc01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-alpha07. Based on Jetpack Lifecycle 2.9.0-beta01 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-alpha17. Based on Jetpack Navigation 2.9.0-beta01 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0-rc01. Based on Jetpack Material3 Adaptive 1.1.0
1.8.0-beta02 (April 2025)
Changes since 1.8.0-beta01
Features
iOS
- Support text input when Full Keyboard Access is enabled #1917
- Added native behavior for tap, long tap and multiple tap to
BasicTextField(TextFieldState)#1923 - Magnifier support for
BasicTextField(TextFieldState)#1926
Fixes
Multiple Platforms
- Fixed
IllegalArgumentException: maxWidth(value) must be >= than minWidth(0)crashes when aTextFieldwithtrailingIconis too narrow #1936 - Fixed crash when dragging selection in
TextField(TextFieldState)while also editing the text, such as by pressing Backspace #1969
iOS
- Fix Text Menu opening after Select All action tap #1930
- Fix freeze where scrolling was cancelled but the overscroll effect was not completed #1928
- Fix overscroll animation freeze when pull-to-refresh is triggered #1932
- Fix issue where root compose canvas does not resize without animation #1934
- Fix issue where dialog layer may not be shown #1934
- Remove focus on accessibility nodes with clearing semantics #1933
- Fix adding extra
MetalViewwhen Compose controller re-enters view hierarchy #1938 - (prerelease fix) Fix deletion of certain RTL or diacritics characters #1952
- Fix the first layer appearance freeze #1948
- Fixed text editing behavior (typing / deleting) in
BasicTextField(TextFieldState)with appliedOutputTransformation#1953 - Fixed incorrect undo behavior for text deletion in
BasicTextField(TextFieldState)#1956 - (prerelease fix) Fix Text Menu popup placement #1971
Desktop
- Fixed only the first character being temporarily shown in a
SecureTextField#1853 - Changes in
TextFieldStateare now correctly reported to the transformations when inputting composite characters (e.g. ㅀ), instead of the whole text being replaced on each new character #1853 - Fixed a potential deadlock when calling
Snapshot.sendApplyNotificationsfrom a thread other than the event dispatching thread #1955 - Fix missing window shadows on macOS in case of usage
compose.interop.blendingflag #1908 - Fix
Execution failed for task ':composeApp:proguardReleaseJars'whenmaterial3is included in the project #5261
Web
- Fix horizontal scroll when using touchpad and pressing Shift #1909
- Prevent app from crashing when running in an insecure context where Web Clipboard API is unavailable #1931
- Replace tab characters with spaces in
TextandTextFields, to avoid them being drawn as tofu #1943 - Fix touch events processing. Now
Modifier.detectTransformGestureswill allow to handle zoom and rotation gestures #1942
Navigation
- (prerelease fix) Fixed navigation on JS targets #1939
- (prerelease fix) Encode only parameters in web navigation routes to have nicer UX #1940
- (prerelease fix) Add a flag to disable iOS back gesture detection #1951
- (prerelease fix) Fixed default pop
NavHostanimations if enter/exit animations are customized only #1963
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0-beta02. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-alpha06. Based on Jetpack Lifecycle 2.9.0-alpha12 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-alpha16. Based on Jetpack Navigation 2.9.0-alpha08 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0-beta02. Based on Jetpack Material3 Adaptive 1.1.0
1.8.0-beta01 (March 2025)
Changes since 1.8.0-alpha04
Breaking Changes
Multiple Platforms
- Add
@Composableannotations to the actualWindowInsets.Companion.*extensions to match the expected declarations #1919, #1720
Features
iOS
- Add ability to recreate Composable after
ComposeUIViewControllerleaves view controller hierarchy #1877 - Support trackpad pointer input #1893
- Save Composable state when view controller leaves view controller hierarchy #1904
Fixes
iOS
- Removed permissions alert when pasting text into a
TextField#1894 - Fix crash when removing popup during scene size change animation #1878
- Fix accessibility elements rects when
ComposeUIViewControlleris shifted #1899 - Fixed an issue where it wasn't possible to open a popup using pointer input devices #1906
- Fix popup safe drawing padding when
usePlatformInsets = true#1920 - Fix an issue where Compose would retain the old state when its view was reappeared #1921
- (prerelease fix) Fix non-interactive UI after interop view tap #1925
Desktop
- [Windows] Fixed ordering of
SwingPanels when usingcompose.interop.blending=true#1901 - [macOS] Fix, for some cases, the background flashing when closing a window/dialog. This can still happen if an animation is running when the window or dialog is closing #1911
- Fix
onRenderApiChangedinComposeWindowandComposeDialognot working when the renderer changes due to fallback, rather than explicit change #1911 - [Swing Interop] Fixed
compose.interop.blending=truecompletely breaking Swing interop on Windows when Direct3D is unsupported. Note that interop blending is still supported on Windows only if Direct3D is available #1913
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0-beta01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-alpha05. Based on Jetpack Lifecycle 2.9.0-alpha12 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-alpha15. Based on Jetpack Navigation 2.9.0-alpha08 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0-beta01. Based on Jetpack Material3 Adaptive 1.1.0-beta01
1.8.0-alpha04 (March 2025)
Changes since 1.8.0-alpha03
Highlights
Desktop
- Improved performance on Windows by replacing the native code compiler to Clang. See details in https://github.com/JetBrains/skiko/pull/1020#issuecomment-2649433785 #1863
- DirectX rendering FPS is 17 % higher
- Software rendering FPS is 73 % higher
- Skiko binary size is reduced from 16.7 to 12.1 Mb on x64 and from 17.4 to 10.5 Mb on arm64
- Note that the numbers are measured on one machine and also can differ between Compose 1.7 and Compose 1.8 (will be updated in the stable Release Notes)
Known Issues
iOS
- Back gesture may remain stuck in the middle, the fix will be available in the next pre-release version #1861
Breaking Changes
Multiple Platforms
- Google Maven now contains some artifacts for all Kotlin targets including Wasm and JS. Compose Multiplatform now depends on those artifacts and user projects might need to add
google()repo torepositories {...}block if it is not there yet #1819 - Multiplatform lifecycle was migrated from a internal
core-bundlemodule to the androidx SavedState. Libraries that useorg.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstateororg.jetbrains.androidx.savedstate:savedstateshould migrate to the latest version #1850 - (prerelease fix) Material3 is reverted from Jetpack Compose Material3
1.4.0-alpha07to1.3.1because 1.4.0 Stable will be released only after Compose Multiplatform 1.8.0. As a workaround to continue using the new API, replace:
by:implementation(compose.material3)
Jetpack Compose Material3 1.4.0 will be merged again sometime after the Compose Multiplatform 1.8.0 release #1868implementation("org.jetbrains.compose.material3:material3:1.8.0-alpha03")
Features
iOS
- Support new haptic feedback types #1831
- Support for focusable nodes when Full Keyboard Access is enabled on iOS #1825
- Floating cursor support for
BasicTextField(TextFieldState)#1598 - Add support for Bold Text accessibility setting #1846
- Bhojpuri language support for VoiceOver #1838
- Add support for Reduce Motion accessibility setting #1847
- Default
androidx.navigationtransition animation on iOS is as close as possible to the iOS back gesture #1861 - Support accessibility text input #1875
- Support text input for UI Tests #1875
- Accessibility: added ability to traverse nodes within a scrollable container #1837
Fixes
Multiple Platforms
- Fixed the output of
TextField(TextFieldState)(akaBasicTextField2) transformations incorrectly leeching into the untransformed text itself, when input method is used (Chinese and other languages with multi-keystroke character input) #1833 - Fix possible
IllegalArgumentException: Object already closedduringGraphicsLayer.record#1839 - (prerelease fix) Change an
Escbutton interception fromonPreviewKeyEventtoonKeyEventin the desktopBackGestureDispatcherimplementation. It fixes problems when user's code handles theEsc-button #1860 - (prerelease fix) Fix a problem when an
onBackcallback is updated but listener is not #1860 - (prerelease fix) Fix memory leak in some cases of re-usage internal layout nodes #1873
- Compose runtime module now exposes its dependency on Kotlin Coroutines API (changed from
implementation()toapi()) #1883 - Correctly set
ScrollState.viewportSizefor (Basic)TextField(TextFieldState)#1896
iOS
- (prerelease fix) Fixed issue where cross-directional scrolling could intercept and cancel each other #1851
- Fixed a bug where touches could be handled by back gesture and composable content at the same time #1879
Desktop
- (prerelease fix) Restore compatibility with Ubuntu 20.04 #1870
- (prerelease fix) Fix "Could not resolve version conflict" in non-Gradle projects #1872
Web
- Mobile browsers: the virtual keyboard is shown when the TextField is clicked/focues #1865
- Fix text selection with mouse in TextField #1876
Navigation
- (prerelease fix) Fix a desktop back navigation when Esc button clicked #1890
- (prerelease fix) Fix an iOS back navigation after a swipe on disallowed edge #1890
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0-alpha04. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-alpha04. Based on Jetpack Lifecycle 2.9.0-alpha08 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.9.0-alpha14. Based on Jetpack Navigation 2.9.0-alpha07 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0-alpha04. Based on Jetpack Material3 Adaptive 1.1.0-beta01
1.8.0-alpha03 (February 2025)
Changes since 1.8.0-alpha02
Highlights
Multiple Platforms
- Compose Multiplatform codebase is fully migrated to K2. Please note that native and web klibs can be consumed only with Kotlin 2.1.0 or newer. Also, due to underlying changes in the compiler plugin, it's better to recompile libraries against the new version. Please let us know if you find any compatibility issues during this migration
- Implement multiplatform
BackHandlerandPredictiveBackHandler. And use them in material3 widgets and androidx-navigation library
Breaking Changes
Multiple Platforms
- IdlingResource interface was moved from commonMain to android and desktop source sets. The related experimental methods of ComposeUiTest were moved too. They are not available for Web and iOS anymore. Consider using waitUntil function as an alternative. Note: it's a breaking change only for Web and iOS, but not for Desktop and Android
iOS
Features
Multiple Platforms
- Update skia to m132
- Adopt a new
Clipboardinterface with suspend functions, which work correctly on all targets including Web. TheClipboardManagerwas deprecated because it was not possible to correctly implement it for Web
iOS
- Support VoiceControl on iOS
AccessibilitySyncOptionsremoved. The accessibility tree is built on demand- Calculate the order and location of semantic elements in the same way as it's done on Android
- Support
UIAccessibilityContainerTypeSemanticGroupfor traversal groups - Compose works correctly with nested
UIScrollViews, as well as withinUIScrollViews - Added the ability to close modal Compose view controllers (with non-scrollable content on them) with a swipe gesture
Fixes
Multiple Platforms
- Fix light source position for shadow rendering to match the Material specification and Android behavior
- Fix inconsistency between Android and Desktop in
placeWithLayerscale application: offset is not scaled now (Android behavior) - Clear the canvas before rendering each frame in tests, to avoid drawing different frames on top of each other, resulting in incorrect images being returned by
captureToImage
iOS
- Performance issues when iOS screen reader is active fixed
- Fixed issues where the interactive pop gesture would stop working
- Fixes an issue where it's not possible to close the
UIMenuthat appears over the Compose content - Fix touches tracking for multitouch gestures
Desktop
- Elements marked with
Modifier.semantics { hideFromAccessibility() }should now be correctly hidden from a11y - Fixed the positioning of the IME candidate popup for
TextField(TextFieldState)(akaBasicTextField2) - Fixed input of diacritics via long-press on macOS in
TextField(TextFieldState)(akaBasicTextField2) - Radio buttons and any other elements using
Modifier.selectablewithRole.RadioButtonwill have their state reported to accessibility viaAccessibleValue.getCurrentAccessibleValue()and asAccessibleState.CHECKEDingetAccessibleStateSet()
Web
- The
BasicTextFieldhandles browser copy/cut/paste events correctly now. Previously, they were ignored
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0-alpha03. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-alpha03. Based on Jetpack Lifecycle 2.9.0-alpha03 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha13. Based on Jetpack Navigation 2.8.4 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0-alpha03. Based on Jetpack Material3 Adaptive 1.1.0-beta01
1.8.0-alpha02 (January 2025)
Changes since 1.8.0-alpha01
Highlights
Resources
Features
iOS
- Accessibility navigation uses safe area to calculate when focused rect is out of bounds
- Initial Drag&Drop support
- Align Compose components semantics with UIKit views accessibility
Web
Fixes
Multiple Platforms
iOS
- Fixes an interruption while typing characters on a Chinese keyboard
- Accessibility reading of content when obscured by layers such as pop-ups and dialogs
- Taps should be properly registered on interop views with
UIKitInteropInteractionMode.Cooperativeinteraction mode - Interactive pop on
UINavigationControllershould recognize correctly - Enables Cupertino overscroll by default for scrollable components
- Experimental method
optOutOfCupertinoOverscroll()removed - Fix iOS Accessibility element tree construction within merged nodes
Desktop
- Fixed rare crash when using a scrollbar for lazy grid with animated enter/exit items
- Fix possible exception during
Dialog/Popupcreation in case ofcompose.layers.type=COMPONENTand pointingwindowContainertoComposePanelitself - Fix interop initial z-order placement on Windows with
compose.interop.blendingflag (1.7.0 regression) - Fixed the background of transparent windows/dialogs on Windows becoming opaque as the window is moved
Resources
Navigation
- Fix incorrect navigation up on the root screen for non-android targets
- Fixed browser navigation integration when route paths contain special symbols
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0-alpha02. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-alpha02. Based on Jetpack Lifecycle 2.9.0-alpha03 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha12. Based on Jetpack Navigation 2.8.4 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0-alpha02. Based on Jetpack Material3 Adaptive 1.1.0-alpha07
1.7.3 (December 2024)
Changes since 1.7.1
Features
Desktop
Fixes
iOS
- Taps should be properly registered on interop views with
UIKitInteropInteractionMode.Cooperativeinteraction mode - Interactive pop (swipe to go back) on
UINavigationControllershould recognize correctly
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.3. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.4. Based on Jetpack Lifecycle 2.8.5 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha11. Based on Jetpack Navigation 2.8.0 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.1. Based on Jetpack Material3 Adaptive 1.0.0
1.8.0-alpha01 (November 2024)
Changes since 1.7.1
Highlights
iOS
- LocalUIViewController moved to the
androidx.compose.ui.uikitmodule - Update
AccessibilitySyncOptionsand removeAccessibilityDebugLoggerfrom public API - ComposeUIViewControllerDelegate marked as deprecated. Use parent view controller to override the methods of the UIViewController class
- Remove experimental flag from
fun enableTraceOSLog() - Remove obsolete Canvas Layers mode on iOS
Breaking Changes
Multiple Platforms
- Tests that relied on
waitForIdle,awaitIdleorrunOnIdle(whether explicit or implicit) executingdelay-ed coroutines will no longer work correctly. To fix this advance the test time viamainClockmanually, as needed For example, tests that previously did something like:
will need to addvar updateText by mutableStateOf(false) var text by mutableStateOf("0") setContent { LaunchedEffect(updateText) { if (updateText) { delay(1000) text = "1" } } } updateText = true waitForIdle() assertEquals("1", text)mainClock.advanceTimeBy(1000)afterwaitForIdle(), becausewaitForIdleno longer waits for thedelay-ed coroutine to complete - Tests that advance the test clock (via
mainClock.advanceTimeBy) may see different behavior with regards to the amount and timing of recomposition, layout, drawing and effects runOnIdlewill now executeactionon the UI threadrunOnIdlewill no longer callwaitForIdleafter executing the action- Advancing
mainClocksuch that it doesn't reach the next frame, will no longer cause a recomposition
Desktop
Features
Multiple Platforms
- Support configurable vertical text centering via
LineHeightStyle.Alignment - Support Variable Fonts In All Platforms
iOS
- Add localised string for VoiceOver accessibility support
- Support state announcements for scrollable lists in VoiceOver
- Support for accessibility gestures for left-to-right languages
Desktop
Resources
Gradle Plugin
Navigation
- Basic support a navigation by deep links
- Commonize
navController.navigate(Uri)method - Implemented non-android
navController.handleDeepLink(NavDeepLinkRequest)method - New API to configure browser navigation buttons and the address line
- Navigation via a browser address field
Fixes
Multiple Platforms
waitForIdle,awaitIdleandrunOnIdleno longer consider Compose to be non-idle when coroutines launched in a composition scope calldelay. This prevents tests with an infinite loop withdelayin aLaunchedEffectfrom hanging- Tests that advance the test clock (via
mainClock.advanceTimeBy) will now correctly (re)compose/layout/draw/effects each virtual frame as needed runOnIdlewill now executeactionon the UI thread, as Android behavesrunOnIdlewill no longer callwaitForIdleafter executing the action, as Android behaves- The overhead for running an empty test has been significantly reduced
iOS
- Deprecate defaultUIKitMain()
- Fixed visibility of
androidx.compose.material3.internal.formatWithSkeletonthat was accidently marked as public - Fix a bug where the accessibility tree did not reload when VoiceOver was enabled
- Fix Display Cutout Padding when rotating the device
Desktop
- Fix drag-and-drop when the list of supported actions doesn't include
Move - Fix accessibility focus when using
compose.swing.render.on.graphics=true - Fix "Context menu on desktop shows incorrect items after the second showing"
Resources
Navigation
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.8.0-alpha01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.9.0-alpha01. Based on Jetpack Lifecycle 2.9.0-alpha03 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha11. Based on Jetpack Navigation 2.8.0 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.1.0-alpha01. Based on Jetpack Material3 Adaptive 1.1.0-alpha04
1.7.1 (November 2024)
Changes since 1.7.0
Fixes
Multiple Platforms
- Fixed
Modifier.clickablebinary compatibility with 1.6 on non-JVM targets - Fixed
Modifier.toggleableandModifier.selectablebinary compatibility with 1.6 on non-JVM targets - Fix issue where
DateRangePickerdoesn't show confirmation button on iOS and Desktop - Fix Skia paragraph caching performance degradation
iOS
- Fling animation works correctly for fast scrolling gestures
- Fix HorizontalPager snapping on iOS
- Fixed double recomposition on the first screen
- Fix Accessibility Items availability inside dialogs
- Memory leak due to Compose view controller never GCed
Desktop
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.1. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.4. Based on Jetpack Lifecycle 2.8.5 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha10. Based on Jetpack Navigation 2.8.0 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.1. Based on Jetpack Material3 Adaptive 1.0.0
1.7.0 (October 2024)
Changes since 1.6.11
Highlights
Resources
Navigation
Web
skiko.jsis redundant in case of K/Wasm Compose Multiplatform for web applications and it can be removed from index.html files to not load redundant files.skiko.jswill be removed from the k/wasm distribution in the future releases.skiko.jsis still needed in case of K/JS Compose Multiplatform for web apps
Breaking changes
iOS
UIKitViewandUIKitViewControllerinpackage androidx.compose.ui.interopare deprecated. New API are mentioned in deprecation message. Deprecated invocations should work fine unless customonResizeis used, it is disallowed now and will print a warning.- Actual of expected
InteropViewon iOS isUIRespondernow instead ofUIView. It's the first common ancestor forUIViewControllerandUIView, both of which can be integrated using iOS interop APIs - The app will crash by default, if
CADisableMinimumFrameDurationOnPhoneis not set to true inInfo.plist. Use newly addedComposeUIViewControllerConfiguration.enforceStrictPlistSanityCheckto opt-out of this behavior
Desktop
Android
Resources
Features
Multiple Platforms
- The
clickablemodifier now responds to NumPadEnter and Spacebar, too, in addition to Enter LocalLifecycleOwnermoved from Compose UI tolifecycle-runtime-composeso that its Compose-based helper APIs can be used outside of Compose UI- Skia is updated to m126
- Commonized
org.jetbrains.compose.material3:material3-window-size-classmodule - Commonized
org.jetbrains.compose.material3.adaptive:adaptive*modules - New multiplatform module "material-navigation" (in beta status)
material3-adaptive-navigation-suiteis multiplatform now- Support Kotlin 1.9.25
iOS
- Initial iOS floating cursor support
- Added
accessibilityEnabled: Boolean = trueargument toUIKitViewandUIKitViewController preferredStatusBarStyle,preferredStatysBarAnimationandprefersStatusBarHiddenare added toComposeUIViewControllerDelegateto allow status bar appearance modification- Improvements in touches processing to detect if touches were meant to be delivered to interop views, or should be processed by Compose
- New
UIKitViewandUIKitViewControllerAPI inpackage androidx.compose.ui.viewinterop. Support ofonResetto reuse the interop composable emitted node and avoid excessive native views reallocations, fine-grain touches strategy control (cooperative with explicit time delay, non-cooperative where no touches are received by Compose, ignoring touches) - Basic support for
BasicTextField(TextFieldState, ...)on iOS
Desktop
- Add constructor with
RenderSettingstoComposePanel. Added a classRenderSettingswithval isVsyncEnabled: Boolean?. When set totruegives a hint to renderer implementation of the particularComposePanelto reduce the latency between the input and visual changes in exchange for possible screen tearing - Add public
moveEnabledandpositionPercentagesetters inSplitPaneState - Implemented Drag-and-Drop from AOSP:
Modifier.dragAndDropSourceandModifier.dragAndDropTarget - Added support for input methods (languages such as Chinese, Korean, Arabic) to BasicTextField(TextFieldState, ...)
- Add dynamic Drag&Drop target indication (🚫 icon under cursor if currently there is no valid drop target under it)
- The thickness of border resizers in undecorated windows and dialogs can now be controlled by passing a new
decorationargument
Resources
- Speed resources web rendering up by the reading a cached value instantly
- If there is no resource with suitable density, use resource with the most suitable density, otherwise use default (similar to the Android logic)
- Add a customization for resources directories. Now it is possible to use e.g downloaded resources
- Now the gradle plugin generates resources map to find a resource by a string ID
- To avoid constant reading raw font bytes on each Font usage on non-android targets, there was added the font cache. Android has own font cache inside the platform implementation
- Added utility functions to decode
Bitmap ByteArray as ImageVectorandXML ByteArray as ImageVectorin the common code andSVG ByteArray as Painterin the non-android code - Added support of test resources in Compose Multiplatform projects
- Added support of multi-module resources in JVM-only projects
Gradle Plugin
Fixes
Multiple Platforms
- Fix "ComposePanel. Focus moves to child after focusing/unfocusing the main window"
- Don't show code completion for non-existenst API in
commonMainthat fails on Android withNoSuchMethodException - Fix order of interop elements in some cases
- Fixed
Popupjerking during ripple effect animation - Fix applying
ShaderBrushto part ofAnnotatedString - Fix text
brushanimation and optimized updating some visual text properties (applying time is reduced up to 40%) - Fix initial cursor position in the empty
TextFieldwith explicitly setTextAlignment - Fix focus for editable
TextFieldinsideExposedDropdownMenuBox - Fix changing
FontRenderingSettingsis not reflected until composition restarts
iOS
- Pressing directional keys on a physical keyboard connected to iOS device doesn't cause a crash
- Dismissing popup or dialogue within a very short timespan after its creation doesn't cause a crash
- Fix missing invalidations during native view resize
- Fixed a memory spike when continuously resizing the
ComposeUIViewController(such as when used in modal sheet presentation context with different detents) - visibility of selection handles in single-line textfields with LTR + RTL text in iOS
- Interop views are now correctly clipped when their measured clipped and unclipped bounding boxes don't match
- Touches inside interop views are not exclusive to them and are processed on Compose side as well.
- Fix
material3.ModalBottomSheetsafe area usage - Fix hiding interop element during quick scroll
- Fixed the keyboard appearing when selecting from SelectionContainer
- Fix status bar padding on iPad devices
- VoiceOver doesn't allow to perform a11y actions (scrolling, activate, customActions) when disabled() semantics is present in affected element
- Fix frame drops when dragging scrollable content on iOS
- A new approach to implementation of
platformLayers. Now extra layers (such as Dialogs and Popups) drawing is merged into a single screen size canvas. No jittering and crashes should happen with those anymore. Dialogs andPopups now have their insets calculated correctly even when the frame ofComposeUIViewControllerspawning them doesn't intersect any safe areas- Fix offset issues with keyboard and
TextField - Fix "Incorrect
imePaddingand high cpu usage when repeatedly opening and closingKeyboardon iOS" - Fix "Selection handlers in wrong positions in a fullscreen TextField"
- Fix keyboard closing while scrolling content with Text Fields
- Fix "UriHandler.openUri no longer works on iOS 18"
Desktop
- Fix possible
UninitializedPropertyAccessExceptionindesktopTest - Fixed
ComposePanel.requestFocus(), making it correctly assign focus to the first focusable child - When using
ComposePanelinside a Swing application on macOS, VoiceOver will now correctly go into theComposePanelwhen traversing accessible elements - When using
ComposePanelinside a Swing application on Windows with NVDA turned on, focus will now correctly go into theComposePanelwhen traversing with (ctrl)-shift-tab - Correctly save
WindowStatewith unspecifiedsizeinstead of crashing - Fix
IndexOutOfBoundsExceptioncrash on Windows when traversing a11y elements - Fix scrolling non-same direction nested scrolls with trackpad
- Fix fling velocity for precise wheel scroll
- [macOS] Fix crash when right-clicking an empty
SelectionContaineror on the padding of aTextinside aSelectionContainer - Fix bounds of
ComposePanelin IntelliJ on macOs - Fix UI glitch when resizing a Compose window via its
WindowState
Web
- Process
keydownandkeyupkeys for identified keys from virtual keyboard - Allow preloading the fallback fonts. This enables the usage of emojis and other unicode characters without manually composing the Text with AnnotatedString
- Make sure the web app distribution doesn't contain a duplicate
skiko.wasm - Prevent a crash on mobile web when selecting some text in
SelectionContainer
Resources
- Delete
contextClassLoaderusage on JVM targets - Create an empty resource dir with "podspec" task instead "podInstall"
- Fix resource accessors escaping. Now it is possible to use resources with names: "package", "is", "item_$xxx" etc
- Read exactly requested count of bytes from InputStream on jvm platforms
- Now drawables from upper DPIs will be downscalled to the expected size. (the same behavior as on Android)
Gradle Plugin
- Make sure tryGetSkikoRuntimeIfNeeded is executed only during the task execution
- Delete outdated build services
- Support project isolation
- Fix a gradle project misconfiguration when KSP and Room are used
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.0. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.3. Based on Jetpack Lifecycle 2.8.5 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha10. Based on Jetpack Navigation 2.8.0 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.0. Based on Jetpack Material3 Adaptive 1.0.0
1.7.0-rc01 (September 2024)
Changes since 1.7.0-beta02
Highlights
Web
skiko.jsis redundant in case of K/Wasm Compose Multiplatform for web applications and it can be removed from index.html files to not load redundant files.skiko.jswill be removed from the k/wasm distribution in the future releases.skiko.jsis still needed in case of K/JS Compose Multiplatform for web apps
Features
Multiple Platforms
Desktop
- (prerelease fix) The
decorationparameter added toWindowandDialogWindowand the APIs related to it are now marked as experimental
Gradle Plugin
Fixes
Multiple Platforms
- (prerelease fix) Fix possible infinity invalidation loop triggered by
GraphicsLayer.record - Fix changing
FontRenderingSettingsis not reflected until composition restarts
iOS
- (prerelease fix) Fix "
ListDetailPaneScaffoldfrom material3-adaptive throws ArrayIndexOutOfBoundsException" - (prerelease fix) Fix "White bars on sides on some devices"
- Fix offset issues with keyboard and
TextField - Fix "Incorrect
imePaddingand high cpu usage when repeatedly opening and closingKeyboardon iOS" - Fix "Selection handlers in wrong positions in a fullscreen TextField"
- Fix keyboard closing while scrolling content with Text Fields
- (prerelease fix) Fix missing interop views with new
onResetargument and placing inside more complex reusable layout insideLazy*lists - (prerelease fix) Fix selection handlers height for
BasicTextFieldon iOS - (prerelease fix) To avoid
Symbol not found: _objc_release_x8crash on iOS 15 simulators, skia has been re-built with downgraded Xcode (13.1) - Fix "UriHandler.openUri no longer works on iOS 18"
Desktop
- Fix bounds of
ComposePanelin IntelliJ on macOs - Fix UI glitch when resizing a Compose window via its
WindowState
Web
Android
- (prerelease fix) Fix "Compose UI test error on android: No static method forceEnableAppTracing"
- (prerelease fix) Fix "Android target depends on prerelease versions"
Navigation
- (prerelease fix) Fix
IllegalArgumentExceptionon putting lists intosavedStateHandle
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.0-rc01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.2. Based on Jetpack Lifecycle 2.8.4 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha10. Based on Jetpack Navigation 2.8.0-rc01 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.0-rc01. Based on Jetpack Material3 Adaptive 1.0.0
1.7.0-beta02 (September 2024)
Changes since 1.7.0-beta01
Breaking changes
Desktop
Resources
Features
Multiple Platforms
iOS
Desktop
Fixes
Multiple Platforms
- (prerelease fix) Fix
GraphicsLayerperspective matrix calculation and missing invalidations - (prerelease fix) Fix Wasm/Native ArrayIndexOutOfBoundsException exception in adaptive-layout module
iOS
- A new approach to implementation of
platformLayers. Now extra layers (such as Dialogs and Popups) drawing is merged into a single screen size canvas. No jittering and crashes should happen with those anymore. Dialogs andPopups now have their insets calculated correctly even when the frame ofComposeUIViewControllerspawning them doesn't intersect any safe areas
Desktop
- (prerelease fix) Fix "Moving after initiating a click cancels it"
Resources
Gradle Plugin
Lifecycle
- Lifecycle 2.8.2 depends on Compose 1.6.11 (Lifecycle 2.8.1 accidentaly made dependent on Compose 1.7.0-beta01)
Navigation
- (prerelease fix) Fix saving state for nested
NavHostController - (prerelease fix) Fixed missing commonization for type-safe version of
SavedStateHandle.toRoute
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.0-beta02. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.2. Based on Jetpack Lifecycle 2.8.4 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha10. Based on Jetpack Navigation 2.8.0-rc01 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.0-alpha03. Based on Jetpack Material3 Adaptive 1.0.0-rc01
1.7.0-beta01 (September 2024)
Changes since 1.7.0-alpha03
Breaking changes
iOS
UIKitViewandUIKitViewControllerinpackage androidx.compose.ui.interopare deprecated. New API are mentioned in deprecation message. Deprecated invocations should work fine unless customonResizeis used, it is disallowed now and will print a warning.- Actual of expected
InteropViewon iOS isUIRespondernow instead ofUIView. It's the first common ancestor forUIViewControllerandUIView, both of which can be integrated using iOS interop APIs - The app will crash by default, if
CADisableMinimumFrameDurationOnPhoneis not set to true inInfo.plist. Use newly addedComposeUIViewControllerConfiguration.enforceStrictPlistSanityCheckto opt-out of this behavior
Features
Multiple Platforms
iOS
- New
UIKitViewandUIKitViewControllerAPI inpackage androidx.compose.ui.viewinterop. Support ofonResetto reuse the interop composable emitted node and avoid excessive native views reallocations, fine-grain touches strategy control (cooperative with explicit time delay, non-cooperative where no touches are received by Compose, ignoring touches)
Desktop
- Added support for input methods (languages such as Chinese, Korean, Arabic) to BasicTextField(TextFieldState, ...)
- Add dynamic Drag&Drop target indication (🚫 icon under cursor if currently there is no valid drop target under it)
Resources
- Added support of test resources in Compose Multiplatform projects
- Added support of multi-module resources in JVM-only projects
Fixes
Multiple Platforms
- (prerelease fix) Fix redirect on android artifacts for "window-core" module
iOS
Desktop
Resources
- (prerelease fix) Fix a resource reading on iOS 12
- (prerelease fix) Fix resource reading on Java 11
Gradle Plugin
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.0-beta01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.1. Based on Jetpack Lifecycle 2.8.4 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha09. Based on Jetpack Navigation 2.8.0-beta05 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.0-alpha02. Based on Jetpack Material3 Adaptive 1.0.0-rc01
1.7.0-alpha03 (August 2024)
Changes since 1.7.0-alpha02
Features
Multiple Platforms
- Skia is updated to m126
- Commonized
org.jetbrains.compose.material3:material3-window-size-classmodule - Commonized
org.jetbrains.compose.material3.adaptive:adaptive*modules
Resources
Fixes
Desktop
- [macOS] Fix crash when right-clicking an empty
SelectionContaineror on the padding of aTextinside aSelectionContainer - (prerelease fix) Fix input methods position on the screen and
NullPointerException: Cannot read field
iOS
Gradle Plugin
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.0-alpha03. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0. Based on Jetpack Lifecycle 2.8.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha09. Based on Jetpack Navigation 2.8.0-beta05 -
Material3 Adaptive libraries
org.jetbrains.compose.material3.adaptive:adaptive*:1.0.0-alpha01. Based on Jetpack Material3 Adaptive 1.0.0-beta04
To use Material3 Adaptive add the dependencies for the artifacts you need in the build.gradle file for your app or module:
dependencies {
implementation("org.jetbrains.compose.material3.adaptive:adaptive:1.0.0-alpha01")
implementation("org.jetbrains.compose.material3.adaptive:adaptive-layout:1.0.0-alpha01")
implementation("org.jetbrains.compose.material3.adaptive:adaptive-navigation:1.0.0-alpha01")
}
1.7.0-alpha02 (July 2024)
Changes since 1.7.0-alpha01
Features
Multiple Platforms
- The
clickablemodifier now responds to NumPadEnter and Spacebar, too, in addition to Enter LocalLifecycleOwnermoved from Compose UI tolifecycle-runtime-composeso that its Compose-based helper APIs can be used outside of Compose UI
iOS
Desktop
Resources
- Now the gradle plugin generates resources map to find a resource by a string ID
- To avoid constant reading raw font bytes on each Font usage on non-android targets, there was added the font cache. Android has own font cache inside the platform implementation
Fixes
Multiple Platforms
iOS
- Interop views are now correctly clipped when their measured clipped and unclipped bounding boxes don't match
- Touches inside interop views are not exclusive to them and are processed on Compose side as well.
- Fix
material3.ModalBottomSheetsafe area usage - Fix hiding interop element during quick scroll
- (prerelease fix) Fixed floating cursor isn't working
- Fixed the keyboard appearing when selecting from SelectionContainer
- Fix status bar padding on iPad devices
- VoiceOver doesn't allow to perform a11y actions (scrolling, activate, customActions) when disabled() semantics is present in affected element
Desktop
- Fix scrolling non-same direction nested scrolls with trackpad
- Fix fling velocity for precise wheel scroll
- (prerelease fix) Fix remaining focus indication after a click
Resources
- (prerelease fix) Fix an android app compose resources packaging broken after introduction AS previews
- Now drawables from upper DPIs will be downscalled to the expected size. (the same behavior as on Android)
Gradle plugin
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.0-alpha02. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0. Based on Jetpack Lifecycle 2.8.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha08. Based on Jetpack Navigation 2.8.0-beta03
1.7.0-alpha01 (July 2024)
Changes since 1.6.11
Highlights
- Compose Multiplatform resources are stored in the android assets now. This fixes Android Studio Preview and cases such as a rendering resource files in WebViews or Media Players
- Shared Element Transitions
- Safe Args in Navigation Compose
Breaking changes
Android
Features
iOS
- Initial iOS floating cursor support
- Added
accessibilityEnabled: Boolean = trueargument toUIKitViewandUIKitViewController preferredStatusBarStyle,preferredStatysBarAnimationandprefersStatusBarHiddenare added toComposeUIViewControllerDelegateto allow status bar appearance modification
Desktop
- Add constructor with
RenderSettingstoComposePanel. Added a classRenderSettingswithval isVsyncEnabled: Boolean?. When set totruegives a hint to renderer implementation of the particularComposePanelto reduce the latency between the input and visual changes in exchange for possible screen tearing - Add public
moveEnabledandpositionPercentagesetters inSplitPaneState
Resources
- Speed resources web rendering up by the reading a cached value instantly
- If there is no resource with suitable density, use resource with the most suitable density, otherwise use default (similar to the Android logic)
- Add a customization for resources directories. Now it is possible to use e.g downloaded resources
Fixes
Multiple Platforms
- Fix "ComposePanel. Focus moves to child after focusing/unfocusing the main window"
- Don't show code completion for non-existenst API in
commonMainthat fails on Android withNoSuchMethodException - Fix order of interop elements in some cases
- Fixed
Popupjerking during ripple effect animation - Fix applying
ShaderBrushto part ofAnnotatedString - Fix text
brushanimation and optimized updating some visual text properties (applying time is reduced up to 40%) - Fix initial cursor position in the empty
TextFieldwith explicitly setTextAlignment - Fix focus for editable
TextFieldinsideExposedDropdownMenuBox
iOS
- Pressing directional keys on a physical keyboard connected to iOS device doesn't cause a crash
- Dismissing popup or dialogue within a very short timespan after its creation doesn't cause a crash
- Fix missing invalidations during native view resize
- Fixed a memory spike when continuously resizing the
ComposeUIViewController(such as when used in modal sheet presentation context with different detents) - visibility of selection handles in single-line textfields with LTR + RTL text in iOS
Desktop
- Fix possible
UninitializedPropertyAccessExceptionindesktopTest - Fixed
ComposePanel.requestFocus(), making it correctly assign focus to the first focusable child - When using
ComposePanelinside a Swing application on macOS, VoiceOver will now correctly go into theComposePanelwhen traversing accessible elements - When using
ComposePanelinside a Swing application on Windows with NVDA turned on, focus will now correctly go into theComposePanelwhen traversing with (ctrl)-shift-tab - Correctly save
WindowStatewith unspecifiedsizeinstead of crashing - Fix
IndexOutOfBoundsExceptioncrash on Windows when traversing a11y elements
Web
- Process
keydownandkeyupkeys for identified keys from virtual keyboard - Allow preloading the fallback fonts. This enables the usage of emojis and other unicode characters without manually composing the Text with AnnotatedString
- Make sure the web app distribution doesn't contain a duplicate
skiko.wasm
Resources
- Delete
contextClassLoaderusage on JVM targets - Create an empty resource dir with "podspec" task instead "podInstall"
- Fix resource accessors escaping. Now it is possible to use resources with names: "package", "is", "item_$xxx" etc
- Read exactly requested count of bytes from InputStream on jvm platforms
Gradle Plugin
- Make sure tryGetSkikoRuntimeIfNeeded is executed only during the task execution
- Delete outdated build services
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.7.0-alpha01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0. Based on Jetpack Lifecycle 2.8.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha08. Based on Jetpack Navigation 2.8.0-beta03
1.6.11 (June 2024)
Changes since 1.6.10
Fixes
Multiple Platforms
- Fix endless re-layout when layout is invalidated by measure, which includes measuring
TextField(singleLine=true)withIntrinsicSize - Fix container size for
Dialogcentering insideImageComposeScene
iOS
Desktop
- Fix
DropdownMenu/Popuppositioning when a window is moved to a screen with a different density - Fix possible scrolling without animation on some mouse models
Web
Resources
Gradle Plugin
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.11. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0. Based on Jetpack Lifecycle 2.8.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.7.0-alpha07. Based on Jetpack Navigation 2.7.7
1.6.10 (May 2024)
Changes since 1.6.2
Highlights
- Experimental multiplatform support of
LifecycleandViewModel. See documentation for details - Experimental multiplatform support of Jetpack Navigation. See documentation for details or check out the nav_cupcake project which was converted from the Navigate between screens with Compose Android codelab
- Support multi-module projects and libraries publication with Compose resources (Kotlin
2.0.0-Beta05or higher is required)
Breaking changes
- Since Kotlin
2.0-RC2, the additionalorg.jetbrains.kotlin.plugin.composeGradle plugin is required. See the migration guide
Features
Multiple Platforms
- Add font rasterization settings in paragraph style
- Localize internal strings in
ui,materialandmaterial3
iOS
- Magnifier for iOS 17+
- Support software keyboard inset in
Dialog - iOS a11y dialogues and popups integration
- OS logging integrated with
trace - Support accessibility scroll
- Improve iOS a11y sync behavior
- Add throttle for text context menu updates
- Support a11y for interop views
- Support
HapticFeedbackon iOS - iOS support
LiveRegionsemantics in a11y
Desktop
- Add an
alwaysOnTopflag toDialogWindow - Basic support of
BasicTextField2: #1227, #1264 full support and support for other platforms is planned for 1.7.0
Web
- Listen to browser clipboard events and bind them with Compose TextFieldSelectionManager and SelectionManager
- Introduce ComposeViewport function that renders content in parent container
- Introduce minimal virtual keyboard support
- Basic IME keyboard support
- Some experimental Compose Multiplatform Gradle plugin APIs for web app configuration were deprecated. Their usage is not required anymore.
Resources
- Support three letters locales
- Add DSL to configure compose resources
- Support plural string resource
- Add option to disable compose resources generation
- XML resource optimizations
- Get resource files as URI
- Support source set's hierarchy for compose resources
- Support SVG drawables for non android platforms
- Delete the experimental mark from the stable resources library API
- Add functions to retrieve bytes from drawable or font resources
- To disable the Compose Resources publication and the multimodule support in cases of problems add
org.jetbrains.compose.resources.multimodule.disable=trueto the rootgradle.properties
Gradle Plugin
- Add possibility to modify the macOS minimum version
- Make desktop preview task fully configuration cache compliant
- Option to pack jars as uber JAR, support Proguard for uber JAR
Fixes
Multiple Platforms
- Fix
NaNfont metrics by initializing typeface forTextStyle - Fix render order of interop views
- Reimplement SortedSet for JS/Native to improve performance
- Allow drawing outside of platform layers
- Prevent a few unnecessary re-compositions in
PopupandDesktopMenu - Propagate composition locals to layers in the (re)composition phase
- Move the effects and synthetic events dispatching to after the draw phase in the render loop
- Fix Kotlin/Native can't use
T::classin inline function of@Composable - Fix missing recomposition after showing
Dialog
iOS
- Fix keyboard disappear on IME action
- Fix nested scroll when
Pagerinvolved in scrolling process - Fix a11y wrong bounds calculation
- Delay tap indication inside scroll
- Fix keyboard opening when scrolling begins within a
TextField - Fix IME window insets and view offset when keyboard appears
- Fix animation frozen after app went background
- Fixed appearing of text editing menu (#1269, #1293)
- Fix content rect calculation in
SelectionManager
Desktop
- Fix nested scrolling on mouse wheel
- Trigger fling callbacks on mouse wheel scroll (fixes
Pagerand lazy column/row spanning) - Fix
Pagerdirection detection for mouse wheel - Fix missing clicks inside
SelectionContainer - Fix clipping bounds of
SwingPanel - Locale-aware date formatting for desktop
- Pass the id of the node whose layout changed to accessibility controllers
WINDOWlayer fixes: #1181, #1185, #1187, #1189- Fix crash when we resize
ComposePanelafter re-adding it to the hierarchy - Fix propagation of
LocalLocalization - Re-show the tooltip on mouse-move following a click in TooltipArea
- Fix the direction of scrolling when pressing on the scrollbar track with
reverseLayout=true - Fix crash and allow selection in
SelectionContainerto start when drag starts below the bounds of the visible text - Fix a crash on Windows without
dcomp.dll - Fix crash when creating SwingRedrawer on DirectX
- Option to not throw
RenderExceptionwhen use OpenGL on macOS - Sync all AccessibilityControllers when an a11y query is received
- Fix crash when modifying Compose state from a non-UI thread
- Close
Popup/Dialogby clicking any mouse button outside
Web
- Implement actual
fun isCopyKeyEvent - Fix metadata compilation
- Support
sendKeytest utility function on wasm target - Send correct window sized on resize
- Dispose all listened events alongside with the application being disposed
- Modify
buttonFlagsonly onPressandRelease - Fix keyboard mappings
- Correct density rounding in
ComposeWindow::resize - Fix
MouseEventtoPointerButtonmapping - Correct virtual keyboard mode resolution
- Fix browser clipboard events handling on Windows
- Rename
viewportContainertoviewportContainerIdparameter inComposeViewport
Resources
- Fix resource accessors compilation when there are huge number of resource files
- Init resource accessors lazily and in external function to avoid
MethodTooLargeException - Fix
Resclass generation if the library is declared as 'api' - Fix resource packaging in APK when 'build' task is used with AGP 8.2+
- Use first of preferred locales instead of a current on iOS
- Fix
readResourceBytesfunction on Android if font is located under qualified directory - Fix android fonts in APKs
- Handle special characters for quantity strings
- Select default resource if there are no exact language+region or default language match
- Add validation checks on invalid XML or item type
Gradle plugin
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.10. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0. Based on Jetpack Lifecycle 2.8.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.7.0-alpha07. Based on Jetpack Navigation 2.7.7
1.6.10-rc03 (May 2024)
Changes since 1.6.10-rc02
Fixes
iOS
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.10-rc03. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0-rc03. Based on Jetpack Lifecycle 2.8.0 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.7.0-alpha06. Based on Jetpack Navigation 2.7.7
1.6.10-rc02 (May 2024)
Changes since 1.6.10-rc01
Known issues
- iOS compilation might fail on some projects with
org.jetbrains.kotlin.backend.konan.llvm.NativeCodeGeneratorException: Exception during generating code for following declaration: private fun $init_global()
Features
Web
Fixes
iOS
Resources
- To disable the Compose Resources publication and the multimodule support in cases of problems add
org.jetbrains.compose.resources.multimodule.disable=trueto the rootgradle.properties - (prerelease fix) Fix resources with cocoapods integration
- (prerelease fix) Fix AGP lint tasks dependency issues
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.10-rc02. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0-rc02. Based on Jetpack Lifecycle 2.8.0-rc01 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.7.0-alpha05. Based on Jetpack Navigation 2.7.7
1.6.10-rc01 (May 2024)
Changes since 1.6.10-beta03
Known issues
- A project with Android flavors cannot be imported into any IDE if it has Compose Multiplatform resources 1.6.10 + Kotlin 2.0.0
- If you experience the
org.jetbrains.compose.resources.MissingResourceException: Missing resource with path: ...error after switching your Kotlin version from 1.9 to 2.0 (or the other way around), this might be resolved by manually cleaning thebuilddirectories in your project - this includes thebuildfolders located in the root and module folders of your project.
Fixes
Desktop
- (prerelease fix) Fix inconsistency in closing
Dialogby mouse clicking on scrim that was introduced by1.6.10-beta02
Web
- Fix browser clipboard events handling on Windows
- Rename
viewportContainertoviewportContainerIdparameter inComposeViewport
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.10-rc01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0-rc01. Based on Jetpack Lifecycle 2.8.0-rc01 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.7.0-alpha04. Based on Jetpack Navigation 2.7.7
1.6.10-beta03 (April 2024)
Changes since 1.6.10-beta02
Highlights
Breaking changes
- Since Kotlin
2.0-RC2, the additionalorg.jetbrains.kotlin.plugin.composeGradle plugin is required. See the migration guide org.jetbrains.androidx.navigationis downgraded to2.7from2.8. Some API can no longer be available
Known issues
lifecycle-runtimebreaks Compose UI compatibility with Java 11 on desktop, it requires Java 17 or above now. Expected to be fixed in1.6.10-rc01- A project with Android flavors cannot be imported into any IDE if it has Compose Multiplatform resources 1.6.10 + Kotlin 2.0.0
Features
Multiple Platforms
- (prerelease fix) Publish additional targets for
lifecycle-runtime-compose
Lifecycle
- (prerelease fix) Update Lifecycle handling on iOS based on feedback
Web
Fixes
Multiple Platforms
- (prerelease fix) Fix frozen composition with pager and text field
Desktop
- Fix crash when creating SwingRedrawer on DirectX
- Option to not throw
RenderExceptionwhen use OpenGL on macOS
Resources
Gradle plugin
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.10-beta03. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0-beta02. Based on Jetpack Lifecycle 2.8.0-beta01 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.7.0-alpha03. Based on Jetpack Navigation 2.7.7
1.6.10-beta02 (April 2024)
Changes since 1.6.10-beta01
Known issues
lifecycle-runtimebreaks Compose UI compatibility with Java 11 on desktop, it requires Java 17 or above now. Expected to be fixed in1.6.10-rc01navigation-compose:2.8.0-*on Android brings Compose1.7.*dependency and might cause compatibility issues with1.6.*
Features
Lifecycle
- Publish additional targets for non-compose modules
- Commonize
inline fun <reified VM> viewModel(..) - Provide
ViewModelStoreOwnerby Compose view
Resources
- Delete the experimental mark from the stable resources library API
- Add functions to retrieve bytes from drawable or font resources
Navigation
Fixes
Multiple Platforms
- Fix Kotlin/Native can't use
T::classin inline function of@Composable - Fix missing recomposition after showing
Dialog - (prerelease fix) Fix shadow behind dialogs in platform-layer mode
iOS
- Fixed appearing of text editing menu (#1269, #1293)
- Fix content rect calculation in
SelectionManager - (prerelease fix) Fix crash on loading
UITextLoupeSessionon old iOS versions - (prerelease fix) Fix memory leaks (#1292, #1302)
Desktop
- Sync all AccessibilityControllers when an a11y query is received
- Fix crash when modifying Compose state from a non-UI thread
- Close
Popup/Dialogby clicking any mouse button outside - (prerelease fix) Fix
KeyEventbinary compatibility
Web
- Fix
MouseEventtoPointerButtonmapping - Correct virtual keyboard mode resolution
- (prerelease fix) Correct
Key.isTypedEventbehavior
Navigation
- (prerelease fix) Fix overriding dependency visibility
- (prerelease fix) Fix finding graph without route
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.10-beta02. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0-beta01. Based on Jetpack Lifecycle 2.8.0-beta01 -
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha02. Based on Jetpack Navigation 2.8.0-alpha05
1.6.10-beta01 (April 2024)
Changes since 1.6.2
Highlights
- Experimental multiplatform support of
LifecycleandViewModel. See documentation for details - Experimental multiplatform support of Jetpack Navigation. See documentation for details or check out the nav_cupcake project which was converted from the Navigate between screens with Compose Android codelab
- Support multi-module projects and libraries publication with Compose resources (Kotlin
2.0.0-Beta05or higher is required)
Known issues
- ⚠️ Crash at startup on pre-iOS 17 devices due to loading
UITextLoupeSession lifecycle-runtimebreaks Compose UI compatibility with Java 11 on desktop, it requires Java 17 or above now.inline fun <reified VM> viewModel(...)is not available from common due to compiler bug. Please usefun <VM> viewModel(KClass, ...)overload instead- Compose Multiplatform doesn't provide default
ViewModelStoreOwneryet. For usingViewModels outside ofNavHostyou need to provide custom store owner viaLocalViewModelStoreOwner
Features
Multiple Platforms
- Add font rasterization settings in paragraph style
- Localize internal strings in
ui,materialandmaterial3
iOS
- Magnifier for iOS 17+
- Support software keyboard inset in
Dialog - iOS a11y dialogues and popups integration
- OS logging integrated with
trace - Support accessibility scroll
- Improve iOS a11y sync behavior
- Add throttle for text context menu updates
- Support a11y for interop views
- Support
HapticFeedbackon iOS - iOS support
LiveRegionsemantics in a11y
Desktop
- Add an
alwaysOnTopflag toDialogWindow - Basic support of
BasicTextField2: #1227, #1264 full support and support for other platforms is planned for 1.7.0
Web
- Listen to browser clipboard events and bind them with Compose TextFieldSelectionManager and SelectionManager
- Introduce ComposeViewport function that renders content in parent container
- Introduce minimal virtual keyboard support
Resources
- Support three letters locales
- Add DSL to configure compose resources
- Support plural string resource
- Add option to disable compose resources generation
- XML resource optimizations
- Get resource files as URI
- Support source set's hierarchy for compose resources
- Support SVG drawables for non android platforms
Gradle Plugin
- Add possibility to modify the macOS minimum version
- Make desktop preview task fully configuration cache compliant
- Option to pack jars as uber JAR, support Proguard for uber JAR
Fixes
Multiple Platforms
- Fix
NaNfont metrics by initializing typeface forTextStyle - Fix render order of interop views
- Reimplement SortedSet for JS/Native to improve performance
- Allow drawing outside of platform layers
- Prevent a few unnecessary re-compositions in
PopupandDesktopMenu - Propagate composition locals to layers in the (re)composition phase
- Move the effects and synthetic events dispatching to after the draw phase in the render loop
iOS
- Fix keyboard disappear on IME action
- Fix nested scroll when
Pagerinvolved in scrolling process - Fix a11y wrong bounds calculation
- Delay tap indication inside scroll
- Fix keyboard opening when scrolling begins within a
TextField - Fix IME window insets and view offset when keyboard appears
- Fix animation frozen after app went background
Desktop
- Fix nested scrolling on mouse wheel
- Trigger fling callbacks on mouse wheel scroll (fixes
Pagerand lazy column/row spanning) - Fix
Pagerdirection detection for mouse wheel - Fix missing clicks inside
SelectionContainer - Fix clipping bounds of
SwingPanel - Locale-aware date formatting for desktop
- Pass the id of the node whose layout changed to accessibility controllers
WINDOWlayer fixes: #1181, #1185, #1187, #1189- Fix crash when we resize
ComposePanelafter re-adding it to the hierarchy - Fix propagation of
LocalLocalization - Re-show the tooltip on mouse-move following a click in TooltipArea
- Fix the direction of scrolling when pressing on the scrollbar track with
reverseLayout=true - Fix crash and allow selection in
SelectionContainerto start when drag starts below the bounds of the visible text - Fix a crash on Windows without
dcomp.dll
Web
- Implement actual
fun isCopyKeyEvent - Fix metadata compilation
- Support
sendKeytest utility function on wasm target - Send correct window sized on resize
- Dispose all listened events alongside with the application being disposed
- Modify
buttonFlagsonly onPressandRelease - Fix keyboard mappings
- Correct density rounding in
ComposeWindow::resize
Resources
- Fix resource accessors compilation when there are huge number of resource files
- Init resource accessors lazily and in external function to avoid
MethodTooLargeException - Fix
Resclass generation if the library is declared as 'api' - Fix resource packaging in APK when 'build' task is used with AGP 8.2+
- Use first of preferred locales instead of a current on iOS
- Fix
readResourceBytesfunction on Android if font is located under qualified directory - Fix android fonts in APKs
- Handle special characters for quantity strings
- Select default resource if there are no exact language+region or default language match
Dependencies
-
Gradle Plugin
org.jetbrains.compose, version1.6.10-beta01. Based on Jetpack Compose libraries: -
Lifecycle libraries
org.jetbrains.androidx.lifecycle:lifecycle-*:2.8.0-alpha01. Based on:- Lifecycle 2.8.0-alpha04
- Lifecycle Runtime Compose 2.8.0-alpha02 (due to Compose
1.6.*compatibility)
-
Navigation libraries
org.jetbrains.androidx.navigation:navigation-*:2.8.0-alpha01. Based on Jetpack Navigation 2.8.0-alpha05
1.6.2 (April 2024)
Changes since 1.6.1
Features
Common
Fixes
iOS, Desktop, Web
- Propagate composition locals to layers in the (re)composition phase
- Add transactions to
FocusOwnerImpltakeFocusandreleaseFocusto prevent crash when a window is re-shown - Fix crash and allow selection in
SelectionContainerto start when drag starts below the bounds of the visible text
iOS
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.6.1 (March 2024)
Changes since 1.6.0
Features
Common
Fixes
iOS, Desktop, Web
- Consume less CPU for text field cursor blinking
- Fix Material3 slider getting stuck while dragging
- Fix
ExposedDropdownMenuBoxrecomposing unnecessarily
iOS
- Fix AppStore/TestFlight verification failure due to skiko/skia conflicting names with ICU library
- Fix
Pagerscroll with scrollable content on top - Fix crash when selecting a character before the punctuation sign
- Fix unintended state reset
- Context menu isn't showing in empty textfield
- Fix a logical error causing Compose tree corruption and consequent crash
- Fix
TextFieldcrash when using speech-to-text
Web
Desktop
- Fix additional windows creation with
COMPONENTlayer type - Keep adding interop order consistent between platforms
Resources
- Support three letters locales
- Init resource accessors lazily and in external function to avoid MethodTooLargeException
- Fix
Resclass generation if the library is declared as 'api' - Fix
regionCodecrash on iOS before 17 - Fix package name of generated
Resfile when project is building forJsTarget
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.6.0 (February 2024)
Changes since 1.5.12
Highlights
An overview of highlights for this release is also available in the Compose Multiplatform documentation: What's new in 1.6.0.
Common
- Resource library improvements (an example project)
- Experimental support is available for tests in common code
- Support Kotlin 2.0.0-Beta4
iOS, Desktop, Web
- Support
LineHeightStyle.Trim - Add a way to use fonts installed on the system
- Add support for text decoration line styles via PlatformTextStyle
iOS
- Native-like caret behaviour by long/single taps in textfields(1, 2)
- Basic accessibility support
Popups/Dialogs can now be displayed outside aViewControllerover native components- Allow selecting
TextinSelectionContainerby double and triple tap
Web
- Compose for Web (Wasm) artifacts are available in Maven Central Warning: Kotlin 1.9.21 has an issue with web target. Use Kotlin 1.9.22.
Desktop
- Proper clipping of
SwingPanelinterop (under an experimental flag, see the link) Popups/Dialogs can now be displayed outside the main window or panel and over native components (under an experimental flag, see the link)
Breaking changes
Common
- Resource library (
compose.components.resources) changes- resources from
*Main\resourcesshould be moved to*Main\composeResources\drawable,commonMain\composeResources\fontor*Main\composeResources\filesdepending on the resource type painterResource("resource.xml")should be replaced bypainterResource(Res.drawable.resource)
- resources from
google()maven repository is now required. Add this tobuild.gradle.kts:
If the project doesn't have it, there will be an errorrepositories { ... google() }Could not find androidx.annotation:annotation:...orCould not find org.jetbrains.compose.collection-internal:collection.- Text with
lineHeightset is trimmed by default - Text with
fontSizeset withoutlineHeightinsideMaterialThemehas different line height
iOS/Desktop/Web
- Deprecate
public ComposeScenein favour of@InternalComposeUiApi MultiLayerComposeScene - Hide deprecated DropdownMenu overloads
iOS
- Separate platform views for
Popups/Dialogs that are enabled by default, unable to draw anything out of their own bounds (for example, a shadow of the topmost container). It will be fixed in a future version, but if you're relying on this behavior, you can switch back to the old behavior by setting theplatformLayersparameter tofalse:ComposeUIViewController(configure = { platformLayers = false }) { // ... }
Desktop
Web (k/js)
- Libraries which depend on earlier Compose Multiplatform version are not compatible with 1.6.0 anymore. This is because decoys generation was disabled. Projects which apply Compose Compiler plugin manually need to remove this argument:
plugin:androidx.compose.compiler.plugins.kotlin:generateDecoys=true.
Features
Common
iOS
- Adjust overscroll effect params to match iOS animations
- Add ability to change opacity for compose view
- Introduce
@Composable fun UIKitViewController - Remove iOS experimental flag in gradle.properties
Desktop
- Support select till the end of the file / till the start of the file keyboard actions on Windows
- Add LinuxArm64 target to Compose runtime
- Add dedicated feature flags class for desktop
Web
HTML library
Gradle Plugin
Fixes
iOS/Desktop/Web
- Fix "DropdownMenu performs onDismissRequest twice"
- Use a large rectangle for the picture bounds in RenderNodeLayer.drawLayer to prevent clipping
- Fix closing scene during scroll animation
- Fix "Using
painterResource(:DrawableResource)outside desktop Window can produceUnsatisfiedLinkError" - Fix "Rect::makeLTRB expected l <= r" crashes
- Fix "
TextLayoutResult#getLineForVerticalPositionreturns wrong value + slow performance" - Run all effects before sending synthetic events
Fontconstructor with lazy data loading- Optimise
TextLayoutResult#getLineForOffset - Fix "SwingPanel/UIKitView doesn't apply Modifier.offset if it's after Modifier.size"
- DatePicker. Fix empty row
- DatePicker. Fix selection of the current day
- Fix
LayoutCoordinates.localToWindowcoordinates conversion for non-full Compose components
iOS
- Fixed unexpected fling animation over scrolling content
- Fix UIKitView z-order
- Fix missing case for loading
SystemFonton iOS - Fix selection container crash
- Fix
WindowInfo.containerSizewithoutplatformLayersflag - Disable encoding on separate thread for iOS
- Synchronise IME insets with iOS keyboard
Desktop
- Protect against
MouseInfo.getPointerInfo()returning null inWindowDraggableArea - Support Rtl in
SplitPane - Fix a native crash on
makeGL - Add Arial and Consolas as backup fonts on Linux and mention font name when one fails to load
- Fix blurry app icon in the system application switcher
- Insert a new line on
NumPadEnter - Don't restart the drag gesture when the
onDrag(matcher=changes - Fix "Resizing window on desktop sometimes triggers onClick handlers of Composables"
- Fix "
ComposePaneldoesn't calculate its preferredSize correctly when it's called before doLayout" - Fix input methods on JBR, disable input methods when we lose focus
- Fix "BasicTextField could not input any Chinese character when using JBR"
- Take into account
enabledinscrollablefor mouse input - Fix NPE for getComponentAfter/Before in ComposePanel
- Transparency support for D3D (previously it supported via fallback on OpenGL)
Web
- Add a
SystemThemeObserverimplementation for wasmJs - Fix keyboard events with meta key on wasm/js targets
- Added WASM to
components.uiToolingPreviewlibrary - Fix "The cursor is invisible in compose web"
- Use an alternative implementation of
Image.toBitmap
Gradle Plugin
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
See the announce of Jetpack Compose 1.6. Notes:
Changes to default font paddingaffects only Android target.Added support for selection by mouse, including text.concerns only Android. Other targets supported it before 1.6.- Some of the features are not ported yet (they will be ported in the next versions):
- BasicTextField2
- Support for nonlinear font scaling
- Multipaltform Drag and drop. It works only for Android right now. For desktop there is the old API
Modifier.onExternalDrag - MultiParagraph.fillBoundingBoxes
See the announce of Material 1.2.
1.6.0-rc03 (February 2024)
Changes since 1.6.0-rc02
- Support Kotlin 2.0.0-Beta4 Common
- (prerelease fix) Resources. Don't return a cached value when pass new args Common
- (prerelease fix) Fix crash "ComposeUIViewController.view should be attached to window iOS
- (prerelease fix) Fix App crashes when Compose SwfitUI View container removed from hierarchy iOS
- (prerelease fix) Fix Keyboard disappears on IME action iOS
- (prerelease fix) Fix
SelectionContaineroccasionally crashes on iOS iOS - (prerelease fix) Fix crash after open/close dropdown on iOS iOS
- (prerelease fix) Fix Password popup disappears only on the second focused TextField iOS
- (prerelease fix) Fix mouse input above SwingPanel Desktop
- (prerelease fix) Fix non working accessibility on Desktop Desktop
- (prerelease fix) Resources. Fix import of Android flavors Android
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.6.0-rc02 (February 2024)
Changes since 1.6.0-rc01
Breaking changes
since 1.6.0-beta01
- When the resource library is used, resources should be imported explicitly
To quickly change your code to a new state, replace this:
import <modulePackage>.generated.resources.Resby this:
import <modulePackage>.generated.resources.*and perform "Code - Optimize Imports" to apply the project code style. If code style doesn't allow wildcrads,
import <modulePackage>.generated.resources.*will be replaced by explicit imports.
iOS/desktop/web
Fixes
- (prerelease fix) Fix "AlertDialog doesn't work with ProvidableCompositionLocal"
Resource library
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.6.0-rc01 (February 2024)
Changes since 1.6.0-beta02
Known issues and solutions
Could not find "org.jetbrains.compose.annotation-internal:annotation"
(or org.jetbrains.compose.collection-internal:collection), link
It happens because some library depends on 1.6.0-beta02 which isn't binary compatible with 1.6.0-rc01.
To find this library, call ./gradlew shared:dependencies (replace shared by your main module). Downgrade this library or ask the library author to upgrade it to 1.6.0-rc01.
Could not find androidx.annotation:annotation:...
(or org.jetbrains.compose.collection-internal:collection)
It happens because 1.6.0 depends on collection and annnotation libraries that are available only in the Google Maven repository.
To solve this, add google() maven repository to build.gradle.kts:
repositories {
...
google()
}
iOS/desktop/web
Fixes
- Fix "DropdownMenu performs onDismissRequest twice"
- Use a large rectangle for the picture bounds in RenderNodeLayer.drawLayer to prevent clipping
- Fix closing scene during scroll animation
- Fix "Using
painterResource(:DrawableResource)outside desktop Window can produceUnsatisfiedLinkError" - Fix "Rect::makeLTRB expected l <= r" crashes
- (prerelease fix) Commonize BasicTooltipBox
- (prerelease fix) Fix sharing composition locals with new platform layers
iOS
Fixes
- Fixed unexpected fling animation over scrolling content
- (prerelease fix) Fix "Wrong scroll behaviour of LazyColumn inside HorizontalPager"
- (prerelease fix) Fix scene size after sending the app to background or changing orientation with open modal
Desktop
Fixes
- Protect against
MouseInfo.getPointerInfo()returning null inWindowDraggableArea - Support Rtl in
SplitPane - Fix a native crash on
makeGL - (prerelease fix) Fix "Skiko RenderException" when creating
ComposePanel
Web
Fixes
- Add a
SystemThemeObserverimplementation for wasmJs - Fix keyboard events with meta key on wasm/js targets
- Added WASM to
components.uiToolingPreviewlibrary - Fix "The cursor is invisible in compose web"
Gradle Plugin
Fixes
- (prerelease fix) Relocate a bundled
KotlinPoetto the internal package
Resource library
Fixes
- (prerelease fix) Add a type name to the resource initializers
- (prerelease fix) Don't make resource IDs lowercased
- (prerelease fix) Clean code-gen directory if there was deleted a dependency on the res library
- (prerelease fix) Register all hierarchical compose resources in android compilation
- (prerelease fix) Fix fonts duplication in android app
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.6.0-beta02 (February 2024)
Changes since 1.6.0-beta01
Highlights
- Basic accessibility support iOS
- Popups/Dialogs can now be displayed outside a ViewController over native components on iOS by default iOS
- Allow selecting
TextinSelectionContainerby double and triple tap iOS - Add support for text decoration line styles via PlatformTextStyle iOS, desktop, web
- Bugfixes in the resource library (see below for the details)
iOS/desktop/web
Fixes
- Fix "
TextLayoutResult#getLineForVerticalPositionreturns wrong value + slow performance" - Run all effects before sending synthetic events
- (prerelease bug) Fix the pointer icon in
SelectionContainer
iOS
Features
- Adjust overscroll effect params to match iOS animations
- Add ability to change opacity for compose view
Fixes
- Fix UIKitView z-order
- Fix missing case for loading
SystemFonton iOS - Fix selection container crash
- Fix
WindowInfo.containerSizewithoutplatformLayersflag - (prerelease fix) Fix "textfield with visual transformation crashes after single tap"
- (prerelease fix) Fix selection handles crossed
- (prerelease fix) Fix CMPViewControllerMisuse error
- (prerelease fix) Fix selection handles with platformLayers=true
- (prerelease fix) Fix interaction handling for interop views
Desktop
Fixes
Breaking changes and deprecated API
HTML library
Features
Gradle Plugin
Features
Resource library
Fixes
- (prerelease fix) Configure Android resources after AGP is applied and ignore hidden files in resources
- (prerelease fix) Generate Res class if there is no common composeResource dir
- (prerelease fix) Support Res class generation in JVM only compose projects
- (prerelease fix) Support Compose resources for iOS tests
- (prerelease fix) Fix sub-module gradle properties for res class generation
- (prerelease fix) Fix Native xml parser
- (prerelease fix) Generate initializer functions in the Res file to avoid the
MethodTooLargeException - (prerelease fix) Improve handling of special characters in string resources
- (prerelease fix) Add a
ttffont to the resources demo app
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.12
Common
Features
Desktop
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.6.0-beta01 (January 2024)
Highlights
- Resource library improvements (an example project)
- Experimental support is available for tests in common code
- Compose for Web (Wasm) artifacts are available in Maven Central. Warning: Kotlin 1.9.21 has an issue with web target. Use Kotlin 1.9.22.
- iOS. Native-like caret behaviour by long/single taps in textfields(1, 2)
- Support
LineHeightStyle.Trim - Desktop. Proper clipping of
SwingPanelinterop (under an experimental flag, see the link) - Popups/Dialogs can now be displayed outside the main window or panel over native components on iOS and desktop (under experimental flags, see the links)
- Add a way to use fonts installed on the system (desktop/web in this version, iOS in the next version, Android isn't supported)
Breaking changes
- Text with
lineHeightset is trimmed by default - Text with
fontSizeset withoutlineHeightinsideMaterialThemehas different line height - Resource library (
compose.components.resources) changes- resources from
*Main\resourcesshould be moved to*Main\composeResources\drawable,commonMain\composeResources\fontor*Main\composeResources\filesdepending on the resource type painterResource("resource.xml")should be replaced bypainterResource(Res.drawable.resource)
- resources from
Known issues
compose.components.resourceslibrary doesn't work yet if you applykotlin("jvm")Gradle plugin. For now, it only works withkotlin("multiplatform")
Common
Features
iOS/desktop/web
Features
Fixes
- Optimise
TextLayoutResult#getLineForOffset - Fix "SwingPanel/UIKitView doesn't apply Modifier.offset if it's after Modifier.size"
- DatePicker. Fix empty row
- DatePicker. Fix selection of the current day
- Fix
LayoutCoordinates.localToWindowcoordinates conversion for non-full Compose components
Breaking changes and deprecated API
- Deprecate
public ComposeScenein favour of@InternalComposeUiApi MultiLayerComposeScene - Hide deprecated DropdownMenu overloads
iOS
Features
Fixes
Desktop
Features
- Support select till the end of the file / till the start of the file keyboard actions on Windows
- Add LinuxArm64 target to Compose runtime
- Add dedicated feature flags class for desktop
Fixes
- Fix blurry app icon in the system application switcher
- Insert a new line on
NumPadEnter - Don't restart the drag gesture when the
onDrag(matcher=changes - Fix "BasicTextField NPE-crash on JBR 17.0.9 on Linux when clicked"
- Fix "Resizing window on desktop sometimes triggers onClick handlers of Composables"
- Fix "
ComposePaneldoesn't calculate its preferredSize correctly when it's called before doLayout" - Fix input methods on JBR, disable input methods when we lose focus
- Fix "BasicTextField could not input any Chinese character when using JBR"
- Take into account
enabledinscrollablefor mouse input - Fix NPE for getComponentAfter/Before in ComposePanel
- Transparency support for D3D (previously it supported via fallback on OpenGL)
Web
Features
Fixes
HTML library
Features
Gradle Plugin
Features
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
- Compiler 1.5.8
- Runtime 1.6.0-rc01
- UI 1.6.0-rc01
- Foundation 1.6.0-rc01
- Material 1.6.0-rc01
- Material3 1.1.2
1.5.11 (November 2023)
Common
Features
iOS
Fixes
- Fix crash at GrGpuResource::release()
- Fix crash with custom font
- Composable functions returning null cause crash (fixed in Kotlin 1.9.21 and JetBrains Compose Compiler 1.5.4)
Desktop
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.10 (October 2023)
This is a combined changelog from the prerelease versions:
Common
Features
- Support Kotlin 1.9.20
- Introduce Material 3 components in common
- Introduce Material component
ExposedDropDownMenuin common - Introduce
WindowInfo.containerSizeexperimental api - Implement
defaultTimePickerLayoutTypebased on screen orientation - Add an option to disable insets in
Popup/Dialog - Commonize insets
Modifier's (additionally toWindowInsets.*)
Fixes
ExposedDropdownMenuBox.onExpandedChangewas not recomposed- Override
RootLayoutinsets only in case ofusePlatformInsets - Don't send synthetic Move events before Press/Release for touch
iOS
Breaking changes
Features
- Compilation speed up due to enabling compiler caches for Kotlin 1.9.20+
- Added crossfade animation during orientation change when used within UIKit hierarchy
- Compose Multiplatform should warn when
CADisableMinimumFrameDurationOnPhoneis not configured properly - Fast delete mode on software keyboard. When you hold a backspace, “turbo mode” is enabled after deleting the first 21 symbols. In turbo mode each tick deletes two words.
- On a long scrollable TextFields, If it’s scrolled up to caret position while typing. Then it stopped on the line above the line with a caret.
- Add
UIViewControllerlifetime hooks - Implement iOS native feel scrolls for large text fields
- Improve rendering performance
- Double tap and triple tap gesture handling in
TextFields
Fixes
- Rendering synchronization of multiple
UIKitViews within a screen - Today's date is not highlighted with a circle in the material3 datePicker on iOS
- Fix text-to-speech crash in iOS 16.0.*
- Compose window is shown before the first frame is rendered
- iOS TextField, Compound emojis are being treated as many symbols
- Use
CADisplayLink.targetTimestampvalue as the time for animation frames - iOS. Improved performance on 120 hz devices
- Expanded
ModalBottomSheet: scrim doesn't occupy complete screen - Fix interop view intercepting touches for popups
- Fix applying
WindowInsetsinsidePopup/Dialog - Scrolling behavior bugs
OutlinedTextFieldlabel is clipped- Black screens with
UIKitViewafter navigating away and navigating back - Long text field overscroll effect not clipped correctly
- First screen is recomposed twice
- Bug with selection handle
- Ignore unpressed events during velocity calculation
- Crash with Asian languages in
TextField
Desktop
Features
- Improve accessibility support
Fixes
LocalLayoutDirectionisn't propagated intoDialogWindow- CompositionLocals given in application scope are not take into account in window scope (such as
LocalLayoutDirection) - Fix accessibility issue with actions in popups
- Apply custom Dialog's scrim blend mode only when window is transparent
- Can't type in
TextFieldplaced inModalBottomSheet - Accessibility not reporting changes
- Crash "LayoutNode should be attached to an owner exception"
- Window loses its focus after recomposition of another window
- Report semantic
ProgressBarRangeInfochanges for accessibility - Fix NPE for getComponentAfter/Before in ComposePanel
- Take into account
enabledinscrollablefor mouse input - Improve accessibility on Windows
- Fix Chinese characters input when using JBR
Gradle Plugin
Features
Fixes
- Increase Kotlinx Serialization version used by the Compose Gradle Plugin
- Switch to notarytool for notarization
- Fix configuration cache for
syncComposeResourcesForIos
HTML library
Features
Web
Features
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.10-rc02 (October 2023)
Common
Features
Desktop
Fixes
- Fix NPE for getComponentAfter/Before in ComposePanel
- Take into account
enabledinscrollablefor mouse input - Improve accessibility on Windows
- Fix Chinese characters input when using JBR
Web
Features
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.10-rc01 (October 2023)
Common
Features
Fixes
- Override
RootLayoutinsets only in case ofusePlatformInsets - Don't send synthetic Move events before Press/Release for touch
iOS
Fixes
- Scrolling behavior bugs
OutlinedTextFieldlabel is clipped- Black screens with
UIKitViewafter navigating away and navigating back - Long text field overscroll effect not clipped correctly
- First screen is recomposed twice
- Bug with selection handle
- Ignore unpressed events during velocity calculation
- Crash with Asian languages in
TextField
Desktop
Fixes
- Accessibility not reporting changes
- Crash "LayoutNode should be attached to an owner exception"
- Window loses its focus after recomposition of another window
- Report semantic
ProgressBarRangeInfochanges for accessibility
Gradle Plugin
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.3 (October 2023)
Desktop
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.10-beta02 (September 2023)
Common
Features
- Support kotlin 1.9.20-Beta2 with basic K2 support
- Implement
defaultTimePickerLayoutTypebased on screen orientation - Add an option to disable insets in
Popup/Dialog - Commonize insets
Modifier's (additionally toWindowInsets.*)
Fixes
iOS
Features
- Improve rendering performance
- Double tap and triple tap gesture handling in
TextFields
Fixes
- Expanded
ModalBottomSheet: scrim doesn't occupy complete screen - Fix interop view intercepting touches for popups
- Fix applying
WindowInsetsinsidePopup/Dialog
Desktop
Features
- Improve accessibility support
Fixes
Gradle Plugin
Features
Fixes
HTML library
Features
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.2 (September 2023)
Desktop
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.10-beta01 (September 2023)
Common
Features
- Support Kotlin 1.9.20-Beta
- Introduce Material 3 components in common
- Introduce Material component
ExposedDropDownMenuin common - Introduce
WindowInfo.containerSizeexperimental api
iOS
Breaking changes
Features
- Compilation speed up due to enabling compiler caches for Kotlin 1.9.20+
- Added crossfade animation during orientation change when used within UIKit hierarchy
- Compose Multiplatform should warn when
CADisableMinimumFrameDurationOnPhoneis not configured properly - Fast delete mode on software keyboard. When you hold a backspace, “turbo mode” is enabled after deleting the first 21 symbols. In turbo mode each tick deletes two words.
- On a long scrollable TextFields, If it’s scrolled up to caret position while typing. Then it stopped on the line above the line with a caret.
- Add
UIViewControllerlifetime hooks - Implement iOS native feel scrolls for large text fields
Fixes
- Rendering synchronization of multiple
UIKitViews within a screen - Today's date is not highlighted with a circle in the material3 datePicker on iOS
- Fix text-to-speech crash in iOS 16.0.*
- Compose window is shown before the first frame is rendered
- iOS TextField, Compound emojis are being treated as many symbols
- Use
CADisplayLink.targetTimestampvalue as the time for animation frames - iOS. Improved performance on 120 hz devices
Desktop
Fixes
LocalLayoutDirectionisn't propagated intoDialogWindow- CompositionLocals given in application scope are not take into account in window scope (such as
LocalLayoutDirection) - Fix accessibility issue with actions in popups
- Apply custom Dialog's scrim blend mode only when window is transparent
Gradle Plugin
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.1 (September 2023)
Common
Features
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.0 (August 2023)
This is a combined changelog from the prerelease versions:
Common
Features
DialogAPI is available to use from common source setPopupAPI is available to use from common source setWindowInsetsAPI is available to use from common source set- A warning if
compose.kotlinCompilerPluginis set toandroidx.compose.compiler.compiler androidx.compose.material.DropdownMenuis available to use from common source setandroidx.compose.material3.DropdownMenuis available to use from common source setandroidx.compose.material.AlertDialogis available to use from common source setandroidx.compose.material3.AlertDialogis available to use from common source set- Add
PopupProperties.clippingEnabledsetting - material3. Support
DatePicker,DatePickerDialogandTimePicker
Fixes
Popup. Fix overridingpressOwneron multitouch- Fix sending multiple touches in tests
- Fix multi-owner input processing
- Fix paragraph word boundary unicode handling
- Optimize the
Canvastransformation functions - Fix click outside of common
Dialogbehaviour
API Changes
iOS
Features
- iOS native scroll and feel
- Simplify resource management (works without CocoaPods now)
TextFieldkeyboardOptions, capitalizationTextField, keyboard behavior when have fullscreen size TextFieldTextField, different behavior strategies on appearing the keyboard- Insets on iOS
- Support
Density.textSize(Dynamic Type) - Change default fonts (San Francisco is the default font)
- UIKit public
LocalUIViewController - Support singleLine and
KeyboardAction
Fixes
- Fix dynamic framework support
- Fix
TextFieldcontext menu - Fix complex blending on iOS
ViewConfiguration.touchSlopvalue is quite low on iOS- Fix
topLeftOffsetcalculation on iOS in Split View Modifier.draggableonDragStoppednot calledUIKitView. Fix lifetime discrepancy within the composition- Support 120hz screens
- Fix incorrect Skiko render target on iOS Metal
- Properly detect content based text direction on native
- Implemented all low-level functions to avoid random crashes
- Fix memory leak in
ComposeUIViewController - Manage Kotlin native cache kind automatically based on Kotlin version (
kotlin.native.cacheKind=noneis no longer needed) - Limit max
DialogandPopupsize by safe area on iOS TextField, Korean characters are not normally enteredColorMatrixvalue range for 5th column was incorrect on Skiko backed platformsisSystemDarkThemenow automatically react to the system theme changes
API Changes
- Resource management was reimplemented. Follow the guide in the PR to support new feautures
CADisableMinimumFrameDurationOnPhoneadded to the template'sInfo.plistto support 120HzComposeUIViewController. Dispose composition onviewDidDisappear
Desktop
Features
- Swing interop. Experimental off-screen rendering on graphics (hardware accelerated only on macOs at the moment)
- Swing interop.
ComposePanelthat can be disposed manually - Add semantic properties to
DialogWindow,PopupandDialog - Use
Segoe UIas sans serif font on Windows - Add ProGuard optimize flag
Fixes
- Fix loosing frames on macOs
- Scrolling
LazyColumnvia mouse wheel stops working Slidercan be moved using keyboard, but cannot be submitted- Make one pixel beyond the scrollbar thumb react correctly to clicks
VerticalScrollbardoesn't work properly whenLazyColumnexistsStickyHeader- All
Popupoverloads call dismiss onEsckey by default - Fix Could not infer Java runtime version for Java home directory
- Usage of deprecated
forEachGestureinScrollbar.desktop.kt - Test framework fixes
- Implement idling resources for tests
- Implement
SemanticsNodeInteraction.captureToImage() - Wait until compose is idle before returning from
DesktopTestOwner.getRoots() - When the test main clock is advanced, call
ComposeScene.renderwith the current test time - Add timestamps to batched test input events, and advance the test clock accordingly when sending them
- Tests support semanatic nodes inside
WindowandDialogWindow
API Changes
Web
Features
- Let
ComposeWindowaccept a custom canvas id (html canvas element id) - Support
Scrollbar - Make
CanvasBasedWindowapply default styles, set title
Fixes
- Workaround
ComposeWindowmultiple event listeners on resize - Fix
Modifier.pointerHoverIconfor browser apps - Fux
RoundedCornerShapewith zero corners - Fix
ScrollConfigin web target - Implemented low-level functions to avoid random crashes:
HTML library
Features
Gradle Plugin
Features
API Changes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.0-beta02 (August 2023)
Common
Features
androidx.compose.material.DropdownMenuis available to use from common source setandroidx.compose.material3.DropdownMenuis available to use from common source setandroidx.compose.material.AlertDialogis available to use from common source setandroidx.compose.material3.AlertDialogis available to use from common source set- Add
PopupProperties.clippingEnabledsetting - material3. Support
DatePicker,DatePickerDialogandTimePicker
API Changes
iOS
Features
Fixes
- Fix memory leak in
ComposeUIViewController - Manage Kotlin native cache kind automatically based on Kotlin version (
kotlin.native.cacheKind=noneis no longer needed) - Limit max
DialogandPopupsize by safe area on iOS TextField, Korean characters are not normally enteredColorMatrixvalue range for 5th column was incorrect on Skiko backed platformsisSystemDarkThemenow automatically react to the system theme changes
API Changes
Web
Features
Gradle Plugin
Features
API Changes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.5.0-beta01 (July 2023)
Common
Features
DialogAPI is available to use from common source setPopupAPI is available to use from common source setWindowInsetsAPI is available to use from common source set- A warning if
compose.kotlinCompilerPluginis set toandroidx.compose.compiler.compiler
Fixes
Popup. Fix overridingpressOwneron multitouch- Fix sending multiple touches in tests
- Fix multi-owner input processing
- Fix paragraph word boundary unicode handling
- Optimize the
Canvastransformation functions - Fix click outside of common
Dialogbehaviour
iOS
Features
- iOS native scroll and feel
- Simplify resource management (works without CocoaPods now)
TextFieldkeyboardOptions, capitalizationTextField, keyboard behavior when have fullscreen size TextFieldTextField, different behavior strategies on appearing the keyboard- Insets on iOS
- Support
Density.textSize(Dynamic Type) - Change default fonts (San Francisco is the default font)
- UIKit public
LocalUIViewController
Fixes
- Fix dynamic framework support
- Fix
TextFieldcontext menu - Fix complex blending on iOS
ViewConfiguration.touchSlopvalue is quite low on iOS- Fix
topLeftOffsetcalculation on iOS in Split View Modifier.draggableonDragStoppednot calledUIKitView. Fix lifetime discrepancy within the composition- Support 120hz screens
- Fix incorrect Skiko render target on iOS Metal
- Properly detect content based text direction on native
- Implemented all low-level functions to avoid random crashes
API Changes
- Resource management was reimplemented. Follow the guide in the PR to support new features
CADisableMinimumFrameDurationOnPhoneadded to the template'sInfo.plistto support 120Hz
Desktop
Features
- Swing interop. Experimental off-screen rendering on graphics (hardware accelerated only on macOs at the moment)
- Swing interop.
ComposePanelthat can be disposed manually - Add semantic properties to
DialogWindow,PopupandDialog - Use
Segoe UIas sans serif font on Windows - Add ProGuard optimize flag
Fixes
- Fix loosing frames on macOs
- Scrolling
LazyColumnvia mouse wheel stops working Slidercan be moved using keyboard, but cannot be submitted- Make one pixel beyond the scrollbar thumb react correctly to clicks
VerticalScrollbardoesn't work properly whenLazyColumnexistsStickyHeader- All
Popupoverloads call dismiss onEsckey by default - Fix Could not infer Java runtime version for Java home directory
- Usage of deprecated
forEachGestureinScrollbar.desktop.kt - Test framework fixes
- Implement idling resources for tests
- Implement
SemanticsNodeInteraction.captureToImage() - Wait until compose is idle before returning from
DesktopTestOwner.getRoots() - When the test main clock is advanced, call
ComposeScene.renderwith the current test time - Add timestamps to batched test input events, and advance the test clock accordingly when sending them
- Tests support semanatic nodes inside
WindowandDialogWindow
API Changes
Web
Features
Fixes
- Workaround
ComposeWindowmultiple event listeners on resize - Fix
Modifier.pointerHoverIconfor browser apps - Fux
RoundedCornerShapewith zero corners - Fix
ScrollConfigin web target - Implemented low-level functions to avoid random crashes:
HTML library
Features
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
- Compiler 1.5.0
- Runtime 1.5.0-beta03
- UI 1.5.0-beta03
- Foundation 1.5.0-beta03
- Material 1.5.0-beta03
- Material3 1.1.1
1.4.3 (July 2023)
Common
Features
- Support Kotlin 1.8.21, 1.8.22, 1.9.0
iOS
Fixes
- Using Indication as a parameter in extension function doesn't compile on iOS
- Compile error when using delegated property with @Composable getters in objects
- Using a public property extensions inside a class or object with a @Composable backing delegate fails to link for iOS targets
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.4.1 (June 2023)
Common
Fixes
- Fix perspective transform usage
- After each ComposeScene.render phase, send apply notifications and perform the corresponding changes
- Fix awaitDragStartOnSlop to detect slop-passing on both axes
Desktop
Fixes
- Fix
DesktopDropdownMenuPositionProviderto align with the correct horizontal side of the window - Propagate LocalLayoutDirection into PopupLayout
- Fix missing scrolling events
- Make popups accessible on desktop
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.4.0 (April 2023)
Common
Features
- Support perspective projection and
cameraDistanceparameter ingraphicsLayer - Support
brushparameter inTextStylefor complex coloring - Support
drawStyleparameter inTextStylefor drawing outlined text - Support
blendModeparameter when drawing text on Canvas - Support compositing strategy on
graphicsLayer - Add
minLinesparameter toBasicTextField - Support
painterResourcefunction in common source set
Fixes
- Actually remember provider in
rememberComponentRectPositionProvider - Fix merging multiple selection areas inside
SelectionContainer - Fix crash on selecting text if layout result is invalid
- Fix error on call an
expect/actualfunction with default arguments and a Composable argument
iOS
Desktop
Features
- Support external drag and drop
- Animate scroll initiated by mouse wheel input
- Remove AWT dependency in
rememberCursorPositionProvider - Major scrollbar overhaul
- Scrollbar now works correctly in lazy lists when items vary in size
- Scrollbar now works correctly with lazy list
contentPadding - Scrollbar now works correctly in lazy list with spacing between items
- Scrollbar now works correctly if the size of the scrollbar doesn't match the size of the widget it scrolls
- Pressing the scrollbar track now works correctly
- Added scrollbar support for lazy grids and text fields
Fixes
- Fix using a custom shape for an
AlertDialog - Fix
AlertDialogwidth to match the maximum of its content - Change
ContextMenuAreato emit a single element, rather than two elements - Use state hoisting instead of global mouse position to determine where context menus, dropdown menus and tooltips should be displayed
- Limit error dialog width in case of long error message
- Fix window flashing background with unspecified size
- Fix crash
SplitPanewith a modifier - Fix applying
ComposePanelvisibility
Web
Compose for Webis renamed toCompose HTML Library- The new experimental
Compose for Webbased on Kotlin/Wasm is available
Tools
Features
Fixes
API Changes
- Remove deprecated
SkiaRootForTest.processPointerInput - Remove deprecated
PointerEvent.awtEvent,KeyEvent.awtEvent - Make accidentally exposed to public
ParagraphLayouterclassinternalas designed androidx.compose.foundation.v2.ScrollbarAdapteris introduced in order to allow scrollbars of a size different from the scrolled widget
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.3.1 (March 2023)
Common
- Added support for Kotlin 1.8.10
Fixes
Desktop
Fixes
- Korean text input
- Size UndecoratedWindowResizer to the size of the window
- Fix sizing a window with unspecified size to its content's size
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.3.0 (January 2023)
Common
Fixes
- Fix configuration cache issues
- Use global directory to download wix toolset
- IDEA plugin - Redo: set until-build to undefined value
Desktop
Features
Fixes
- Fix San Francisco font as a default (macOS)
- Make ScrollbarAdapter for LazyList take contentPadding into account
- Fix AlertDialog dismiss on click to Dialog content
- Fix shaky scrolling of LazyColumn when the items are of varying size
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.2.2 (December 2022)
Desktop
Features
Fixes
- Fix Performance degradation after some time if there are animations on the screen
- Fix SwingPanel throws NPE on focus request if nothing focusable
- Fix jvmTarget value specified using jvmToolchain is ignored and overwritten with "1.8"
- Fix Trying to delete a word via Ctrl+Backspace in an empty TextField causes an exception
Web
Fixes
- Fix Compose Web 1.2.1 regression: unexpected recompositions
- Fix Wrong instance remembered when several remember calls in one scope
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.2.1 (November 2022)
Common
Fixes
- Fix
kotlinCompilerPluginproperty - Fix runDistributable fails in v1.2.0-beta01
- Fix Packaging fails on JDK-19
Desktop
Fixes
- Fix
duplicate definition of resource filewhen running packageRelease - Fix support of GPU's which don't support DirectX 12 (Windows)
Web
Fixes
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.2.0 (October 2022)
Common
Features
- Allow to use Compose on multiple Kotlin versions
import org.jetbrains.compose.composeis no longer needed in build.gradle.kts- Allow to use a custom Compose Compiler
Desktop
Features
- Support Kotlin 1.7.20
- ProGuard integration for packaging
- New experimental event API (onClick, onDrag, WindowInfo.keyboardModifiers)
- Focus
- Ability to override text context menu globally
- Context menu implementation for integrating into Swing applications
- Animated image component
- Show a new window/dialog on the same display
- Change default Font on MacOs to San Francisco
- Support performKeyInput, performMouseInput, performTextInput in tests.
- Focus switches seamlessly between Swing and Compose components using SwingPanel or ComposePanel
- Documentation for how to package apps using Conveyor
Fixes
- Fix IDEA plugin compatibility
- Fixes for Right-to-Left languages support
- LayoutDirection is detected from the system settings
- Fix RTL selection in a multiline text
- Fix cursor visual position at BiDi transition
- Fix the cursor position after the '\n' character in RTL
- In placeAutoMirrored for RTL, calculate the placement position using the placeable width respecting the constraints
- Placing the root content properly for RTL layout
- TextField
- Fix DesktopMenu and DesktopAlertDialog to invoke dismiss callback once
- Fix a large icon in macOs menu
- Fix hover in LazyColumn
- Fix pointerHoverIcon: update icon when it's changed conditionally
- Fix focusable parameter for Window and Dialog
- Fix 2 SplitPanel minor bugs
- Fix
java.lang.IllegalStateException: cannot open system clipboardcrash - Fix
System.setProperty("skiko.renderApi", "SOFTWARE"on macOS
API changes
- Deprecate experimental pointerMoveFilter in favor of onPointerEvent
- Deprecate experimental Modifier.mouseClickable in favor of Modifier.onClick
Web
Features
- Support Kotlin 1.7.10
- Add support for transition in CSS api
- Add missing
background-blend-modeproperty - SVG: Publish custom attr functions
- Add list overload for
classes - Add support of dl, dt and dd
Fixes
API changes
- Deprecate 3 overloads of StyleScope.borderWidth with wrong parameter names
- Remove deprecated compose.web.web-widgets from the source code
- Remove unnecessary parameter for
requiredattribute
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.1.1 (Mar 2022)
Desktop
Fixes
API changes
If you use Dispatchers.Swing or Dispatchers.Main in your code, add this dependency into build.gradle.kts:
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:$coroutinesVersion")
}
Also, usage of Dispatchers.Swing or Dispatchers.Main inside internals of Compose is implementation details, and can be changed in the future. If you need to avoid race conditions with Compose UI, you can obtain appropriate coroutine scope via rememberCoroutineScope:
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.window.application
@OptIn(ExperimentalComposeUiApi::class, androidx.compose.foundation.ExperimentalFoundationApi::class)
fun main() = application {
val scope = rememberCoroutineScope()
val someApplicationObject = remember(scope) { SomeApplicationObject(scope) }
DisposableEffect(Unit) {
SomeGlobalObject.init(scope)
onDispose { }
}
}
1.1.0 (Feb 2022)
Desktop
Features
- Implement experimental accessibility support for Windows
- Implement accessibility focus tracking by Tab
- All bugfixes/features between Jetpack Compose 1.1.0-beta02 and 1.1.0 (see the release notes for each module here)
Fixes
- Fixes for TextField (1, 2, 3, 4)
- Fix exception when we initialize a window with visible = false, undecorated = true
- Fix crash in ImageComposeScene
- Fixes for situations, when hover state doesn't disappear during scrolling
- Fixes for Slider/Scrollbar dragging (1, 2)
- Fixed a case where [event.modifiersEx] does not provide info about the pressed mouse button (AWT)
- Fix TextField crashes after selecting the text and then deactivating the text field
- Fix consuming events by mouse clickable
- Hide top-level dialog from the taskbar
API changes
- The first frame of the window draws offscreen now. If your application has too long start, measure your first frame, and move the heavy logic to background or to the next frames. You can measure the first frame with this snippet:
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.singleWindowApplication
private var time by mutableStateOf(System.nanoTime())
private var frame by mutableStateOf(0)
fun main() = singleWindowApplication {
if (frame == 0) {
frame++
} else if (frame == 1) {
val duration = ((System.nanoTime() - time) / 1E6).toLong()
println("First frame millis: $duration")
}
}
PointerEvent.awtEvent,KeyEvent.awtEventare deprecated, usePointerEvent.awtEventOrNull,KeyEvent.awtEventOrNullinstead. The event can be null, if it isn't sent by AWT (for example, Compose can send synthetic Move events on relayout)
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
1.0.1 (Dec 2021)
This is basically 1.0.0 that works with Kotlin 1.6.10
1.0.0 (Dec 2021)
Desktop
Features
- Experimental support for material3
- All clickable components are focusable and react to Enter key
- All clickable/draggable components no longer react to right clicks by default
- Show the default error dialog when an error occurs
- ContextMenu, AlertDialog, DropdownMenu close on Esc key by default
- Application by default calls exitProcess after its Composable is disposed
API changes
- Introduced experimental onPointerEvent (will replace mouseScrollFilter/pointerMoveFilter in the future)
- Introduced PointerEventType.Scroll, which can be used in common code
- MouseEvent.mouseEvent and KeyEvent.nativeKeyEvent are replaced by MouseEvent.awtEvent and KeyEvent.awtEvent
- Experimental overload for loading resources painterResource(String, ResourceLoader)
Web
API changes
- compose.web.widgets is deprecated
- All CSSSelectors can't be instantiated via constructor now (they're private). Please use functions provided in SelectorsScope instead
- Some functions were made internal (either not related to compose-web or not intended for usage in apps): buildCSS , StylePropertyList.nativeEquals , variableValue , buildCSSStyleRule , buildKeyframes , jsObject , CSSKeyframesRule.appendRule
- CSSMediaRule: functions feature and combine were made extensions functions on GenericStyleSheetBuilder. This makes them consistent with the rest of functions which create CSSMediaQuery.MediaFeature instances
Dependencies
This version of Compose Multiplatform is based on the next Jetpack Compose libraries:
- Compiler 1.1.0-beta02
- Runtime 1.1.0-beta02
- UI 1.1.0-beta02
- Foundation 1.1.0-beta02
- Material 1.1.0-beta02
- Material3 1.0.0-alpha03
1.0.0-beta (Oct 2021)
Common
- no Android artifacts are published anymore. Google-published artifacts are referenced instead. This approach eliminates compatibility issues.
Desktop
Features
- Accessibility support on MacOS
- Smart rendering fallback logic (no crashes on bad hardware/drivers anymore)
- Performance improvement of software rendering (up to 100%)
- Transparent window support
clickableandtoggleablecomponents have a hoverable indication
API changes
- DesktopMaterialTheme is deprecated, use MaterialTheme instead
- WindowSize is deprecated, use DpSize instead
- Modifier.pointerMoveFilter marked as Experimental, stable alternatives are Modifier.hoverable or Modifier.pointerInput
- Modifier.mouseScrollFilter marked as Experimental, this API will likely change in the future
API breaking changes
- Old Window API (AppWindow, AppManager) was removed
- Modifier.pointerIcon is replaced with Modifier.pointerHoverIcon
- Tray can be used only inside ApplicationScope now
- Tray(hint=) replaced with Tray(tooltip=)
Web
Features
- SVG support
API changes
- Controlled Inputs were added
- New API for testing - test-utils was added
1.0.0-alpha (Aug 2021)
Common
- Desktop, Web, and Android artifacts publish at the same time with the same version
Desktop
Features
- Context menu support in selectable text
- Cursor change behavior in text and pointer icon API
- Mouse Clickable modifier
- Tab navigation between text fields by default
- Resource packing to native distribution
- Support @Preview annotation in desktopMain sourceSet's (when the Compose MPP plugin is installed in IDEA)
- New features for Composable menu (icons, shortcuts, mnemonics, radiob buttons, checkboxes
- Adaptive window size
- Support Linux on ARM64
- Support hidpi on some Linux distros
- Support resizing of undecorated resizable windows (
Window(undecorated=true, resizable=true, ...))
API changes
- new Window API is no longer experimental
- old Window API is deprecated
- classes from
android.compose.desktop.*moved toandroidx.compose.ui.awt.*(ComposeWindow, ComposePanel, etc) svgResource/vectorXmlResource/imageResourcereplaced by painterResource
API breaking changes
- Window level keyboard API for the old Window API removed
- Window(icon: BufferedImage) replaced by Window(icon: Painter)
- ContextMenu renamed to CursorDropdownMenu
Web
API changes
- classes behave cumulatively
- removed content builder for empty elements
- Introduce CSS arithmetic operations
- Improved the types of Inputs and input events
- CSS Animations
- All event types expose native properties
- Added a complete list of HTML color aliases
- Introduce support for CSS Grid API
- Deprecate Color.RGB, Color.HSL etc. functions in favor of top-level rgb, hsl an so on
- negate CSSNumeric value directly
API breaking changes
- boolean like attributes don't have any parameters anymore
- removed input type specific event listeners
- replaced maxWidth/minWidth media queries with prefixed names
- Remove CSSVariables context and introduce specialized methods for adding String- and Number-valued CSS variables
- inline style builder was moved into AttributeBuilder scope
M4 (Jun 2021)
- New experimental Composable Window API
- Tooltips
- Use Metal renderer for macOS by default
- Expose a swing mouse event in Modifier.pointerInput
- Improved keyboard support in TextField
- Avoid forcing discrete GPU on multi-GPU MacOS machines in Skiko and native distributions
- Make DropdownMenu focusable by default
- Scrollbar. get rid of itemCount and averageItemSize from rememberScrollbarAdapte
- Support scrollbars for LazyColumn with reverseLayout = true
- Fix memory leak
- Fix Scroll NaN rounding bug, desktop version
- Fix Dragging prevents pointer move events
- Fix Dragging window to another display makes Icon show up incorrectly
- Fix "Padding must be non-negative" after resizing window with Slider and Box
- Breaking change old Dialog/Menubar/Tray are moved to androidx.compose.ui.window.v1
M3 (Feb 2021)
- Improve TextField
- Support SVG
- Support vsync, sync composition with rendering frames
- Support DirectX on Windows by default
- Support software rendering fallback
- Implement signing and notarization for macOS
- Improve Swing interoperability support Swing component in Compose hierarchy
- Support using Compose in IntelliJ plugins
- Skiko native binaries are now signed on macOS (x64 and arm)
- Fix Ambients are not transferred across pop ups
- Fix Laggy UI on Linux
- Fix Using AndroidX Compose specific dependencies for Android target
M2 (Dec 2020)
- Swing interoperability support (Compose in Swing frame)
- Support XML vector images
- Support for Gradle 6.6 and 6.7
- Support macOS 10.13 and 10.14
- Support Apple Silicon (arm64) natively
- Support letter spacing in text
- Implemented desktop "ActualDialog" and "ActualPopup"
- Fix input method bar positioning
- Fix text alignment
- Fix dropdown/popup positioning
- Fix using with Compose in same app as Java FX
- Added screenshots of example apps
M1 (Nov 2020)
- Initial release