Compose Multiplatform, a modern UI framework for Kotlin that makes building performant and beautiful user interfaces easy and enjoyable.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

395 KiB

1.10.0-rc02 (December 2025)

Changes since 1.10.0-rc01

Fixes

Multiple Platforms

  • Fix possible corruption of the layout nodes tree #2611

iOS

  • Fix crash in accessibility when SemanticNode is not attached #2616

Components

Gradle plugin

org.jetbrains.compose version 1.10.0-rc02

Libraries

Library group Coordinates Based on Jetpack
Runtime org.jetbrains.compose.runtime:runtime*:1.10.0-rc02 Runtime 1.10.0
UI org.jetbrains.compose.ui:ui*:1.10.0-rc02 UI 1.10.0
Foundation org.jetbrains.compose.foundation:foundation*:1.10.0-rc02 Foundation 1.10.0
Material org.jetbrains.compose.material:material*:1.10.0-rc02 Material 1.10.0
Material3 org.jetbrains.compose.material3:material3*:1.10.0-alpha05 Material3 1.5.0-alpha08
Material3 Adaptive org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha02 Material3 Adaptive 1.3.0-alpha03
Lifecycle org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha06 Lifecycle 2.10.0
Navigation org.jetbrains.androidx.navigation:navigation-*:2.9.1 Navigation 2.9.4
Navigation3 org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha06 Navigation3 1.0.0
Navigation Event org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-rc02 Navigation Event 1.0.1
Savedstate org.jetbrains.androidx.savedstate:savedstate*:1.4.0 Savedstate 1.4.0
WindowManager Core org.jetbrains.androidx.window:window-core:1.5.1 WindowManager 1.5.1

1.10.0-rc01 (December 2025)

Changes since 1.10.0-beta02

Migration Notes

iOS

Fixes

Multiple Platforms

  • Fix crash when selecting text that only contains inline content #2600

iOS

  • Fix NSRangeException on back gesture #2605
  • Fix focusing of Dialog and Popup when the Full Keyboard Mode is enabled #2606

Desktop

  • [macOs] Fix [MTLTextureDescriptorInternal validateWithDevice:] crash when using zero-size ComposePanel with compose.swing.render.on.graphics=true #2585
  • [Linux] Support distributions with glibc 2.27 #2585
  • Fixed a race condition that occurred when multiple processes attempted to unpack Skiko binary files at startup #2585

Resources

  • (prerelease fix) Fixed compatibility with Kotlin 2.2.20 on Web #5484

Lifecycle

  • (prerelease fix) Fixed lifecycle-viewmodel-compose 2.10 compatibility with Compose 1.9.* #2579

SavedState

  • (prerelease fix) Fix SavedStateHandles initialization on web #2576

Components

Gradle plugin

org.jetbrains.compose version 1.10.0-rc01

Libraries

Library group Coordinates Based on Jetpack
Runtime org.jetbrains.compose.runtime:runtime*:1.10.0-rc01 Runtime 1.10.0-rc01
UI org.jetbrains.compose.ui:ui*:1.10.0-rc01 UI 1.10.0-rc01
Foundation org.jetbrains.compose.foundation:foundation*:1.10.0-rc01 Foundation 1.10.0-rc01
Material org.jetbrains.compose.material:material*:1.10.0-rc01 Material 1.10.0-rc01
Material3 org.jetbrains.compose.material3:material3*:1.10.0-alpha05 Material3 1.5.0-alpha08
Material3 Adaptive org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha02 Material3 Adaptive 1.3.0-alpha03
Lifecycle org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha06 Lifecycle 2.10.0
Navigation org.jetbrains.androidx.navigation:navigation-*:2.9.1 Navigation 2.9.4
Navigation3 org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha06 Navigation3 1.0.0
Navigation Event org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-rc01 Navigation Event 1.0.0
Savedstate org.jetbrains.androidx.savedstate:savedstate*:1.4.0 Savedstate 1.4.0
WindowManager Core org.jetbrains.androidx.window:window-core:1.5.1 WindowManager 1.5.1

1.10.0-beta02 (November 2025)

Changes since 1.10.0-beta01

Fixes

Multiple Platforms

  • Fixed LocalInputModeManager.current.inputMode not being reset between tests #2548

iOS

  • Fix the spoken text in merged accessibility nodes #2539
  • Fix an issue where accessibility elements inside other accessibility elements may not be accessible #2539
  • Fix crash on iOS older than 17 when accessibility is enabled #2541

Desktop

  • Fix the accessibility issue where screen readers cannot review text in a text field #2553
  • Fix the accessibility issue where scrollable text fields are not accessible for screen readers #2553
  • Children of nodes with isTraversalNode semantics are now ordered according to their traversalIndex #2544
  • (prerelease fix) Fixed issue where it's unable to create run task 'jvmDesktopRun' #5477
  • (prerelease fix) Fixed issue where the Java installation could not be found #5477

Web

  • Fix the issue where Hangul input behaves inconsistently after deleting with Backspace #2559

Resources

  • Fix resource gradle tasks invocation on AGP < 9.0.0 for Android Studio previews #5478
  • Update iOS resource copying to an iOS app bundle to support Swift Export libraries #5480

SavedState

  • All platforms have HasDefaultViewModelProviderFactory implementation now, and it provides an ability to use createSavedStateHandle() function without a navigation library #2554

Components

Gradle plugin

org.jetbrains.compose version 1.10.0-beta02

Libraries

Library group Coordinates Based on Jetpack
Runtime org.jetbrains.compose.runtime:runtime*:1.10.0-beta02 Runtime 1.10.0-beta02
UI org.jetbrains.compose.ui:ui*:1.10.0-beta02 UI 1.10.0-beta02
Foundation org.jetbrains.compose.foundation:foundation*:1.10.0-beta02 Foundation 1.10.0-beta02
Material org.jetbrains.compose.material:material*:1.10.0-beta02 Material 1.10.0-beta02
Material3 org.jetbrains.compose.material3:material3*:1.10.0-alpha05 Material3 1.5.0-alpha08
Material3 Adaptive org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha02 Material3 Adaptive 1.3.0-alpha03
Lifecycle org.jetbrains.androidx.lifecycle:lifecycle-*:2.10.0-alpha05 Lifecycle 2.10.0-rc01
Navigation org.jetbrains.androidx.navigation:navigation-*:2.9.1 Navigation 2.9.4
Navigation3 org.jetbrains.androidx.navigation3:navigation3-*:1.0.0-alpha05 Navigation3 1.0.0-rc01
Navigation Event org.jetbrains.androidx.navigationevent:navigationevent-compose:1.0.0-beta02 Navigation Event 1.0.0-rc01
Savedstate org.jetbrains.androidx.savedstate:savedstate*:1.4.0-rc01 Savedstate 1.4.0
WindowManager Core org.jetbrains.androidx.window:window-core:1.5.0 WindowManager 1.5.0

