Skip to content

Releases: JetBrains/compose-multiplatform

1.10.0-alpha03

22 Oct 11:56
651ff78

Choose a tag to compare

1.10.0-alpha03 Pre-release
Pre-release

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.Preview annotation in favor of androidx.compose.ui.tooling.preview.Preview to reduce variety of Preview annotations #5453

iOS

  • Remove experimental annotation from LocalUIView #2478

Desktop

  • Deprecate androidx.compose.desktop.ui.tooling.preview.Preview annotation in favor of androidx.compose.ui.tooling.preview.Preview to reduce variety of Preview annotations #2474

Features

Lifecycle

  • Publish multiplatform lifecycle-viewmodel-navigation3 library #2476

Fixes

Multiple Platforms

  • (prerelease fix) Provide LocalWindowInfo.current.containerDpSize value #2493

iOS

  • Fix crash when parallelRendering is enabled #2448
  • Fix text context menu interaction on Popups and Dialogs #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 UIScene notifications #2472
  • Support updating of the WindowInfo.isWindowFocused property 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 Canvas element 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 getString and 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

1.9.1

14 Oct 14:27
7f87247

Choose a tag to compare

Changes since 1.9.0

Migration Notes

Multiple Platforms

  • compose.material3 alias from Gradle plugin now points to org.jetbrains.compose.material3:material3:1.9.0 (based on Jetpack Compose Material3 1.4.0), it was org.jetbrains.compose.material3:material3:1.8.2 (based on Jetpack Compose Material3 1.3.2) in Compose Multiplatform 1.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 PlatformImeOptionsImpl not being @Immutable #2413
  • Fix crash when removing characters after string replacement #2361
  • Fix context menu appearance for text fields with transformation #2377

Desktop

  • ComposePanel can 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

1.10.0-alpha02

08 Oct 08:15
68f2a95

Choose a tag to compare

1.10.0-alpha02 Pre-release
Pre-release

Changes since 1.10.0-alpha01

Highlights

Multiple Platforms

  • androidx.compose.ui.tooling.preview.Preview annotation is now available from commonMain source set #2424

Navigation

  • Provide required NavigationEventDispatcherOwner for a correct Navigation3 support #2382

Features

Multiple Platforms

  • Provide LocalLifecycleOwner inside runComposeUiTest by default #2400

iOS

  • Add API to configure UITextInputTraits.writingToolsBehavior with PlatformImeOptions #2435

Desktop

  • Experimental -Dskiko.gpu.resourceCacheLimit VM property is introduced to limit GPU resource cache used for one window (default is 256M) #2422

Resources

  • Add setResourceReaderAndroidContext to 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 TextField focus when another view becomes first responder #2337
  • Fix context menu appearance for text fields with transformation #2377
  • Fix input session restarts triggered by PlatformImeOptionsImpl not being @Immutable #2413
  • Add ability to reach internal accessibility elements inside accessibility nodes #2416

Desktop

  • Fixed ComposePanel not 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.SwingGraphics on Linux" #2422

Resources

  • Fix resource access in a Robolectric test environment #5433

Dependencies

1.9.0

16 Sep 12:52
451e6fa

Choose a tag to compare

Changes since 1.8.2

See also What's new.

Highlights

Web

  • Added a WebElementView Composable function for embedding the absolutely positioned HTML content in Compose for web target. It's supported only when using ComposeViewport entry point and it's not supported with CanvasBasedWindow, 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.material3 now points to the latest stable Material3 version, 1.8.2. If the latest Material3 features are needed, please include it this way: #5360
    implementation("org.jetbrains.compose.material3:material3:1.9.0-beta06")
    
  • [If you use org.jetbrains.compose.material3:material3:1.9.0-beta06] kotlinx-datetime is updated to 0.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

  • Window and DialogWindow overloads that create a ComposeWindow/ComposeDialog have been renamed to SwingWindow/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 return Offset.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
  • Kotlin 2.1 is required for all platforms including JVM (it was required only for native and web before) #2276

Web

  • fun ComposeViewport with viewportContainerId: String? parameter now can be called from a web-common fun main (k/js and k/wasm) #2226
  • CanvasBasedWindow is deprecated, use ComposeViewport instead. Unlike CanvasBasedWindow, which expect as an input param the id to the HTMLCanvasElement that will be used for rendering, ComposeViewport one passes parentContainer (and corresponding HTML Canvas element will be created automatically). By default such container is document.body #2280
  • Setting org.jetbrains.compose.experimental.jscanvas.enabled=true is 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.compiler is not supported anymore and the API to configure it was removed #5283

Features

Multiple Platforms

  • Adopted a change in ComposeUiTest API. The block in runComposeUiTest is suspend now. It allows to call awaitIdle and other suspend functions. It ensures a correct execution of a test on all platforms. See the web specifics in kotlinx.coroutines.test.runTest documentation #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 for androidx Preview annotations #5339

iOS

  • Add support for native IME configuration with PlatformImeOptions #2108
  • Add support for keepScreenOn modifier #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 SwingFrame and SwingDialog composables that allow configuring the window/dialog before it is shown #2139
  • Full AnnotatedString is available as a data flavor in ClipEntry, instead of only its text #2092
  • Add RenderSettings.SwingGraphics option for ComposePanel.renderSettings argument #2071
  • Basic support for new context menu API #2196
  • Added experimental support for save and restore compose state. ComposePanel, ComposeWindow and ComposeDialog now has savedState constructor parameter to restore previous state and saveState 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
  • 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

