Changes since 1.10.3
Breaking Changes
Multiple Platforms
- To decouple common Compose graphics APIs from direct Skia/Skiko types, non-Android
Shaderis now a dedicated Compose wrapper type. Since it's not an ABI-compatible change, you might need to update some libraries that use this API to newer, compatible versions. Migration: #2810- If you pass raw Skia/Skiko shaders into Compose APIs, wrap with
SkShader.asComposeShader(). - If you need low-level Skia/Skiko access from Compose Shader, use
Shader.skiaShaderextension.
- If you pass raw Skia/Skiko shaders into Compose APIs, wrap with
iOS
DialogandPopupcontainer views are now located on a system transition view above the root view controller, but below modally presented view controllers. This may affect presentation of interop view controllers #2833
Migration Notes
Multiple Platforms
- The project has migrated to Kotlin language version and API version
2.2. The projects depending on Compose Multiplatform need to use the same version or newer #2614 navigation-runtime,navigation-commonno longer provideandroidx.collectionas anapitransitive dependency. If your project doesn't compile with unresolvedandroidx.collection...classes addimplementation("androidx.collection:collection:1.5.0"). This change is required to avoid differences with the original Jetpack libraries and allow reusing the same code without additional changes needed #2749- Kotlin 2.3 is required for native and web platforms #2755
Key.Homehas been deprecated, as it has been incorrectly mapped to the keyboard "Home" key. UseKey.MoveHomeinstead #2801androidx.compose.ui.graphics.NativePaintandandroidx.compose.ui.graphics.NativeCanvastypealiases are deprecated, use direct references to native types instead #2802Paint.asFrameworkPaint()was replaced withPaint.skiaPaintextension to avoid exposing a platform type intocommonMainsourceset viatypealias#2802RenderEffect.asSkiaImageFilter()was replaced withRenderEffect.skiaImageFilterextension to avoid exposing a platform type intocommonMaintypes #2809- Deprecate
Canvas.nativeCanvasextension in favor ofCanvas.skiaCanvasto avoid ambiguity #2809 runComposeUiTest,runSkikoComposeUiTest,runDesktopComposeUiTestare deprecated in favor v2 versions #2919
iOS
parallelRenderingflag now enabled by default #2732- Compose Multiplatform doesn't support Apple x86_64 targets anymore due to deprecation in Kotlin #5514
Web
- Renamed
WebElementViewtoHtmlElementViewto better reflect its HTML-specific purpose #2636 WebElementViewhas been deprecated in favor ofHtmlElementView#2641- Kotlin 2.3.20 is required when using Compose Multiplatform with Kotlin/JS or Kotlin/Wasm #2918
Navigation
- A deprecated
suspend fun Window.bindToNavigationmethod has been removed #2675
Features
Multiple Platforms
- Clicking outside of any focusable node using the mouse will now clear focus from the currently focused node, if any. This behavior can be disabled by setting
isClearFocusOnMouseDownEnabled = falseinComposePanel,ComposeWindoworComposeDialog#2533 - Migrate window insets padding modifiers from
composedAPI toInsetsPaddingModifierNode#2572 - Add enter end exit animation for
Dialog. It can be disabled viaDialogProperties.animateTransitionor via global feature flagComposeUiFlags.isDialogAnimationEnabled#2596 - Update Skia to m144 #2779
- Support v2 Compose UI Tests APIs on non-android targets which uses
StandardTestDispatcherby default instead ofUnconfinedTestDispatcher#2919 - Support a customization of
effectContextin Compose UI tests #2919 - Implement drag-to-scroll in
SelectionContainer. When the mouse pointer is dragged outside the element while selecting text, the text element will be scrolled accordingly. Note that this requires wrapping the content in a scrolling container/modifier, e.g.Modifier.verticalScroll#2979
iOS
- Added a new
ComposeUIViewAPI enabling Compose embedding in view hierarchy #2589 - Add ability to adjust
isClearFocusOnMouseDownEnabledin theconfigurelambda when creating Compose components #2644 - Support semantics for links in text #2649
- Popups and Dialogs now use the same interface orientation and status bar behaviour as the root view controller on the window #2686
- Add support for tvOS Siri Remote button events (Select, Menu, Play/Pause) #2717
- Adds an opt-in Native iOS Text Input mode for Compose
BasicTextField(bothTextFieldValueandTextFieldState) enabled viaPlatformImeOptions.usingNativeTextInput(enabled)in iOS source set #2602 - With the native iOS text input flag set to
true,BasicTextFielduses native UIKit editing and interaction, including: #2602- Native caret placement and movement (tap-to-place caret, spacebar caret movement, “ghost caret”)
- Native magnifier
- Native selection gestures (double-tap word selection, triple-tap paragraph selection) and iOS-like selection UI (region + handles)
- Native context menu behavior is supported for both the legacy and the new context menu (
isNewContextMenu = true) configurations. - Native context menu behavior when interacting with the caret, selection region, or selection handles
- Native text field context menu actions (e.g. Translate, Look Up, Share) (not available without this mode)
- Autocorrect / typo replacement support
- Autofill support for text fields, including filling from saved passwords one field at a time
- Support automatic sizing for Auto Layout–based views together with supporting explicit remeasurement via
rememberUIKitInteropRemeasureRequester()+Modifier.remeasureRequester(...)withUIKitInteropRemeasureRequester.requestRemeasure()for propagating UIKit-side size changes to Compose #2797
Desktop
- Allow specifying AWT
AccessibleRoledirectly viaSemanticsPropertyReceiver.awtRole#2577 - Menu items in the context menu for text fields and
SelectionContainercan now be disabled #2617 - Cleanup old unpacked binaries from
~/.skiko(this folder is used if the application is launched via./gradlew run). Useskiko.data.cleanup.daysto configure the retention period in days #2645 - It is now possible to configure the mouse-wheel propagation-to-parent behavior per
ComposePanelviaComposePanel.redispatchUnconsumedMouseWheelEventsflag #2659 - [Linux] Improve window dragging experience when using
WindowDraggableAreaon Linux with JetBrains Runtime #2674 singleWindowApplicationcontent's receiver now subclassesApplicationScopetoo, allowing to programmatically exit the app #2703- New compile-time warnings for invalid ui/menu composable mixing that previously failed only at runtime #2777
Web
- Add
isClearFocusOnMouseDownEnabledinComposeViewportConfigurationto configure the focus behaviour on mouse press #2781
Gradle Plugin
- Add a compatibility check for runtime libraries to ensure consistency with the expected Compose version #5485
- Add a compatibility check for skiko libraries to ensure consistency #5541
Navigation
- Add
unveilInandveilOutanimations to default iOS transition specs in Navigation3 #2655
Fixes
Multiple Platforms
- Fixed exception thrown when using
BulletswithEmunits #2667 - Fix window insets consumption in system window insets padding modifiers #2665
Ctrl+Home/Ctrl+EndorCmd+Home/Cmd+Endshortcuts should now work correctly in text fields #2931- Fix mouse-clicks being missed occasionally (typically when using Apple's Magic Mouse) #2975
- Fix crash when pressing up/down keys in an open context menu #2976
- Fix crash when selecting text right-to-left and then typing a character via IME #2983
iOS
- Fix incorrectly consumed insets in
ModalBottomSheet#2572 - The rendering queue is running with the highest priority when
parallelRenderingis enabled #2623 - Fix ability to place Compose inside the SwiftUI
Formview #2589 - Fix the traversal order of accessibility nodes where a parent node may follow its child node #2643
- Fix crash when closing popup simultaneously with back navigation #2651
- Fix the issue where the keyboard may focus on the wrong container and become stuck #2652
- Fix issue where the first frame may not be rendered on Compose container appearance #2683
- Fix crash when manually posting
UIKeyboardWillHideNotificationwithoutuserInfo#2713 - Fix an ability to use
scrollsToTopfor nativeUIScrollViews #2705 - Fix crash in
MetalRedrawerthat occurs whenPopuporDialogbox opens and closes quickly #2756 - Fix hit test for Accessibility Elements #2760
- Fix crashes when
parallelRenderingis enabled #2732 - Fix issues with custom context menu items on iOS 15 or earlier #2771
- Fix traffic lights overlapping content on iPad by adopting the new iOS 26
LayoutRegionAPI #2555 - The haptic feedback when selecting text now works closer to the way it does with iOS text fields #2786
- Fix an issue where
PopupandDialogmay not close when clicked outside of their bounds #2815 - Fix crash caused by mouse hover #2834
- Fix an issue where the text cursor appeared in the wrong position when dragging it after selecting text #2833
- Fix an issue where selection handles were not rendered inside the magnifier #2833
- Fix an issue where popups and dialogs were displayed above a modally presented view controller #2833
- Traversal groups now convert into an additional node in the accessibility hierarchy #2848
- Fix
Cmd + C(copy) event handling for the selected text wrapped inSelectionContainerwhen using a hardware keyboard #2872 - Fix the scrolling inertia issue when performing short scroll gestures #2851
- Fix an issue where a fling may occur unexpectedly when lifting a finger #2851
- Fix an issue with scrolling when scrollable content is displayed in modal view controller #2883
- Fix crash caused by the missing symbol
UIWindowSceneGeometryon iOS 15 #2924 - The structure of accessibility elements is now better aligned with Android semantic nodes #2916
- Fix issues with accessibility elements not focusing at runtime #2916
- Fix
ModalBottomSheetDialogcontent inset calculation #2849
Desktop
- Fix changing the pointer from one custom cursor to another #2613
- Fix exception/crash when pasting in
TextFieldin headless mode #2612 - When there is no selection in
SelectionContainer, the "Copy" menu item will be disabled #2617 - Fix unnecessary redraws caused by
WindowInsetsRulersimplementation usingRulerScope.coordinates.size#2628 - [A11y, Windows] Fixed the accessibility hierarchy, allowing NVDA traversal commands to work correctly #2637
- [A11y] Correctly report focused status of a newly created, but already focused, node #2637
- [A11y] Correctly re-report focused state of focused node when the Compose container becomes focused, such as when the window is brought to the foreground #2637
org.jetbrains.compose.ui:ui-testno longer depends oncom.google.truth:truth#2648- [macOS] Fixed Crash: Failed assertion when MTLTextureDescriptor is greater than the maximum allowed size #2669
- Fixed
ComposePaneldrawing the background that was set on it #2670 - Fixed
JPopupContextMenuRepresentationto correctly recreate the menu when thecreateMenuargument changes #2702 - Fix accessibility focus continuing to highlight a removed element #2695
- [macOS] Fix Wubi input for
(Basic)TextField(TextFieldValue)#2722 - [macOS, accessibility] Fix VoiceOver sometimes "clicking" the wrong button when a button click is triggered by the user #2720
- #2680
- Fix
TextFieldaccessibility issue wherecontentDescriptionwas ignored by screen readers (VoiceOver).TextFieldnow properly usescontentDescriptionas the accessible name/label, making forms usable with assistive technologies #2680 - The coroutine context of
launchApplicationandawaitApplicationis now correctly used in windows and dialogs of the application #2742 - Fix an issue with "Pinyin - Simplified" input in
BasicTextField(TextFieldState)when the temporary (composed) english text was not removed when the composition is committed #2763 - Fix incorrect pointer Enter/Move events sometimes being sent immediately following the mouse pointer exiting the compose scene #2750
- Correctly react to numpad arrows,
NumPadPageUp,NumPadPageDown,NumPadHomeandNumPadEndkeys in text fields #2800 - Match key modifiers exactly (without ignoring the state of other modifiers) when determining the corresponding text field action/command. This also fixes inputting 'a' and 'z' diacritics (e.g. 'ą' and 'ż') in text fields on Windows #2804
- Fix the condition for hiding the tooltip in a
TooltipAreaon a pointer-exit event while the pointer is still inside the area #2798 - Some key shortcuts (e.g. shift-backspace, shift-delete on macOS) that previously didn't work in text fields now perform the correct action #2827
- [Windows]
Alt-backspacenow correctly performs undo action #2870 - Fix memory leak in dialogs with non-default
compose.layers.typesetting #2864 - [Accessibility] Improve performance of traversal groups with a large amount of children #2900
- Clear some scheduled tasks on scene closure #2888
- [
ComposePanelincompose.swing.render.on.graphicsmode] Fix Metal offscreen rendering crash when drawing to a Software renderer #3009 - Update bundled Compose Hot Reload version to 1.1.1 #5596
Web
HtmlElementViewis now available inwebMainsource set #2614- Deprecated
CanvasBasedWindowhas been deleted #2614 - Adjust HTML hierarchy for proper interop container location outside the shadow DOM #2710
- Ignore duplicate mouse events following touch events on web to avoid unintended clicks #2741
- Fix Apple Magic mouse behavior #2748
- Fix too early tap detection on web during scrolling #2753
- Fix sudden scroll stops during fast gestures #2759
- Support cursor control using space bar sliding gesture on Android Web #2762
- Fix scrolling sudden stops or speed-ups in web apps #2764
- Improvements of the Web scroll behavior #2766
- Unified touch and pointer event handling for better consistency and performance on Web #2799
- Fix Magic mouse behaviour in Safari and Firefox #2811
- Fix incorrect mouse click detection #2844
- Fix an issue where wheel events reported incorrect mouse button state in Safari and Firefox #2844
- The browser now handles additional cut, copy, and paste keyboard shortcuts, such as
Shift+Insert#2871 - Fix an issue where "fast delete" action removed characters one by one instead of deleting whole words in text fields on iOS #2875
- Fix identity hash code not being correctly cached #2913
- [iOS] Fix 'Fast delete' not working correctly for text containing emojis #2927
- [iOS] Fix virtual keyboard jumps after each tap. iOS 26.4 only #3013
- [Safari] Fix an issue where buttons required a second click to respond after performing drag-and-drop operations #3014
Resources
- Fix crash in
getSystemEnvironmenton headless desktop #5471
Gradle Plugin
- Corrected version validation for MacOS
CFBundleVersion. The major version may now be 0 #5504
Components
Gradle plugin
org.jetbrains.compose version 1.11.0
Libraries
| Library group | Coordinates | Based on Jetpack |
|---|---|---|
| Runtime | org.jetbrains.compose.runtime:runtime*:1.11.0
| Runtime 1.11.1 |
| UI | org.jetbrains.compose.ui:ui*:1.11.0
| UI 1.11.1 |
| Foundation | org.jetbrains.compose.foundation:foundation*:1.11.0
| Foundation 1.11.1 |
| Material | org.jetbrains.compose.material:material*:1.11.0
| Material 1.11.1 |
| Material3 | org.jetbrains.compose.material3:material3*:1.11.0-alpha07
| Material3 1.5.0-alpha17 |
| Material3 Adaptive | org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-alpha07
| Material3 Adaptive 1.3.0-alpha10 |
| Lifecycle | org.jetbrains.androidx.lifecycle:lifecycle-*:2.11.0-beta01
| Lifecycle 2.11.0-beta01 |
| Navigation | org.jetbrains.androidx.navigation:navigation-*:2.9.2
| Navigation 2.9.7 |
| Navigation3 | org.jetbrains.androidx.navigation3:navigation3-*:1.1.1
| Navigation3 1.1.1 |
| Navigation Event | org.jetbrains.androidx.navigationevent:navigationevent-compose:1.1.0
| Navigation Event 1.1.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 |