1.9.3 (November 2025)

Changes since 1.9.2

Fixes

iOS

  • Fix crash on iOS older than 17 when accessibility is enabled #2541

Gradle Plugin

  • Support AGP 9.0.0 #5391

Dependencies


1.10.0-beta01 (November 2025)

Changes since 1.10.0-alpha03

Highlights

Desktop

  • Compose Hot Reload Gradle plugin is bundled with Compose Gradle plugin (no need to configure it separately) #5444

Known Issues

Multiple Platforms

  • Due to the bundled Hot Reload Gradle plugin, Compose Multiplatform requires Kotlin version 2.1.20 or higher #5444

Migration Notes

Multiple Platforms

  • Remove experimental annotation from usePlatformInsets, useSoftwareKeyboardInset and scrimColor in DialogProperties #2495
  • Remove experimental annotation from usePlatformDefaultWidth, usePlatformInsets in PopupProperties #2495
  • Deprecation level of Popup overloads without PopupProperties parameter changed from WARNING to ERROR #2495
  • Dependency aliases in Gradle plugin (e.g. compose.ui) are now deprecated. Use provided direct artifact coordinates and add them to the version catalog #5462

Features

iOS

  • Add support for self-sizing of UIKit interop views in Compose #2485
  • Add experimental UIKitInteropProperties.placedAsOverlay flag, which allows to place interop views above the Compose canvas. This allows interop views with a transparent background or shader effect to be used #2501

Web

  • Esc button calls back navigation event on the web now #2499
  • Add support of important keyword for CSS properties #5439

Navigation

  • Published org.jetbrains.compose.material3.adaptive:adaptive-navigation3 library #2516
  • Add a new configuration option in ComposeUIViewController to set end-edge gestures behavior #2519

Fixes

Multiple Platforms

  • Align roundToPx() behavior between platforms: NaN value produces 0 instead of IllegalArgumentException on non-JVM platforms now #2526
  • Added previously missing ExperimentalComposeUiApi annotation to platform-specific DragAndDropTransferData, DragAndDropEvent and ClipEntry constructors on Desktop and Web. Working with these APIs already requires this annotation due to types of parameters, so it wasn't supposed to be marked as "stable" yet. You can follow CMP-7624 to track the updates about finalizing the shape of these APIs #2538

iOS

  • Fix onKeyEvent handling when Full Keyboard Access is enabled #2494
  • Fix incorrect tap responses in Dialog when LocalDensity is modified #2527
  • (prerelease fix) Fix crash when interacting with scrollables with overscroll #2532

Desktop

  • Fix SwingPanel blocking mouse wheel scroll events from going to its parent #2486

Web

  • Correct drag-and-drop behaviour on mobile devices #2510
  • Fix incorrect interpretation of ontouchend events #2490
  • Unblock autocomplete and the other keyboard features on mobile iOS #2529
  • Correct behaviour when a virtual keyboard suggestion was accepted while the cursor was in the middle of the word #2530

Resources

  • Use Web Cache API for all resources to avoid repeated and redundant HTTP requests #5379

Dependencies


1.9.2 (October 2025)

Changes since 1.9.1

Fixes

Multiple Platforms

  • Prevent possible symbol duplicates in savedstate-compose due to redirects to Google's runtime-saveable that supports all KMP platforms #2503

Web

  • Removed an outline on a Canvas element when it's focused #2450
  • Fix focus with Tab behaviour in Text Fields #2452

Dependencies


1.10.0-alpha03 (October 2025)

Changes since 1.10.0-alpha02

Migration Notes

Multiple Platforms

  • (prerelease fix) Disabled (by default) the new text context menus until they are fully supported. You can enable them by setting ComposeFoundationFlags.isNewContextMenuEnabled = true #2466
  • Deprecate org.jetbrains.compose.ui.tooling.preview.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 (October 2025)

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 (October 2025)

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 (September 2025)

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 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 with System.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.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
  • SemanticsProperties.Text and SemanticsProperties.ContentDescription values will now be correctly concatenated when Modifier.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 SwingPanel children of ComposePanel, when the compose panel is itself removed from the hierarchy #2277
  • Fix runRelease task when navigation and obfuscate.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/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
  • 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.AppImage is specified in targetFormats on macOS #5332
  • 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-rc02 (September 2025)

Changes since 1.9.0-rc01

Fixes

Multiple Platforms

  • (prerelease fix) Fix "Cinterop fails with an error when Compilation works fine" #2386
  • (prerelease fix) Fix "warning: KLIB resolver: Could not find" #2386

Web

  • Fix the issue where deleting a word in the middle of a sentence also affects the word next to it #2372

Gradle Plugin

  • (prerelease fix) Fix composeCompatibilityBrowserDistribution task lazy configuration #5398

Dependencies


1.10.0-alpha01 (September 2025)

Changes since 1.9.0-rc01

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 (August 2025)

Changes since 1.9.0-beta03

Fixes

Multiple Platforms

  • (prerelease fix) Fix incorrect light source position for dynamic shadows in some cases #2328

Desktop

  • (prerelease fix) Fixed focus indication being shown in touch input mode #2342
  • Fix 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 (August 2025)

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 (July 2025)

Changes since 1.9.0-alpha03

Highlights

Web

  • Text context menu is supported on web platforms for both modes: mobile and desktop #2207
  • Introduce the basic support of accessibility in the web target #2188

Migration Notes

Multiple Platforms

  • Material3 versioning is decoupled for the Compose Multiplatform 1.9.* release due the upstream Jetpack Compose Material3 1.4 has not been released as stable yet #5360

  • compose.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 (July 2025)

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 (June 2025)

Changes since 1.8.1

Fixes

