Skip to content

Releases: JetBrains/compose-multiplatform

1.9.0-alpha02

06 Jun 17:21
ab2e690
Compare
Choose a tag to compare
1.9.0-alpha02 Pre-release
Pre-release

Changes since 1.8.1

Known issues

Desktop

  • Could not find org.jetbrains.androidx.window:window-core-desktop:1.4.0-alpha07 when using material-adaptive or material3-adaptive-navigation-suite. YouTrack issue. Workaround is to exclude one dependency and include another:
    // if you have material3AdaptiveNavigationSuite dependency
    implementation(compose.material3AdaptiveNavigationSuite) {
        exclude(group = "org.jetbrains.androidx.window")
    }

    // if you have org.jetbrains.compose.material3.adaptive dependency
    implementation("org.jetbrains.compose.material3.adaptive:adaptive:1.2.0-alpha02") {
        exclude(group = "org.jetbrains.androidx.window")
    }

    implementation("androidx.window:window-core-jvm:1.4.0")

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

20 May 12:01
afe6a5b
Compare
Choose a tag to compare

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

06 May 16:51
e7e8e12
Compare
Choose a tag to compare

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 #1601
  • runOnIdle will no longer call waitForIdle after executing the action #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

  • Tests that relied on waitForIdle, awaitIdle or runOnIdle (whether explicit or implicit) executing delay-ed coroutines will no longer work correctly. To fix this advance the test time via mainClock manually, as needed #1550
  • Tests that advance the test clock (via mainClock.advanceTimeBy) may see different behavior with regards to the amount and timing of recomposition, layout, drawing and effects #1550
  • 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

  • Add localised string for VoiceOver accessibility support #1441
  • 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](https://github.com/JetBrains/compose-multiplatform-c...
Read more

1.8.0-rc01

24 Apr 15:58
e7e8e12
Compare
Choose a tag to compare
1.8.0-rc01 Pre-release
Pre-release

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

09 Apr 17:53
Compare
Choose a tag to compare
1.8.0-beta02 Pre-release
Pre-release

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

20 Mar 15:24
Compare
Choose a tag to compare
1.8.0-beta01 Pre-release
Pre-release

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

07 Mar 09:13
a265145
Compare
Choose a tag to compare
1.8.0-alpha04 Pre-release
Pre-release

Changes since 1.8.0-alpha03

Highlights

Desktop

  • Improved performance on Windows by replacing the native code compiler to Clang. See details in JetBrains/skiko#1020 (comment) #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

13 Feb 10:24
5f00f48
Compare
Choose a tag to compare
1.8.0-alpha03 Pre-release
Pre-release

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

20 Jan 14:29
19ed537
Compare
Choose a tag to compare
1.8.0-alpha02 Pre-release
Pre-release

Changes since 1.8.0-alpha01

Highlights

Resources

Features

iOS

Web

Fixes

Multiple Platforms

iOS

Desktop

Resources

Navigation

Dependencies

1.7.3

20 Dec 10:24
5615795
Compare
Choose a tag to compare

Changes since 1.7.1

Features

Desktop

Fixes

iOS

Dependencies