1.9.0
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