Resources

  • Added JvmResourceReader API and made LocalResourceReader 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 function suspend fun Window.bindToNavigation is 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
  • ExperimentalMaterial3ExpressiveApi annotation 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 un...
Read more

1.9.0-rc02

11 Sep 15:47
451e6fa

Choose a tag to compare

1.9.0-rc02 Pre-release
Pre-release

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 composeCompatibilityBrowserDistribution task lazy configuration #5398

Dependencies

1.10.0-alpha01

03 Sep 14:16
cf71d4c

Choose a tag to compare

1.10.0-alpha01 Pre-release
Pre-release

Highlights

Multiple Platforms

Breaking Changes

iOS

  • Align @Composable attribute in WindowInsets.Companion.captionBar to other platforms #2258

Migration Notes

Multiple Platforms

  • The pre‑1.7 workaround in the common PopupProperties/DialogProperties constructors (annotated Deprecated(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

  • Removed IntelliJ plugin sample, please refer to Jewel documentation instead #5368

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 with PlatformImeOptions #2350
  • Add API to configure UIResponder.inputAccessoryView with PlatformImeOptions #2350

Desktop

  • Added modalityType parameter to DialogWindow() #2300
  • The Compose entry points on the desktop (ComposeWindow, ComposePanel and ImageComposeScene) now expose val semanticsOwners: Collection<SemanticsOwner> #2358

Fixes

Multiple Platforms

  • Fix application of baselineShift parameter in text layout #2304
  • Fix setting lineHeight to 0 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 Popups and Dialogs #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 of null #2283
  • Request initial focus for focusable popups when used from ComposePanel in some cases #2289
  • In experimental compose.layers.type modes, fix Popup/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

1.9.0-rc01

28 Aug 13:18
a8774d3

Choose a tag to compare

1.9.0-rc01 Pre-release
Pre-release

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 and obfuscate.set(true) are used #5384

Lifecycle

  • Fix dependency to Compose in lifecycle-viewmodel-compose module: 2.9.2 incorrectly refer Compose Multiplatform 1.9.0-beta03. Now it reverted back to 1.8.2 #2318

SavedState

  • Fix dependency to Compose in savedstate-compose module: 1.3.2 incorrectly refer Compose Multiplatform 1.9.0-beta03. Now it reverted back to 1.8.2 #2321

Dependencies

1.9.0-beta03

14 Aug 20:44
766ac55

Choose a tag to compare

1.9.0-beta03 Pre-release
Pre-release

Changes since 1.9.0-beta01

Breaking Changes

Multiple Platforms

  • (prerelease fix) All public APIs tagged with ExperimentalMaterial3ExpressiveApi or ExperimentalMaterial3ComponentOverrideApi have been removed, see Google Jetpack changelog. Please use the previous Material3 alpha version explicitly to continue enjoying these features: #2278

    implementation("org.jetbrains.compose.material3:material3:1.9.0-alpha04")
    

Migration Notes

Multiple Platforms

  • kotlinx-datetime is updated to 0.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, use ComposeViewport instead. Unlike CanvasBasedWindow, which expect as an input param the id to the HTMLCanvasElement that will be used for rendering, ComposeViewport one passes parentContainer (and corresponding HTML Canvas element will be created automatically). By default such container is document.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 of ComposePanel, 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

1.9.0-beta01

22 Jul 17:05
cbb9ec9

Choose a tag to compare

1.9.0-beta01 Pre-release
Pre-release

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: #5360

    implementation("org.jetbrains.compose.material3:material3:1.9.0-alpha04")
    

iOS

  • Remove experimental attribute from UIKitInteropInteractionMode #2215

Web

  • fun ComposeViewport with viewportContainerId: String? parameter now can be called from a web-common fun 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 for androidx 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 and ComposeDialog now has savedState constructor parameter to restore previous state and saveState 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 made LocalResourceReader 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 function suspend 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 Compose 1.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 the visibilitychange 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

1.9.0-alpha03

04 Jul 14:10
761368d

Choose a tag to compare

1.9.0-alpha03 Pre-release
Pre-release

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 using ComposeViewport entry point and it's not supported with CanvasBasedWindow, which is deprecated now #2145

Migration Notes

Desktop

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 and SwingDialog composables that allow configuring the window/dialog before it is shown #2139
  • Full AnnotatedString is available as a data flavor in ClipEntry, instead of only its text #2092
  • Add RenderSettings.SwingGraphics option for ComposePanel.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 and blendMode from GraphicsLayerScope to GraphicsLayer #2184

Desktop

  • [Accessibility, macOS] Fixed VoiceOver to announce a Slider's value on every change #2152
  • Return Offset.Unspecified instead of throwing an exception in LayoutCoordinates.localToScreen and LayoutCoordinates.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 using material-adaptive or material3-adaptive-navigation-suite #2179
  • SemanticsProperties.Text and SemanticsProperties.ContentDescription values will now be correctly concatenated when Modifier.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