For developers · Checked 1 October 2026

Liquid Glass in a Compose Multiplatform app

Short answer: Liquid Glass, Apple’s design system from iOS 26, is rendered by the system through native TabView, NavigationStack and toolbar APIs, so a screen drawn entirely by Compose doesn’t get it. JetBrains’ official approach is to let SwiftUI own the tab bar and navigation stack while Compose keeps rendering each screen’s content. You don’t write any Liquid Glass code: native tabs and navigation bars pick it up automatically. You need Xcode 26 or later with the iOS 26 SDK, and a fallback to your full-Compose UI on older iOS.

Four ways to get Liquid Glass with Compose Multiplatform

From the Kotlin Multiplatform documentation «Liquid Glass in a Compose Multiplatform app», dated 21 July 2026.

ApproachResultTrade-off
SwiftUI shell: TabView and NavigationStack host Compose screensSystem Liquid Glass and native navigation behaviorNavigation state mirrored between Swift and Kotlin
UIKit coordinators driven from KotlinSystem Liquid Glass, one source of navigation stateYou write UIKit interop code
Compose navigation with native UITabBar and UINavigationBar embeddedNative controls with Liquid Glass stylingSome interop limitations between native overlays and Compose content
Compose-only UI with an imitated effect (e.g. AndroidLiquidGlass, Liquid)Everything stays in ComposeVisually similar to Liquid Glass, not identical

The recommended setup: SwiftUI owns navigation

In a fully shared UI, one ComposeUIViewController owns tabs, back stack, back gestures and content. JetBrains’ tutorial, built on the open-source KotlinConf app, splits that: SwiftUI creates a TabView with a NavigationStack per tab, and each destination hosts a single Compose screen. When the user taps something in Compose, the route is forwarded to Swift through an onNavigate callback and pushed onto the native stack. The callbacks default to null, so Android, desktop and web targets are unaffected.

What changes in shared Kotlin code

Routes get title and optional subtitle properties, so SwiftUI can show navigation bar titles and the long-press back stack without calling back into Kotlin. App() takes a starting tab plus onNavigate and onActivate callbacks. The nav host forwards every detail route to Swift and removes it from Compose’s back stack, which the tutorial shows for Navigation 3; other navigation libraries need the same pattern with their own APIs. A flat single-screen renderer draws one route at a time, a LocalUseNativeNavigation flag hides Compose’s own title bars and back buttons so they don’t appear twice, and iosMain exposes MainViewController and ScreenViewController entry points.

Keep older iOS working

Liquid Glass and the new TabView APIs are iOS 26 only. The tutorial keeps a MainViewController overload without callbacks and branches with if #available(iOS 26.0, *): native navigation on iOS 26, the original full-Compose view on earlier versions. Without that overload, the Swift fallback branch won’t compile.

Skipping SwiftUI

SwiftUI’s tabs and stacks sit on UITabBarController and UINavigationController, and Liquid Glass applies to those native bars either way. If you have no SwiftUI app to keep, declare navigation contracts in commonMain as expect class coordinators and push or pop ComposeUIViewController instances from Kotlin, or expose screen factories from Kotlin and assemble the bars in Swift. This avoids duplicating navigation state across languages. If you’re weighing Swift on both platforms instead, see the Swift SDK for Android.

Where Censuus fits

A native-feeling iOS build helps your app hold up next to native competitors; being found brings people to your listing. Censuus ranks apps by the visits they draw, and adding your app is free on the List my app form. Placement comes from traffic and sponsorship: apps climb on the visits they draw, and a sponsor can pay to rise higher. For the iOS 26 icon side of Liquid Glass, see app icon sizes.

Frequently asked questions

Does Compose Multiplatform support Liquid Glass?

Not by drawing it in Compose. Liquid Glass is rendered by iOS for native tab bars, navigation bars and toolbars, so you host Compose screens inside native SwiftUI or UIKit navigation, or approximate the effect with a library.

Do I need to write Liquid Glass code?

No. JetBrains’ tutorial notes that iOS 26 applies Liquid Glass automatically to native TabView and NavigationStack views.

What do I need to build it?

Xcode 26 or later with the iOS 26 SDK. On older iOS versions, fall back to your full-Compose UI with an #available check.

Can I get Liquid Glass without SwiftUI?

Yes. Drive UITabBarController and UINavigationController from Kotlin with expect/actual coordinators; Liquid Glass applies to native bars whether they are declared in SwiftUI or UIKit.

Is there a working example?

Yes. The official KotlinConf app: its main branch is the full-Compose starting point and its lg-nav branch has the Liquid Glass navigation.

Guides for app developers

Put your app in the ranking

Censuus ranks apps by the visits they draw and by sponsorship, no bots. Listing is free; sponsorship raises placement.