Releases: JetBrains/compose-multiplatform
1.10.0-alpha01
Highlights
Multiple Platforms
widgets-gallery
sample has been removed in favor of the interactive API reference #5365
Breaking Changes
iOS
- Align
@Composable
attribute inWindowInsets.Companion.captionBar
to other platforms #2258
Migration Notes
Multiple Platforms
- The pre‑1.7 workaround in the common
PopupProperties
/DialogProperties
constructors (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.isNewContextMenuEnabled
flag in case of issues #2341 - Provide public API for
@ResourceContentHash
annotation 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.inputView
withPlatformImeOptions
#2350 - Add API to configure
UIResponder.inputAccessoryView
withPlatformImeOptions
#2350
Desktop
- Added
modalityType
parameter toDialogWindow()
#2300 - The Compose entry points on the desktop (
ComposeWindow
,ComposePanel
andImageComposeScene
) now exposeval semanticsOwners: Collection<SemanticsOwner>
#2358
Fixes
Multiple Platforms
- Fix application of
baselineShift
parameter in text layout #2304 - Fix setting
lineHeight
to0
in text layout #2304
iOS
- Fix incorrect behavior of
WindowInsets.displayCutout
in different interface orientations #2301 - Fix incorrect behavior of
WindowInsets.displayCutout
on iPad #2301 - Fix the ability to use UIKitViewController inside
Popup
s andDialog
s #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=WINDOW
stealing focus #2285 - Change
ComposePanel.getPreferredSize
to return 0x0 instead ofnull
#2283 - Request initial focus for focusable popups when used from
ComposePanel
in some cases #2289 - In experimental
compose.layers.type
modes, fixPopup
/Dialog
container size calculation that prevents mouse interactions on base compose scene #2304 - Fixed the sizing of unfocusable layers when
compose.layers.type=COMPONENT
is used #2305 SwingPanel
no 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
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
runRelease
task when navigation andobfuscate.set(true)
are used #5384
Lifecycle
- Fix dependency to Compose in
lifecycle-viewmodel-compose
module:2.9.2
incorrectly refer Compose Multiplatform1.9.0-beta03
. Now it reverted back to1.8.2
#2318
SavedState
- Fix dependency to Compose in
savedstate-compose
module:1.3.2
incorrectly 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
Changes since 1.9.0-beta01
Breaking Changes
Multiple Platforms
-
(prerelease fix) All public APIs tagged with
ExperimentalMaterial3ExpressiveApi
orExperimentalMaterial3ComponentOverrideApi
have 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-datetime
is 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
CanvasBasedWindow
is deprecated, useComposeViewport
instead. UnlikeCanvasBasedWindow
, which expect as an input param the id to theHTMLCanvasElement
that will be used for rendering,ComposeViewport
one 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
composeCompatibilityBrowserDistribution
task. 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
ExperimentalMaterial3ExpressiveApi
annotation 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
SwingPanel
children ofComposePanel
, when the compose panel is itself removed from the hierarchy #2277 - (prerelease fix) Fix
DialogWindow
causing 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
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.material3
now 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 ComposeViewport
withviewportContainerId: 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 forandroidx
Preview 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
,ComposeWindow
andComposeDialog
now hassavedState
constructor parameter to restore previous state andsaveState
function 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
JvmResourceReader
API and madeLocalResourceReader
public 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.bindToNavigation
is deprecated now #2189
Fixes
Multiple Platforms
- Fix extra draw invalidations during scrolling (1.8 regression) #2212
- (prerelease fix) Fix trigger of
Modifier.onFirstVisible
modifier (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
/STOP
events on thevisibilitychange
callback now #2219 - Lifecycle fix on iOS Safari: now touch events trigger
ON_RESUME
because 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
Changes since 1.9.0-alpha02
Highlights
Web
- Added a
WebElementView
Composable function for embedding the absolutely positioned HTML content in Compose for web target. It's supported only when usingComposeViewport
entry point and it's not supported withCanvasBasedWindow
, which is deprecated now #2145
Migration Notes
Desktop
Window
andDialogWindow
overloads that create aComposeWindow
/ComposeDialog
have been renamed toSwingWindow
/SwingDialog
and 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.mouseClickable
is 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=true
is not required anymore when having a kotlin/js target #5340
Features
Multiple Platforms
- Support customizable shadows #2183
iOS
- Add support for
keepScreenOn
modifier #2180
Desktop
- Added
SwingFrame
andSwingDialog
composables that allow configuring the window/dialog before it is shown #2139 - Full
AnnotatedString
is available as a data flavor inClipEntry
, instead of only its text #2092 - Add
RenderSettings.SwingGraphics
option forComposePanel.renderSettings
argument #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
colorFilter
andblendMode
fromGraphicsLayerScope
toGraphicsLayer
#2184
Desktop
- [Accessibility, macOS] Fixed VoiceOver to announce a Slider's value on every change #2152
- Return
Offset.Unspecified
instead of throwing an exception inLayoutCoordinates.localToScreen
andLayoutCoordinates.screenToLocal
#2160 - When the window moves or becomes iconified/de-iconified, all instances of
Modifier.onGloballyPositioned
will 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-alpha07
when usingmaterial-adaptive
ormaterial3-adaptive-navigation-suite
#2179 SemanticsProperties.Text
andSemanticsProperties.ContentDescription
values 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
targetFormats
on 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
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.isRectTrackingEnabled
set 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
NavHost
is 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
Changes since 1.8.1
Known issues
Desktop
Could not find org.jetbrains.androidx.window:window-core-desktop:1.4.0-alpha07
when usingmaterial-adaptive
ormaterial3-adaptive-navigation-suite
. YouTrack issue. Workaround is to exclude one dependency and include another:
// if you have material3AdaptiveNavigationSuite dependency
implementation(compose.material3AdaptiveNavigationSuite) {
exclude(group = "org.jetbrains.androidx.window")
}
// if you have org.jetbrains.compose.material3.adaptive dependency
implementation("org.jetbrains.compose.material3.adaptive:adaptive:1.2.0-alpha02") {
exclude(group = "org.jetbrains.androidx.window")
}
implementation("androidx.window:window-core-jvm:1.4.0")
Highlights
Multiple Platforms
material3
library 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.compiler
is not supported anymore and the API to configure it was removed #5283
Features
Multiple Platforms
- Adopted a change in
ComposeUiTest
API. Theblock
inrunComposeUiTest
issuspend
now. It allows to callawaitIdle
and other suspend functions. It ensures a correct execution of a test on all platforms. See the web specifics inkotlinx.coroutines.test.runTest
documentation #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.isRectTrackingEnabled
set 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
ComposePanel
withSystem.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
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
Res
class 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.ModalBottomSheet
closes after any tap #2086 - Fix context menu appearance after triple-tap #2087
- Fix a memory leak in
ComposeUIViewController
when text input starts #2088 - Use the cross-fade animation effect when rotating the screen with interop views #2101
- Show an error message when
UIKitViewController
insidePopup
orDialog
#2102 - Fix an issue where the keyboard would appear after the second tap when the text input session was intercepted #2103
Desktop
- [Linux] Fix
svgPainter
doesn't show any images #2096 - Fix deadlock between
BroadcastFrameClock.lock
andRecomposer.stateLock
#2098 - Fix "Serializer for class is not found" using
androidx.navigation
and running./gradlew runRelease
#5314 kotlinx.serialization
ProGuard 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
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
BackHandler
andPredictiveBackHandler
. 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.Settings
support to the resources library #5183
Breaking Changes
Tests
runOnIdle
will now executeaction
on the UI thread #1601runOnIdle
will no longer callwaitForIdle
after executing the action #1601- Advancing
mainClock
such 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
- Tests that relied on
waitForIdle
,awaitIdle
orrunOnIdle
(whether explicit or implicit) executingdelay
-ed coroutines will no longer work correctly. To fix this advance the test time viamainClock
manually, as needed #1550 - 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 #1550 - Multiplatform lifecycle was migrated from a internal
core-bundle
module to the androidx SavedState. Libraries that useorg.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate
ororg.jetbrains.androidx.savedstate:savedstate
should migrate to the latest version #1850 - A custom implementation for deprecated
LocalTextInputService
is no longer supported #1974
iOS
- Update
AccessibilitySyncOptions
and removeAccessibilityDebugLogger
from public API #1604 - Remove obsolete Canvas Layers mode on iOS #1680
- Add Composable annotation to the
WindowInsets.Companion.waterfall
getter to match the expected API #1919
Desktop
- Deprecated/experimental
Modifier.onExternalDrag
has been removed - commonModifier.dragAndDropTarget
API 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-core
so 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
LocalUIViewController
moved to theandroidx.compose.ui.uikit
module #1608ComposeUIViewControllerDelegate
marked as deprecated. Use the parent view controller to override the methods of theUIViewController
class #1651- Experimental classes
CupertinoScrollDecayAnimationSpec
andCupertinoOverscrollEffect
are removed from public API #1806
Gradle Plugin
- The Compose Gradle Plugin requires Kotlin Gradle Plugin 2.+ version now. Old
org.jetbrains.compose.compiler
is 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
Clipboard
interface with suspend functions, which work correctly on all targets including Web. TheClipboardManager
was deprecated because it was not possible to correctly implement it for Web #1796
iOS
- Add localised string for VoiceOver accessibility support #1441
- Support state announcements for scrollable lists in VoiceOver #1644
- Support for accessibility gestures for left-to-right languages #1663
- (Experimental)
ComposeUIViewControllerConfiguration.useSeparateRenderThreadWhenPossible
flag 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
AccessibilitySyncOptions
removed. 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
UIAccessibilityContainerTypeSemanticGroup
for traversal groups #1809 - Compose works correctly with nested
UIScrollView
s, as well as withinUIScrollView
s #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.navigation
transition 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](https://github.com/JetBrains/compose-multiplatform-c...
1.8.0-rc01
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
NewWebTextInputService
seeks 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
LocalTextInputService
is no longer supported #1974
Migration Notes
Multiple Platforms
- material/material3 libraries no longer add a dependency to
material-icons-core
so 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.compiler
is not supported anymore and the API to configure it was removed #5293
Lifecycle
- (prerelease fix) Remove deprecated
AbstractSavedStateViewModelFactory
from 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 class
for 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 class
workaround should also work in this case
- (prerelease fix)
./gradlew runRelease
doesn'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-class
are reverted to the 1.3.1 state. They will be promoted to 1.4 in Compose Multiplatform 1.9 with material3 #1995 - Fix
InterceptPlatformTextInput
for 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