{"id":707417,"date":"2026-05-15T13:50:18","date_gmt":"2026-05-15T12:50:18","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=kotlin&#038;p=707417"},"modified":"2026-05-15T14:01:10","modified_gmt":"2026-05-15T13:01:10","slug":"compose-multiplatform-1-11-0","status":"publish","type":"kotlin","link":"https:\/\/blog.jetbrains.com\/pt-br\/kotlin\/2026\/05\/compose-multiplatform-1-11-0","title":{"rendered":"Compose Multiplatform 1.11.0 Is Now Available"},"content":{"rendered":"\n<p>A new release of Compose Multiplatform has landed, with improvements to the iOS and web experience and a refreshed approach to UI testing. Read on for the highlights, or for the complete list of changes, check out the <a href=\"https:\/\/kotlinlang.org\/docs\/multiplatform\/whats-new-compose-111.html\" target=\"_blank\" rel=\"noopener\">What\u2019s New<\/a>.<\/p>\n\n\n\n<p align=\"center\"><a class=\"ek-link jb-download-button\" href=\"https:\/\/kotlinlang.org\/docs\/multiplatform\/compose-multiplatform-create-first-app.html\" target=\"_blank\" rel=\"noopener\"><i class=\"download-icon\"><\/i>Get Started with Compose Multiplatform<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Native text input on iOS<\/h2>\n\n\n\n<p>If you&#8217;ve wanted text fields in your Compose iOS app to feel a little more native, this one&#8217;s for you. Compose Multiplatform 1.11.0 introduces an experimental native text input implementation built on top of <code>UIView<\/code>.<\/p>\n\n\n\n<p>This makes caret movement more precise, offers native gestures and selection handles, and provides the familiar system context menu \u2013 including <code>Autofill<\/code>, <code>Translate<\/code>, and <code>Search<\/code>. The existing text input remains the stable, cross-platform choice, but if you want the most native feel on iOS, you can now opt in.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" width=\"1206\" height=\"2495\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2026\/05\/WithFrame-Simulator-Screenshot-iPhone-17-Pro-2026-05-13-at-01.14.33.png\" alt=\"Native text input on iOS\" class=\"wp-image-707462\" style=\"width:300px\"\/><\/figure>\n\n\n\n<p>Another iOS improvement: <a href=\"https:\/\/kotlinlang.org\/docs\/multiplatform\/whats-new-compose-180.html#opt-in-concurrent-rendering\" data-type=\"link\" data-id=\"https:\/\/kotlinlang.org\/docs\/multiplatform\/whats-new-compose-180.html#opt-in-concurrent-rendering\" target=\"_blank\" rel=\"noopener\">Concurrent rendering<\/a>, introduced as an opt-in feature in version 1.8.0, is now enabled by default. Rendering tasks are now offloaded to a dedicated render thread out of the box, so your apps get the performance benefits without any extra configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compose UI testing, v2<\/h2>\n\n\n\n<p>Testing on non-Android targets gets an upgrade with support for the <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/testing\/migrate-v2\" target=\"_blank\" rel=\"noopener\">v2 <code>ComposeUiTest<\/code> APIs<\/a>. The default dispatcher is now <code>StandardTestDispatcher<\/code>, so coroutines run in the order in which they&#8217;re queued. This makes tests more predictable and brings them closer to production behavior.<\/p>\n\n\n\n<p>The v2 APIs also accept an <code>effectContext<\/code> parameter for passing a custom coroutine context into your compositions \u2013 useful for things like overriding the motion duration scale or supplying your own test dispatcher:<\/p>\n\n\n\n<pre class=\"kotlin-code\" data-highlight-only=\"true\" theme=\"idea\" indent=\"4\" style=\"visibility: hidden; padding: 36px 0;\">\n@OptIn(ExperimentalTestApi::class)\n@Test\nfun myTest() = runComposeUiTest(\n    effectContext = motionDurationScale + StandardTestDispatcher()\n) {\n    setContent {\n        MyComposable()\n    }\n    \/\/ assertions\n}\n<\/pre>\n\n\n\n<p>The previous APIs (<code>runComposeUiTest<\/code>, <code>runSkikoComposeUiTest<\/code>, and <code>runDesktopComposeUiTest<\/code>) are now deprecated in favor of their v2 counterparts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Smoother scrolling on web targets<\/h2>\n\n\n\n<p>Scrolling performance on Compose web has been trailing that of native targets for a while. With 1.11.0, touch processing has been substantially reworked, and scrolling in Compose web apps now feels much closer to what you get on other platforms.<\/p>\n\n\n\n<p>You can see it in action in the latest <a href=\"https:\/\/jetbrains.github.io\/kotlinconf-app\/\" target=\"_blank\" rel=\"noopener\">web version of the KotlinConf App<\/a>. For all the gritty details, as well as demos and the list of fixes, head over to <a href=\"https:\/\/youtrack.jetbrains.com\/issue\/CMP-9727\" target=\"_blank\" rel=\"noopener\">CMP-9727<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>That&#8217;s the overview of 1.11.0. Update your dependencies, try out the new APIs, and let us know what you think. For everything that didn&#8217;t make it into this post, check out the <a href=\"https:\/\/github.com\/JetBrains\/compose-multiplatform\/releases\/tag\/v1.11.0\" target=\"_blank\" rel=\"noopener\">full release notes<\/a> or <a href=\"https:\/\/kotlinlang.org\/docs\/multiplatform\/whats-new-compose-111.html\" target=\"_blank\" rel=\"noopener\">What\u2019s New<\/a>.<\/p>\n","protected":false},"author":1053,"featured_media":707427,"comment_status":"closed","ping_status":"closed","template":"","categories":[956,907],"tags":[6706],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/707417"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/types\/kotlin"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/users\/1053"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/comments?post=707417"}],"version-history":[{"count":6,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/707417\/revisions"}],"predecessor-version":[{"id":707504,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/kotlin\/707417\/revisions\/707504"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media\/707427"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/media?parent=707417"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/categories?post=707417"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/tags?post=707417"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/pt-br\/wp-json\/wp\/v2\/cross-post-tag?post=707417"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}