Multiple Platforms

  • Fixed TextField(TextFieldValue) when used with a visual transformation with a non-identity offset mapping (potentially even crashing) #2130

  • Fixed a memory leak and performance degradation when ComposeUiFlags.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


1.9.0-alpha02 (June 2025)

Changes since 1.8.1

Highlights

Multiple Platforms

  • material3 library now includes new experimental MaterialExpressiveTheme #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. 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

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 to true (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 with System.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


1.8.1 (May 2025)

Changes since 1.8.0

Features

Resources

  • Now a Compose library with resources may be built and used as XCFramework (it requires Kotlin Gradle plugin 2.2 or higher) #5294
  • Gradle Plugin DSL to change the generated 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 inside Popup or Dialog #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 and Recomposer.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


1.8.0 (May 2025)

Changes since 1.7.3

Highlights

Multiple Platforms

  • Compose Multiplatform codebase is fully migrated to K2. Please note that native and web klibs can be consumed only with Kotlin 2.1.0 or newer. Also, due to underlying changes in the compiler plugin, it's better to recompile libraries against the new version. Please let us know if you find any compatibility issues during this migration #1778
  • Implement multiplatform BackHandler and PredictiveBackHandler. 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 execute action on the UI thread aligning the behavior with Android #1601
  • runOnIdle will no longer call waitForIdle after executing the action aligning the behavior with Android #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

  • Multiplatform lifecycle was migrated from a internal core-bundle module to the androidx SavedState. Libraries that use org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate or org.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 remove AccessibilityDebugLogger 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 - common Modifier.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 to repositories {...} 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 your build.gradle[.kts] files: #2030
    implementation("org.jetbrains.compose.material:material-icons-core:1.7.3")
    

iOS

  • LocalUIViewController moved to the androidx.compose.ui.uikit module #1608
  • ComposeUIViewControllerDelegate marked as deprecated. Use the parent view controller to override the methods of the UIViewController class #1651
  • Experimental classes CupertinoScrollDecayAnimationSpec and CupertinoOverscrollEffect 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. The ClipboardManager was deprecated because it was not possible to correctly implement it for Web #1796

iOS

  • Support state announcements for scrollable lists in VoiceOver #1644
  • Support for accessibility gestures for left-to-right languages #1663
  • (Experimental) ComposeUIViewControllerConfiguration.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 UIScrollViews, as well as within UIScrollViews #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
  • Add ability to recreate Composable after ComposeUIViewController leaves view controller hierarchy #1877
  • Support trackpad pointer input #1893
  • Save Composable state when view controller leaves view controller hierarchy #1904
  • Support text input when Full Keyboard Access is enabled #1917
  • Added native behavior for tap, long tap and multiple tap to BasicTextField(TextFieldState) #1923
  • Magnifier support for BasicTextField(TextFieldState) #1926

Desktop

  • Improved performance on Windows by replacing the native code compiler to Clang (in 1.8.0 comparing to 1.7.3) #1863
    • Software rendering (used on some VMs) FPS is 6.397x higher on average
    • Reducing the size of a packaged application. Example https://kmp.jetbrains.com:
      • the installer size is changed from 44.9 Mb to 44.1 Mb
      • the installed size is changed from 107 Mb to 103 Mb
  • The default ProGuard version is set to 7.7.0 #5279
    • If there are any new errors in the release build, update the ProGuard rules
    • A usual workaround is to add -keep 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

Web

  • Adds experimental PointerIcon.fromKeyword function to change the browser cursor #1704

Resources

  • Add new API to preload and cache font and image resources on web targets: preloadFont, preloadImageBitmap, preloadImageVector #5159

Gradle Plugin

  • Support compose resources in androidLibrary target #5157

Navigation

  • Basic support a navigation by deep links #1610
  • Commonize navController.navigate(Uri) method #1617
  • Implemented non-android navController.handleDeepLink(NavDeepLinkRequest) method #1617
  • New API to configure browser navigation buttons and the address line #1621
  • Navigation via a browser address field #1640

Fixes

Tests

  • Clear the canvas before rendering each frame in tests, to avoid drawing different frames on top of each other, resulting in incorrect images being returned by captureToImage #1820

Multiple Platforms

  • Fix changing FontRenderingSettings is not reflected until composition restarts #1595
  • The overhead for running an empty test has been significantly reduced #1615
  • Fix missing implementation on non-Android platforms for ModalDrawerSheet overload with DrawerState argument #1763
  • Fix light position for during shadow rendering to match the Material specification and Android behaviour #1754
  • Fix light source position for shadow rendering to match the Material specification and Android behavior #1784
  • Fix inconsistency between Android and Desktop in placeWithLayer scale application: offset is not scaled now (Android behavior) #1784
  • Fixed the output of TextField(TextFieldState) (aka BasicTextField2) transformations incorrectly leeching into the untransformed text itself, when input method is used (Chinese and other languages with multi-keystroke character input) #1833
  • Fix possible IllegalArgumentException: Object already closed during GraphicsLayer.record #1839
  • Compose runtime module now exposes its dependency on Kotlin Coroutines API (changed from implementation() to api()) #1883
  • Correctly set ScrollState.viewportSize for (Basic)TextField(TextFieldState) #1896
  • Changes pressing backspace in a textfield to delete diacritic marks, if any, rather than the entire character #1869
  • Fixed IllegalArgumentException: maxWidth(value) must be >= than minWidth(0) crashes when a TextField with trailingIcon is too narrow #1936
  • Fixed crash when dragging selection in TextField(TextFieldState) while also editing the text, such as by pressing Backspace #1969
  • Fix InterceptPlatformTextInput for the legacy TextField #1974

iOS

  • Deprecate defaultUIKitMain() #1585
  • Fixed visibility of androidx.compose.material3.internal.formatWithSkeleton that was accidently marked as public #1609
  • Fix a bug where the accessibility tree did not reload when VoiceOver was enabled #1656
  • Fix Display Cutout Padding when rotating the device #1645
  • Fixes an interruption while typing characters on a Chinese keyboard #1692
  • Accessibility reading of content when obscured by layers such as pop-ups and dialogs #1698
  • Enables Cupertino Overscroll by default for scrollable components #1753
  • Experimental method optOutOfCupertinoOverscroll() removed #1753
  • Fix iOS Accessibility element tree construction within merged nodes #1750
  • Performance issues when iOS screen reader is active fixed #1780
  • Fixed issues where the interactive pop gesture would stop working #1818
  • Fixes an issue where it's not possible to close the UIMenu that appears over the Compose content #1818
  • Fix touches tracking for multitouch gestures #1827
  • Fixed a bug where touches could be handled by back gesture and composable content at the same time #1879
  • Removed permissions alert when pasting text into a TextField #1894
  • Fix crash when removing popup during scene size change animation #1878
  • Fix accessibility elements rects when ComposeUIViewController is shifted #1899
  • Fixed an issue where it wasn't possible to open a popup using pointer input devices #1906
  • Fix popup safe drawing padding when usePlatformInsets = true #1920
  • Fix an issue where Compose would retain the old state when its view was reappeared #1921
  • Fix Text Menu opening after Select All action tap #1930
  • Fix freeze where scrolling was cancelled but the overscroll effect was not completed #1928
  • Fix overscroll animation freeze when pull-to-refresh is triggered #1932
  • Fix issue where root compose canvas does not resize without animation #1934
  • Fix issue where dialog layer may not be shown #1934
  • Remove focus on accessibility nodes with clearing semantics #1933
  • Fix adding extra MetalView when Compose controller re-enters view hierarchy #1938
  • Fix the first layer appearance freeze #1948
  • Fixed text editing behavior (typing / deleting) in BasicTextField(TextFieldState) with applied OutputTransformation #1953
  • Fixed incorrect undo behavior for text deletion in BasicTextField(TextFieldState) #1956
  • Fix composite input in BasicTextField(TextFieldState) #1984
  • Fixes an issue where the accessibility engine could leave a scrollable list without reading it to the end #1986
  • Fix Accessibility navigation through traversal groups in Container mode #1987
  • Fix focus for items within dialogs when full keyboard access is enabled #1990
  • Fix gesture handling for third party interop views #1993
  • Fix the keyboard reappearing after it was dismissed via LocalSoftwareKeyboardController in BasicTextField(TextFieldState) #1974
  • Fix overscroll touches assertion when back handler is involved #2017
  • Fixed incorrect selection and navigation by arrow keys from a hardware keyboard in BasicTextField(TextFieldState) #2018
  • Fix back gesture after modal popup appearance #2019
  • Fixed the behavior of a context menu in the text fields inside modal screens #2028

Desktop

  • Fix for excessive garbage generation from redrawing on Swing #1657
  • Fix drag-and-drop when the list of supported actions doesn't include Move #1683
  • Fix accessibility focus when using compose.swing.render.on.graphics=true #1688
  • Fix "Context menu on desktop shows incorrect items after the second showing" #1693
  • Fixed rare crash when using a scrollbar for lazy grid with animated enter/exit items #1707
  • Fix possible exception during Dialog/Popup creation in case of compose.layers.type=COMPONENT and pointing windowContainer to ComposePanel itself #1747
  • Fix interop initial z-order placement on Windows with compose.interop.blending flag (1.7.0 regression) #1774
  • Fixed the background of transparent windows/dialogs on Windows becoming opaque as the window is moved #1772
  • Elements marked with Modifier.semantics { hideFromAccessibility() } should now be correctly hidden from a11y #1798
  • Fixed the positioning of the IME candidate popup for TextField(TextFieldState) (aka BasicTextField2) #1794
  • Fixed input of diacritics via long-press on macOS in TextField(TextFieldState) (aka BasicTextField2) #1810
  • Radio buttons and any other elements using Modifier.selectable with Role.RadioButton will have their state reported to accessibility via AccessibleValue.getCurrentAccessibleValue() and as AccessibleState.CHECKED in getAccessibleStateSet() #1797
  • [Windows] Fixed ordering of SwingPanels when using compose.interop.blending=true #1901
  • [macOS] Fix, for some cases, the background flashing when closing a window/dialog. This can still happen if an animation is running when the window or dialog is closing #1911
  • Fix onRenderApiChanged in ComposeWindow and ComposeDialog not working when the renderer changes due to fallback, rather than explicit change #1911
  • [Swing Interop] Fixed compose.interop.blending=true completely breaking Swing interop on Windows when Direct3D is unsupported. Note that interop blending is still supported on Windows only if Direct3D is available #1913
  • Fixed only the first character being temporarily shown in a SecureTextField #1853
  • Changes in TextFieldState are now correctly reported to the transformations when inputting composite characters (e.g. ㅀ), instead of the whole text being replaced on each new character #1853
  • Fixed a potential deadlock when calling Snapshot.sendApplyNotifications from a thread other than the event dispatching thread #1955
  • Fix missing window shadows on macOS in case of usage compose.interop.blending flag #1908
  • Fix Execution failed for task ':composeApp:proguardReleaseJars' when material3 is included in the project #5261

Web

  • The BasicTextField handles browser copy/cut/paste events correctly now. Previously, they were ignored #1795
  • Mobile browsers: the virtual keyboard is shown when the TextField is clicked/receives focus #1865
  • Fix text selection with mouse in TextField #1876
  • Fix horizontal scroll when using touchpad and pressing Shift #1909
  • Prevent app from crashing when running in an insecure context where Web Clipboard API is unavailable #1931
  • Replace tab characters with spaces in Text and TextFields, to avoid them being drawn as tofu #1943
  • Fix touch events processing. Now Modifier.detectTransformGestures will allow to handle zoom and rotation gestures #1942

Resources

  • Read android:autoMirrored="true" property and pass it to ImageVector builder #5140
  • Fix string resource's regex for placeholders to correctly match multi-digit placeholders #5187

Navigation

  • Fixed No destination with ID 0 is on the NavController's back stack crash on iOS #1596
  • Fix incorrect navigation up on the root screen for non-android targets #1736
  • Fixed browser navigation integration when route paths contain special symbols #1738

Dependencies


1.8.0-rc01 (April 2025)

Changes since 1.8.0-beta02

Highlights

Web

  • Improves text input support in Safari on mobile and desktop #1941
  • Correct certain text input scenarios on Web targets #1941 New WebTextInputService seeks to achieve the following goals:
  1. Add support to Safari (which happens to have its own flow of input events that are inconsistent with other browsers)
  2. Correct behavior for composition and accent dialogue scenarios
  3. 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 your build.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 with java.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


1.8.0-beta02 (April 2025)

Changes since 1.8.0-beta01

Features

iOS

  • Support text input when Full Keyboard Access is enabled #1917
  • Added native behavior for tap, long tap and multiple tap to BasicTextField(TextFieldState) #1923
  • Magnifier support for BasicTextField(TextFieldState) #1926

Fixes

Multiple Platforms

  • Fixed IllegalArgumentException: maxWidth(value) must be >= than minWidth(0) crashes when a TextField with trailingIcon is too narrow #1936
  • Fixed crash when dragging selection in TextField(TextFieldState) while also editing the text, such as by pressing Backspace #1969

iOS

  • Fix Text Menu opening after Select All action tap #1930
  • Fix freeze where scrolling was cancelled but the overscroll effect was not completed #1928
  • Fix overscroll animation freeze when pull-to-refresh is triggered #1932
  • Fix issue where root compose canvas does not resize without animation #1934
  • Fix issue where dialog layer may not be shown #1934
  • Remove focus on accessibility nodes with clearing semantics #1933
  • Fix adding extra MetalView when Compose controller re-enters view hierarchy #1938
  • (prerelease fix) Fix deletion of certain RTL or diacritics characters #1952
  • Fix the first layer appearance freeze #1948
  • Fixed text editing behavior (typing / deleting) in BasicTextField(TextFieldState) with applied OutputTransformation #1953
  • Fixed incorrect undo behavior for text deletion in BasicTextField(TextFieldState) #1956
  • (prerelease fix) Fix Text Menu popup placement #1971

Desktop

  • Fixed only the first character being temporarily shown in a SecureTextField #1853
  • Changes in TextFieldState are now correctly reported to the transformations when inputting composite characters (e.g. ㅀ), instead of the whole text being replaced on each new character #1853
  • Fixed a potential deadlock when calling Snapshot.sendApplyNotifications from a thread other than the event dispatching thread #1955
  • Fix missing window shadows on macOS in case of usage compose.interop.blending flag #1908
  • Fix Execution failed for task ':composeApp:proguardReleaseJars' when material3 is included in the project #5261

Web

  • Fix horizontal scroll when using touchpad and pressing Shift #1909
  • Prevent app from crashing when running in an insecure context where Web Clipboard API is unavailable #1931
  • Replace tab characters with spaces in Text and TextFields, to avoid them being drawn as tofu #1943
  • Fix touch events processing. Now Modifier.detectTransformGestures will allow to handle zoom and rotation gestures #1942

Navigation

  • (prerelease fix) Fixed navigation on JS targets #1939
  • (prerelease fix) Encode only parameters in web navigation routes to have nicer UX #1940
  • (prerelease fix) Add a flag to disable iOS back gesture detection #1951
  • (prerelease fix) Fixed default pop NavHost animations if enter/exit animations are customized only #1963

Dependencies


1.8.0-beta01 (March 2025)

Changes since 1.8.0-alpha04

Breaking Changes

Multiple Platforms

  • Add @Composable annotations to the actual WindowInsets.Companion.* extensions to match the expected declarations #1919, #1720

Features

iOS

  • Add ability to recreate Composable after ComposeUIViewController leaves view controller hierarchy #1877
  • Support trackpad pointer input #1893
  • Save Composable state when view controller leaves view controller hierarchy #1904

Fixes

iOS

  • Removed permissions alert when pasting text into a TextField #1894
  • Fix crash when removing popup during scene size change animation #1878
  • Fix accessibility elements rects when ComposeUIViewController is shifted #1899
  • Fixed an issue where it wasn't possible to open a popup using pointer input devices #1906
  • Fix popup safe drawing padding when usePlatformInsets = true #1920
  • Fix an issue where Compose would retain the old state when its view was reappeared #1921
  • (prerelease fix) Fix non-interactive UI after interop view tap #1925

Desktop

  • [Windows] Fixed ordering of SwingPanels when using compose.interop.blending=true #1901
  • [macOS] Fix, for some cases, the background flashing when closing a window/dialog. This can still happen if an animation is running when the window or dialog is closing #1911
  • Fix onRenderApiChanged in ComposeWindow and ComposeDialog not working when the renderer changes due to fallback, rather than explicit change #1911
  • [Swing Interop] Fixed compose.interop.blending=true completely breaking Swing interop on Windows when Direct3D is unsupported. Note that interop blending is still supported on Windows only if Direct3D is available #1913

Dependencies


1.8.0-alpha04 (March 2025)

Changes since 1.8.0-alpha03

Highlights

Desktop

  • Improved performance on Windows by replacing the native code compiler to Clang. See details in https://github.com/JetBrains/skiko/pull/1020#issuecomment-2649433785 #1863
    • DirectX rendering FPS is 17 % higher
    • Software rendering FPS is 73 % higher
    • Skiko binary size is reduced from 16.7 to 12.1 Mb on x64 and from 17.4 to 10.5 Mb on arm64
    • Note that the numbers are measured on one machine and also can differ between Compose 1.7 and Compose 1.8 (will be updated in the stable Release Notes)

Known Issues

iOS

  • Back gesture may remain stuck in the middle, the fix will be available in the next pre-release version #1861

Breaking Changes

Multiple Platforms

  • Google Maven now contains some artifacts for all Kotlin targets including Wasm and JS. Compose Multiplatform now depends on those artifacts and user projects might need to add google() repo to repositories {...} block if it is not there yet #1819
  • Multiplatform lifecycle was migrated from a internal core-bundle module to the androidx SavedState. Libraries that use org.jetbrains.androidx.lifecycle:lifecycle-viewmodel-savedstate or org.jetbrains.androidx.savedstate:savedstate should migrate to the latest version #1850
  • (prerelease fix) Material3 is reverted from Jetpack Compose Material3 1.4.0-alpha07 to 1.3.1 because 1.4.0 Stable will be released only after Compose Multiplatform 1.8.0. As a workaround to continue using the new API, replace:
    implementation(compose.material3)
    
    by:
    implementation("org.jetbrains.compose.material3:material3:1.8.0-alpha03")
    
    Jetpack Compose Material3 1.4.0 will be merged again sometime after the Compose Multiplatform 1.8.0 release #1868

Features

iOS

  • Support new haptic feedback types #1831
  • Support for focusable nodes when Full Keyboard Access is enabled on iOS #1825
  • Floating cursor support for BasicTextField(TextFieldState) #1598
  • Add support for Bold Text accessibility setting #1846
  • Bhojpuri language support for VoiceOver #1838
  • Add support for Reduce Motion accessibility setting #1847
  • Default androidx.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

Fixes

Multiple Platforms

  • Fixed the output of TextField(TextFieldState) (aka BasicTextField2) transformations incorrectly leeching into the untransformed text itself, when input method is used (Chinese and other languages with multi-keystroke character input) #1833
  • Fix possible IllegalArgumentException: Object already closed during GraphicsLayer.record #1839
  • (prerelease fix) Change an Esc button interception from onPreviewKeyEvent to onKeyEvent in the desktop BackGestureDispatcher implementation. It fixes problems when user's code handles the Esc-button #1860
  • (prerelease fix) Fix a problem when an onBack callback is updated but listener is not #1860
  • (prerelease fix) Fix memory leak in some cases of re-usage internal layout nodes #1873
  • Compose runtime module now exposes its dependency on Kotlin Coroutines API (changed from implementation() to api()) #1883
  • Correctly set ScrollState.viewportSize for (Basic)TextField(TextFieldState) #1896

iOS

  • (prerelease fix) Fixed issue where cross-directional scrolling could intercept and cancel each other #1851
  • Fixed a bug where touches could be handled by back gesture and composable content at the same time #1879

Desktop

  • (prerelease fix) Restore compatibility with Ubuntu 20.04 #1870
  • (prerelease fix) Fix "Could not resolve version conflict" in non-Gradle projects #1872

Web

  • Mobile browsers: the virtual keyboard is shown when the TextField is clicked/focues #1865
  • Fix text selection with mouse in TextField #1876

Navigation

  • (prerelease fix) Fix a desktop back navigation when Esc button clicked #1890
  • (prerelease fix) Fix an iOS back navigation after a swipe on disallowed edge #1890

Dependencies


1.8.0-alpha03 (February 2025)

Changes since 1.8.0-alpha02

Highlights

Multiple Platforms

Breaking Changes

Multiple Platforms

iOS

Features

Multiple Platforms

iOS

Fixes

Multiple Platforms

iOS

Desktop

Web

Dependencies


1.8.0-alpha02 (January 2025)

Changes since 1.8.0-alpha01

Highlights

Resources

Features

iOS

Web

Fixes

Multiple Platforms

iOS

Desktop

Resources

Navigation

Dependencies


1.7.3 (December 2024)

Changes since 1.7.1

Features

Desktop

Fixes

iOS

Dependencies


1.8.0-alpha01 (November 2024)

Changes since 1.7.1

Highlights

iOS

Breaking Changes

Multiple Platforms

Desktop

Features

Multiple Platforms

iOS

Desktop

Resources

Gradle Plugin

Navigation

Fixes

Multiple Platforms

iOS

Desktop

Resources

Navigation

Dependencies


1.7.1 (November 2024)

Changes since 1.7.0

Fixes

Multiple Platforms

iOS

Desktop

Dependencies


1.7.0 (October 2024)

Changes since 1.6.11

Highlights

Resources

Navigation

Web

Breaking changes

iOS

Desktop

Android

Resources

Features

Multiple Platforms

iOS

Desktop

Resources

Gradle Plugin

Fixes

Multiple Platforms

iOS

Desktop

Web

Resources

Gradle Plugin

Dependencies


1.7.0-rc01 (September 2024)

Changes since 1.7.0-beta02

Highlights

Web

Features

Multiple Platforms

Desktop

Gradle Plugin

Fixes

Multiple Platforms

iOS

Desktop

Web

Android

Navigation

Dependencies


1.7.0-beta02 (September 2024)

Changes since 1.7.0-beta01

Breaking changes

Desktop

Resources

Features

Multiple Platforms

iOS

Desktop

Fixes

Multiple Platforms

iOS

Desktop

Resources

Gradle Plugin

Lifecycle

  • Lifecycle 2.8.2 depends on Compose 1.6.11 (Lifecycle 2.8.1 accidentaly made dependent on Compose 1.7.0-beta01)

Navigation

Dependencies


1.7.0-beta01 (September 2024)

Changes since 1.7.0-alpha03

Breaking changes

iOS

Features

Multiple Platforms

iOS

Desktop

Resources

Fixes

Multiple Platforms

iOS

Desktop

Resources

Gradle Plugin

Dependencies


1.7.0-alpha03 (August 2024)

Changes since 1.7.0-alpha02

Features

Multiple Platforms

Resources

Fixes

Desktop

iOS

Gradle Plugin

Dependencies

To use Material3 Adaptive add the dependencies for the artifacts you need in the build.gradle file for your app or module:

dependencies {
  implementation("org.jetbrains.compose.material3.adaptive:adaptive:1.0.0-alpha01")
  implementation("org.jetbrains.compose.material3.adaptive:adaptive-layout:1.0.0-alpha01")
  implementation("org.jetbrains.compose.material3.adaptive:adaptive-navigation:1.0.0-alpha01")
}

1.7.0-alpha02 (July 2024)

Changes since 1.7.0-alpha01

Features

Multiple Platforms

iOS

Desktop

Resources

Fixes

Multiple Platforms

iOS

Desktop

Resources

Gradle plugin

Dependencies


1.7.0-alpha01 (July 2024)

Changes since 1.6.11

Highlights

Breaking changes

Android

Features

iOS

Desktop

Resources

Fixes

Multiple Platforms

iOS

Desktop

Web

Resources

Gradle Plugin

Dependencies


1.6.11 (June 2024)

Changes since 1.6.10

Fixes

Multiple Platforms

iOS

Desktop

Web

Resources

Gradle Plugin

Dependencies


1.6.10 (May 2024)

Changes since 1.6.2

Highlights

Breaking changes

  • Since Kotlin 2.0-RC2, the additional org.jetbrains.kotlin.plugin.compose Gradle plugin is required. See the migration guide

Features

Multiple Platforms

iOS

Desktop

Web

Resources

Gradle Plugin

Fixes

Multiple Platforms

iOS

Desktop

Web

Resources

Gradle plugin

Dependencies


1.6.10-rc03 (May 2024)

Changes since 1.6.10-rc02

Fixes

iOS

Dependencies


1.6.10-rc02 (May 2024)

Changes since 1.6.10-rc01

Known issues

Features

Web

Fixes

iOS

Resources

Dependencies


1.6.10-rc01 (May 2024)

Changes since 1.6.10-beta03

Known issues

Fixes

Desktop

Web

Dependencies


1.6.10-beta03 (April 2024)

Changes since 1.6.10-beta02

Highlights

Breaking changes

  • Since Kotlin 2.0-RC2, the additional org.jetbrains.kotlin.plugin.compose Gradle plugin is required. See the migration guide
  • org.jetbrains.androidx.navigation is downgraded to 2.7 from 2.8. Some API can no longer be available

Known issues

Features

Multiple Platforms

Lifecycle

Web

Fixes

Multiple Platforms

Desktop

Resources

Gradle plugin

Dependencies


1.6.10-beta02 (April 2024)

Changes since 1.6.10-beta01

Known issues

Features

Lifecycle

Resources

Navigation

  • Support parsing navigation arguments (#1277, #1289)

Fixes

Multiple Platforms

iOS

Desktop

Web

Navigation

Dependencies


1.6.10-beta01 (April 2024)

Changes since 1.6.2

Highlights

Known issues

  • Crash at startup on pre-iOS 17 devices due to loading UITextLoupeSession
  • lifecycle-runtime breaks Compose UI compatibility with Java 11 on desktop, it requires Java 17 or above now.
  • inline fun <reified VM> viewModel(...) is not available from common due to compiler bug. Please use fun <VM> viewModel(KClass, ...) overload instead
  • Compose Multiplatform doesn't provide default ViewModelStoreOwner yet. For using ViewModels outside of NavHost you need to provide custom store owner via LocalViewModelStoreOwner

Features

Multiple Platforms

iOS

Desktop

Web

Resources

Gradle Plugin

Fixes

Multiple Platforms

iOS

Desktop

Web

Resources

Dependencies


1.6.2 (April 2024)

Changes since 1.6.1

Features

Common

Fixes

iOS, Desktop, Web

iOS

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.6.1 (March 2024)

Changes since 1.6.0

Features

Common

Fixes

iOS, Desktop, Web

iOS

Web

Desktop

Resources

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.6.0 (February 2024)

Changes since 1.5.12

Highlights

An overview of highlights for this release is also available in the Compose Multiplatform documentation: What's new in 1.6.0.

Common

iOS, Desktop, Web

iOS

Web

Desktop

Breaking changes

Common

  • Resource library (compose.components.resources) changes
    • resources from *Main\resources should be moved to *Main\composeResources\drawable, commonMain\composeResources\font or *Main\composeResources\files depending on the resource type
    • painterResource("resource.xml") should be replaced by painterResource(Res.drawable.resource)
  • google() maven repository is now required. Add this to build.gradle.kts:
    repositories {
        ...
        google()
    }
    
    If the project doesn't have it, there will be an error Could not find androidx.annotation:annotation:... or Could not find org.jetbrains.compose.collection-internal:collection.
  • Text with lineHeight set is trimmed by default
  • Text with fontSize set without lineHeight inside MaterialTheme has different line height

iOS/Desktop/Web

iOS

  • Separate platform views for Popups/Dialogs that are enabled by default, unable to draw anything out of their own bounds (for example, a shadow of the topmost container). It will be fixed in a future version, but if you're relying on this behavior, you can switch back to the old behavior by setting the platformLayers parameter to false:
    ComposeUIViewController(configure = {
        platformLayers = false
    }) {
        // ...
    }
    

Desktop

Web (k/js)

  • Libraries which depend on earlier Compose Multiplatform version are not compatible with 1.6.0 anymore. This is because decoys generation was disabled. Projects which apply Compose Compiler plugin manually need to remove this argument: plugin:androidx.compose.compiler.plugins.kotlin:generateDecoys=true.

Features

Common

iOS

Desktop

Web

HTML library

Gradle Plugin

Fixes

iOS/Desktop/Web

iOS

Desktop

Web

Gradle Plugin

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

See the announce of Jetpack Compose 1.6. Notes:

See the announce of Material 1.2.

1.6.0-rc03 (February 2024)

Changes since 1.6.0-rc02

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.6.0-rc02 (February 2024)

Changes since 1.6.0-rc01

Breaking changes

since 1.6.0-beta01

  • When the resource library is used, resources should be imported explicitly

To quickly change your code to a new state, replace this:

import <modulePackage>.generated.resources.Res

by this:

import <modulePackage>.generated.resources.*

and perform "Code - Optimize Imports" to apply the project code style. If code style doesn't allow wildcrads, import <modulePackage>.generated.resources.* will be replaced by explicit imports.

iOS/desktop/web

Fixes

Resource library

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.6.0-rc01 (February 2024)

Changes since 1.6.0-beta02

Known issues and solutions

Could not find "org.jetbrains.compose.annotation-internal:annotation"

(or org.jetbrains.compose.collection-internal:collection), link

It happens because some library depends on 1.6.0-beta02 which isn't binary compatible with 1.6.0-rc01. To find this library, call ./gradlew shared:dependencies (replace shared by your main module). Downgrade this library or ask the library author to upgrade it to 1.6.0-rc01.

Could not find androidx.annotation:annotation:...

(or org.jetbrains.compose.collection-internal:collection)

It happens because 1.6.0 depends on collection and annnotation libraries that are available only in the Google Maven repository.

To solve this, add google() maven repository to build.gradle.kts:

repositories {
    ...
    google()
}

iOS/desktop/web

Fixes

iOS

Fixes

Desktop

Fixes

Web

Fixes

Gradle Plugin

Fixes

Resource library

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.6.0-beta02 (February 2024)

Changes since 1.6.0-beta01

Highlights

iOS/desktop/web

Fixes

iOS

Features

Fixes

Desktop

Fixes

Breaking changes and deprecated API

HTML library

Features

Gradle Plugin

Features

Resource library

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.12

Common

Features

Desktop

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.6.0-beta01 (January 2024)

Highlights

Breaking changes

Known issues

  • compose.components.resources library doesn't work yet if you apply kotlin("jvm") Gradle plugin. For now, it only works with kotlin("multiplatform")

Common

Features

iOS/desktop/web

Features

Fixes

Breaking changes and deprecated API

iOS

Features

Fixes

Desktop

Features

Fixes

Web

Features

Fixes

HTML library

Features

Gradle Plugin

Features

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.11 (November 2023)

Common

Features

iOS

Fixes

Desktop

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.10 (October 2023)

This is a combined changelog from the prerelease versions:

Common

Features

Fixes

iOS

Breaking changes

Features

Fixes

Desktop

Features

Fixes

Gradle Plugin

Features

Fixes

HTML library

Features

Web

Features

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.10-rc02 (October 2023)

Common

Features

Desktop

Fixes

Web

Features

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.10-rc01 (October 2023)

Common

Features

Fixes

iOS

Fixes

Desktop

Fixes

Gradle Plugin

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.3 (October 2023)

Desktop

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.10-beta02 (September 2023)

Common

Features

Fixes

iOS

Features

Fixes

Desktop

Features

Fixes

Gradle Plugin

Features

Fixes

HTML library

Features

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.2 (September 2023)

Desktop

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.10-beta01 (September 2023)

Common

Features

iOS

Breaking changes

Features

Fixes

Desktop

Fixes

Gradle Plugin

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.1 (September 2023)

Common

Features

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.0 (August 2023)

This is a combined changelog from the prerelease versions:

Common

Features

Fixes

API Changes

iOS

Features

Fixes

API Changes

Desktop

Features

Fixes

API Changes

Web

Features

Fixes

HTML library

Features

Gradle Plugin

Features

API Changes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.0-beta02 (August 2023)

Common

Features

API Changes

iOS

Features

Fixes

API Changes

Web

Features

Gradle Plugin

Features

API Changes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.5.0-beta01 (July 2023)

Common

Features

Fixes

iOS

Features

Fixes

API Changes

Desktop

Features

Fixes

API Changes

Web

Features

Fixes

HTML library

Features

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.4.3 (July 2023)

Common

Features

  • Support Kotlin 1.8.21, 1.8.22, 1.9.0

iOS

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.4.1 (June 2023)

Common

Fixes

Desktop

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.4.0 (April 2023)

Common

Features

Fixes

iOS

iOS support is in Alpha now

Desktop

Features

Fixes

Web

Tools

Features

Fixes

API Changes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:


1.3.1 (March 2023)

Common

  • Added support for Kotlin 1.8.10

Fixes

Desktop

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:


1.3.0 (January 2023)

Common

Fixes

Desktop

Features

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.2.2 (December 2022)

Desktop

Features

Fixes

Web

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.2.1 (November 2022)

Common

Fixes

Desktop

Fixes

Web

Fixes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.2.0 (October 2022)

Common

Features

Desktop

Features

Fixes

API changes

Web

Features

Fixes

API changes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.1.1 (Mar 2022)

Desktop

Fixes

API changes

If you use Dispatchers.Swing or Dispatchers.Main in your code, add this dependency into build.gradle.kts:

dependencies {
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:$coroutinesVersion")
}

Also, usage of Dispatchers.Swing or Dispatchers.Main inside internals of Compose is implementation details, and can be changed in the future. If you need to avoid race conditions with Compose UI, you can obtain appropriate coroutine scope via rememberCoroutineScope:

import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.window.application

@OptIn(ExperimentalComposeUiApi::class, androidx.compose.foundation.ExperimentalFoundationApi::class)
fun main() = application {
    val scope = rememberCoroutineScope()
    val someApplicationObject = remember(scope) { SomeApplicationObject(scope) }
    
    DisposableEffect(Unit) {
        SomeGlobalObject.init(scope)
        onDispose {  }
    }
}

1.1.0 (Feb 2022)

Desktop

Features

Fixes

API changes

import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.window.singleWindowApplication

private var time by mutableStateOf(System.nanoTime())
private var frame by mutableStateOf(0)

fun main() = singleWindowApplication {
    if (frame == 0) {
        frame++
    } else if (frame == 1) {
        val duration = ((System.nanoTime() - time) / 1E6).toLong()
        println("First frame millis: $duration")
    }
}

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.0.1 (Dec 2021)

This is basically 1.0.0 that works with Kotlin 1.6.10

1.0.0 (Dec 2021)

Desktop

Features

API changes

Web

API changes

Dependencies

This version of Compose Multiplatform is based on the next Jetpack Compose libraries:

1.0.0-beta (Oct 2021)

Common

  • no Android artifacts are published anymore. Google-published artifacts are referenced instead. This approach eliminates compatibility issues.

Desktop

Features

  • Accessibility support on MacOS
  • Smart rendering fallback logic (no crashes on bad hardware/drivers anymore)
  • Performance improvement of software rendering (up to 100%)
  • Transparent window support
  • clickable and toggleable components have a hoverable indication

API changes

  • DesktopMaterialTheme is deprecated, use MaterialTheme instead
  • WindowSize is deprecated, use DpSize instead
  • Modifier.pointerMoveFilter marked as Experimental, stable alternatives are Modifier.hoverable or Modifier.pointerInput
  • Modifier.mouseScrollFilter marked as Experimental, this API will likely change in the future

API breaking changes

  • Old Window API (AppWindow, AppManager) was removed
  • Modifier.pointerIcon is replaced with Modifier.pointerHoverIcon
  • Tray can be used only inside ApplicationScope now
  • Tray(hint=) replaced with Tray(tooltip=)

Web

Features

  • SVG support

API changes

  • Controlled Inputs were added
  • New API for testing - test-utils was added

1.0.0-alpha (Aug 2021)

Common

  • Desktop, Web, and Android artifacts publish at the same time with the same version

Desktop

Features

API changes

  • new Window API is no longer experimental
  • old Window API is deprecated
  • classes from android.compose.desktop.* moved to androidx.compose.ui.awt.* (ComposeWindow, ComposePanel, etc)
  • svgResource/vectorXmlResource/imageResource replaced by painterResource

API breaking changes

  • Window level keyboard API for the old Window API removed
  • Window(icon: BufferedImage) replaced by Window(icon: Painter)
  • ContextMenu renamed to CursorDropdownMenu

Web

API changes

API breaking changes

M4 (Jun 2021)

M3 (Feb 2021)

M2 (Dec 2020)

M1 (Nov 2020)

  • Initial release