Changes since 1.11.1
Highlights
Desktop
- MCP server was introduced for Compose Hot Reload that enables AI agents to interact with a running Compose application in real time #5671
Migration Notes
Multiple Platforms
- Deprecation level of
NativeCanvas,NativePainttypealiases and related methods has been changed toERROR#3127
Desktop
- The
backgroundparameter ofSwingPanelhas been deprecated. Instead set the background manually in thefactorymethod. There's a new (experimental)Color.toAwtColor()function to convert Compose color objects to AWT ones #3024 - If your
ComposePanel,ComposeWindoworComposeDialogcontent can not be measured in infinite constraints (e.g.Modifier.verticalScroll) on a certain axis, you should provide a fixed size for that axis by callingComposePanel.setPreferredSizewith aDimensionthat has a fixed size (on that axis) #3055
Features
Multiple Platforms
- Add
blockPointerInputOutsideflag toPopupPropertiesto support not-blocking pointer inputs outside of focusablePopups #2992 - Support
LayerOutsetstoGraphicsLayer&Modifier.graphicsLayerwhich can be used to increase the visual bounds of the layer beyond its measured size. This can be used to avoid the implicitclipToBoundsbehavior when the layer is promoted to an offscreen buffer #3144 - Support
MeshGradientPainterinModifier.paint#3143 - Implemented
ComposeUiTest.runWithoutImplicitWait#3170
iOS
- Support
LiveRegionsemantics in Accessibility #2944 - The selection handles now match the style of iOS #2991
- Add the 'Select' item on the context menu for the text fields #3081
- Add
NSLocale.toComposeLocale()API to createLocalefrom platformNSLocale#3103 - Support
VerbatimTtsAnnotationandLocaleListattributes in accessibility VoiceOver #3145
Desktop
- The parent AWT window of a composition is now available via
LocalAwtWindow.current#3007 - Implemented a new, experimental,
WindowStateAPI #2938 - It is now possible to control the way
ComposePanel,ComposeWindowandComposeDialogcompute their minimum (onlyComposePanel), preferred and maximum (onlyComposePanel) sizes, by setting the corresponding property to aDimensionwith a specialUNSPECIFIED_DIMENSION_VALUEon the axis that should be determined by the content #3055 - The default ProGuard version is set to 7.8.0 #5613
- Update bundled Compose Hot Reload version to 1.2.0 #5671
Web
- Support for Modifier.keepScreenOn for web using Screen Wake Lock API #2784
- Support haptic feedback on web targets #3045
- Noto fonts is being loaded automatically for unresolved symbols on Web #3010
Navigation
- Improved iOS specific default navigation transactions in Nav2 #3023
- Web and Desktop default navigation transactions are set to
Nonein Nav2 #3023
Fixes
Multiple Platforms
- Fix
DatePickerDialog'sconfirmButtonanddismissButtondisplay order on iOS, Desktop, Kotlin/JS and Kotlin/Wasm not consistent with Material Design guidance #3048 - Fixed a crash in RTL text cursor positioning when paragraphs contain newlines followed by emojis or combining marks #3056
ComposeUiTestidle handling (waitForIdle/awaitIdle/runOnIdle) now matches Android: idleness is reached once composition, measure, and layout have settled (a pending draw is still flushed before returning). As a result,hasPendingWork()reflects composition/measure/layout state, and withmainClock.autoAdvance = falsewaiting now settles pending measure/layout #3108- Fix crash in method setComposingRegion when calling it with inverted or invalid region #3112
iOS
- Fix a conflict with external bundled Skia libraries #3008
- Fix incorrect scaling and positioning of interop
UIKitView/UIKitViewControllerelement whenLocalDensityis modified. This change does not affect scaling offactorycontent:UIView/UIViewController#3037 - Fix issue where
BasicTextFieldreported inconsistent changes between Android and iOS #2990 - Fix issue where a
BasicTextFieldwithInputTransformationmay use the incorrect internal text state #2990 - Fix elements selection with Full Keyboard Access #3038
- Fix application build when using old Xcode 16 SDK #3278
- Fix an issue where the Compose does not receive key events when initially created #3066
- Fix issue when
BasicTextFielddoes not show context menu after long press #3080 - Fix symbols duplication on keyboard paste hotkeys #3067
- Focusable nodes inside merged semantics remain focusable #3089
- Fix content jump at the beginning of a swipe back gesture #3101
ViewModelnow receivesonClearedcall when Compose Container is deallocated #3118- Fix incorrect frames order during high load rendering #3122
- Fix swipe-back gesture conflict with horizontally scrollable components like
HorizontalPager#3116 - Fix an issue where
ComposeUIViewControllermight fail to load its content when placed inside a SwiftUI view #3159 - Fix UIKit back gesture briefly dispatched drag input to Compose content, causing UI like navigation drawers to appear during back navigation #3192
- Fix iOS swipe-back behavior in RTL layouts #3196
- Fixed a crash that could occur when inserting text via Scribble (Apple Pencil) in TextFields with
usingNativeTextInputset totrue#3201 - Fix rare crash that occurs when iOS accesses a disposed AccessibilityElement #3214
- Fix crash on iOS 14 caused by referencing
CAFrameRateRangeDefault, which is only available on iOS 15+ #3219
Desktop
- [
ComposePanelin Swing rendering mode] Fix Metal offscreen rendering crash when drawing to a Software renderer #3008 - Fix
SwingPanelsize not scaling according toLocalDensity. Note that this doesn't scale the Swing content of theSwingPanel#3033 - Fixed the native keyCode for
Key.NumPadDotto the correctKeyEvent.VK_DECIMAL#3142 - Fixed
LayoutCoordinatesconversion to window/screen space in popups/dialogs withcompose.layers.type=WINDOW#3154 - Fixed a crash when encountering a
nullaccessible child in the Swing hierarchy while looking for a component to switch a11y focus to, after the currently focused a11y component has been removed #3158 - Fixed popups/dialogs staying on top of other windows with
compose.layers.type=WINDOW#3153 - On Windows and macOS,
isSystemInDarkThemewill now return dynamic values as the OS theme changes, causing any callers to recompose. This is done by polling the system in the background once a second. This behavior can be controlled by settingComposeUiFlags.pollSystemTheme#3063 - Fix crash when starting a selection beyond the last text in a SelectionContainer #3270
Web
- Fixed pointer state remaining active when the browser cancels a pointer via
pointercancel(system gestures, palm rejection, device disconnect, etc.) #3036 - Added precise trackpad gesture detection in Chrome via heuristic methods #3123
- Deliver both scroll axes in wheel events (fix diagonal scroll) #3147
- Web: retry loading fallback fonts in case of network errors #3152
- Fix of tofu symbols during a first draw in TextFields with unknown symbols #3182
- Fixes tofu symbols in the second, third etc texts on a page with an equal text #3181
- Fix a regression in scrolling when ComposeViewport is embedded in HTML scrollable container #3221
- Fix
div#cmp_a11y_roothaving 0×0 dimensions on Compose for Web (Kotlin/WASM), which made Compose content invisible to hit-test-based accessibility tools such as Accessibility Inspector and Appium. The a11y container is now sized to match the canvas and stays in sync on resize #3226 - Fixed the hidden software keyboard in mobile browsers in focused text fields #3235
Resources
- Fix an issue when resource loading might be cancelled and UI became empty #5617
- Support BCP 47 script (
values-b+sr+Latn,values-b+zh+Hans) and numeric region (values-b+es+419) qualifiers, including multi-segment locales and trailing theme/density qualifiers, incommonMainresource folders #5582 - Web: fixed a app crash when a resource fetch is failed #5627
Gradle Plugin
- Add clear error message if JS browser tests configuration for Compose UI is invalid (doesn't have declared an executable binary) #5628
Components
Gradle plugin
org.jetbrains.compose version 1.12.0
Libraries
| Library group | Coordinates | Based on Jetpack |
|---|---|---|
| Runtime | org.jetbrains.compose.runtime:runtime*:1.12.0
| Runtime 1.12.0 |
| UI | org.jetbrains.compose.ui:ui*:1.12.0
| UI 1.12.0 |
| Foundation | org.jetbrains.compose.foundation:foundation*:1.12.0
| Foundation 1.12.0 |
| Material | org.jetbrains.compose.material:material*:1.12.0
| Material 1.12.0 |
| Material3 | org.jetbrains.compose.material3:material3*:1.12.0-alpha03
| Material3 1.5.0-alpha22 |
| Material3 Adaptive | org.jetbrains.compose.material3.adaptive:adaptive*:1.3.0-beta02
| Material3 Adaptive 1.3.0-beta02 |
| Lifecycle | org.jetbrains.androidx.lifecycle:lifecycle-*:2.11.0
| Lifecycle 2.11.0 |
| Navigation | org.jetbrains.androidx.navigation:navigation-*:2.10.0-alpha02
| Navigation 2.10.0-alpha05 |
| Navigation3 | org.jetbrains.androidx.navigation3:navigation3-*:1.2.0-alpha02
| Navigation3 1.2.0-alpha04 |
| 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 |