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.
 
 
 
 

298 KiB

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