Skip to content

Releases: JetBrains/compose-multiplatform

1.9.1

14 Oct 14:27
7f87247
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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

1.8.2

17 Jun 17:41
a149d0f
Compare
Choose a tag to compare

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 to true (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