Programing
Compose Multiplatform 1.10.0 Released: Stable Hot Reload and Navigation 3 for KMP
Published:
•
Duration: 6:47
0:00
0:00
Transcript
Host: Hey everyone, welcome back to Allur! I’m your host, Alex Chan. Today, we are diving deep into the world of mobile development—specifically, a massive milestone in the Kotlin ecosystem. You know, for the longest time, the "holy grail" of development has been this idea of "write once, run anywhere." But let’s be real... usually, that comes with a catch. You either sacrifice performance, or the developer experience is just... well, painful.
Host: I am so excited to welcome Marcus Thorne to the show. Marcus is a Lead Mobile Architect who’s spent the last decade navigating the worlds of Android, iOS, and more recently, transitionary frameworks. He’s been a massive advocate for Kotlin in the enterprise space and has been beta-testing these 1.10.0 features for the last few months. Marcus, it is so good to have you on Allur!
Guest: Thanks, Alex! It’s great to be here. Honestly, I’ve been waiting for a release like 1.10.0 for a long time. It feels like the "adult" version of Compose Multiplatform has finally arrived, you know?
Host: I love that—"the adult version." Because for a while, it did feel like a very cool science project, right? But with this release, JetBrains seems to be saying, "Okay, the proof of concept is over. Let’s build real things." What was your first impression when you saw the changelog for 1.10.0?
Guest: You hit the nail on the head. My first thought was "Finally, they fixed the friction." Like, we’ve always known KMP was powerful for sharing logic—you know, your networking, your database, your business rules. But the UI layer, the "Compose" part of Compose Multiplatform, always felt just a little bit behind the native tooling in terms of speed. With 1.10.0, it’s like they looked at every single thing that made developers sigh during the workday and said, "Let’s fix that." Especially with Hot Reload and Navigation. It’s a maturity play.
Host: Let’s talk about that "sigh." One of the biggest ones is definitely the iteration loop. Can we talk about Stable Hot Reload? I mean, we’ve had versions of this before, but it always felt... flaky? How is it different now that it's "Stable"?
Guest: Oh, man. Flaky is a polite word for it! Before 1.10.0, if you changed a single line of UI code, you’d often pray that the state wouldn't reset. You’d be five screens deep into a checkout flow, you’d change a button color, and—boom—the app restarts, and you're back at the login screen. It was infuriating.
Host: That is huge. I mean, if you're saving even 30 seconds every time you want to see a change, that adds up to hours over a week. But... I have to ask, does it actually work on iOS? Because that’s always the sticking point, right?
Guest: Actually, yeah! That’s the "aha" moment for me. Seeing it work seamlessly across Desktop and iOS without having to jump back into Xcode or wait for that heavy LLVM compilation... it’s a massive productivity boost. It makes the "shared core plus native UI" philosophy actually feel like a benefit rather than a chore.
Host: Speaking of things that used to be a chore... Navigation. I’ve heard so many developers complain that KMP navigation was the "Wild West." You either had to use a third-party library or build your own platform-specific wrappers. Now we have Navigation 3. What’s the big deal with this new API?
Guest: Okay, so Navigation 3 is probably the most "architectural" win in this release. Historically, navigation in Compose—especially coming from the Android side—relied a lot on string-based routing. You’d have these long strings like `"/profile/{userId}"`, and if you made a typo? Too bad, your app crashes at runtime.
Host: Wait, so it catches the error before you even run the app?
Guest: Exactly! And it handles the "multi-stack" problem, too. You know how on iOS, you have those bottom tabs, and if you're deep in a "Settings" tab and you click "Home" and then click back to "Settings," you expect to be exactly where you left off?
Host: Right, it should save your spot.
Guest: Exactly. Doing that in a cross-platform way used to be a nightmare. Navigation 3 makes that a first-class citizen. It integrates deeply with the Compose lifecycle. It’s basically JetBrains saying, "We’re providing the skeleton of your app now, not just the muscles."
Host: That sounds like it’s going to make life so much easier for teams trying to scale. And that leads me to my next thought—the "Enterprise" side of things. We’re seeing Google get much more vocal about recommending KMP. Do you think 1.10.0 is the version that finally convinces the skeptical CTO to move away from fully native development?
Guest: I really think it is. For a long time, the risk was "What if JetBrains stops supporting this?" or "What if it can't handle high-performance UI?" But now you have Google backing it, and you have this release that focuses on stability.
Host: It really feels like the "standard-bearer" for mobile development right now. But, okay, let’s get real for a second—is there a catch? If I’m a dev and I want to upgrade to 1.10.0 today, what’s going to be my biggest headache?
Guest: (Laughs) Well, there’s always a little bit of homework! To get to 1.10.0, you’re going to need to be on Kotlin 2.1.x, so there’s some Gradle plugin alignment you’ll have to do. And honestly, the migration to Navigation 3 is where the work is. If you have a massive app with a custom navigation setup, refactoring that to the new type-safe API is going to take some focused effort. It’s worth it, but don’t expect to just "flip a switch" and be done by lunch.
Host: Fair enough! No such thing as a free lunch in software engineering, right?
Guest: Never! But I will say, the documentation this time around is actually excellent. JetBrains has put out these migration guides that are very clear. It’s a far cry from the early days where you had to find a random thread on a Slack channel to figure out why your build was failing.
Host: That is so encouraging to hear. Before we wrap up, Marcus, where do you see KMP going from here? If 1.10.0 is the "maturity" release, what’s next on the horizon?
Guest: I think we’re going to see even deeper platform integration. I’m looking at things like iOS widgets and watchOS support getting more "first-party" treatment. Now that the core UI and navigation are stable, I think the ecosystem of libraries is going to explode. We’re going to see more "Compose-first" libraries for things like maps, camera, and biometrics that just work across all platforms. The era of compromising is definitely over.
Host: "The era of compromising is over." I love that. Marcus, thank you so much for coming on and breaking this down for us.
Guest: I’m mostly active on LinkedIn and GitHub—just search for Marcus Thorne. I’ll be posting some sample projects using the new Navigation 3 API later this week!
Host: Perfect. Thanks again, Marcus! And thanks to all of you for tuning into Allur. If you enjoyed this episode, don’t forget to subscribe and leave us a review. It really helps the show. We’ll be back next week talking about some interesting shifts in the Go ecosystem, so stay tuned. Until then, happy coding!
Tags
mobile development
kotlin multiplatform
compose multiplatform
ios
android
kotlin
productivity