Archives
All the Bits I've archived.
-
Safety Car: Coroutine Exception Handling in KMP
An uncaught coroutine exception crashes your KMP app on both platforms, and the platform safety nets don't extend to iOS. Here's how I build crash boundaries in commonMain.
-
Warm Tyres: Image Loading and Caching in Compose Multiplatform with Coil 3
Tyre warmers keep rubber at temperature so the car has grip the instant it leaves the box. Coil 3's memory and disk cache do the same for images β and the same code now runs on Android and iOS from commonMain.
-
Through the Lens: Barcode Scanning in Compose Multiplatform
expect/actual isn't just for business logic. Here's how to build a shared barcode scanner Composable that reads through any platform's lens.
-
Homologated: Publishing Your Kotlin Multiplatform Library to Maven Central
Before a race car can compete, it needs to be homologated. Before your KMP library can be used by anyone, it needs Maven Central.
-
The Pit Crew: Advanced Ktor Client Configuration for KMP
The pit crew doesn't wait to be asked. They intercept the car, do their work, and the driver rejoins the race. Ktor plugins work the same way: auth, logging, and retry all happen before your business logic sees a thing.
-
Every Commit on the Clock: CI/CD for Kotlin Multiplatform with GitHub Actions
In endurance racing every car carries a timing transponder: the circuit knows exactly where you are, every lap, every sector. This is how to put one on your KMP project.
-
KMP Splash: How I Stopped Opening Xcode for Splash Screens
The pit crew was always there. I just had to build it: a Gradle plugin that automates iOS and Android splash screen setup from a single config block.
-
Drop the Clutch: Three Metro DI Patterns Every KMP Developer Should Know
Metro drops the clutch on runtime DI errors. Three patterns in a real KMP app: binding contributions, platform graphs, and child scopes.
-
The Clean Line: Swift Export for KMP
Objective-C headers turned your Kotlin enums into class wrappers and your function signatures into noise. Swift Export sends the same data over a cleaner channel.
-
KMP Modularization: From Layers to Features
Why organising your garage by components is slowing down your pit stops.
-
Program Your Pit Wall: Custom Gemini Commands in Android Studio
A pit wall crew knows exactly what to do without being told from scratch. Custom Gemini commands work the same way.
-
Clean Lap: UI Testing in Compose Multiplatform
Before the car hits the grid, telemetry confirms every sector. Before your UI ships, runComposeUiTest confirms every composable.
-
Smooth Handoff
Navigation 3 supports shared element transitions. It always did. LocalNavAnimatedContentScope was the piece the docs never mentioned.
-
Do You Really Need a Pit Wall?
The intermediary between your app and the database never disappeared. It just stopped being your problem.
-
The White Lines: Enforcing Design System Rules with Detekt
Track limits don't stop you from going wide. They penalise you for it. Custom Detekt rules work the same way.
-
Crossing the Finish Line: StateFlow & SharedFlow in Kotlin Multiplatform
StateFlow is your lap timer β always showing the latest lap. SharedFlow is the race radio β you only hear what's broadcasted while you're tuned in.
-
Under the Hood: How Compose and SwiftUI Handle What Happens Off-Screen
Same engine, different cockpit: how Compose and SwiftUI handle side effects when sharing a Kotlin Multiplatform ViewModel.
-
Master Compose Shared Element Transitions: A Smooth UI Journey
Building fluid, reliable shared element transitions in real-world Compose apps
-
π A Christmas Checklist for Kotlin Multiplatform Projects π
What Is Really Worth Sharing
-
Testing Jetpack Compose UI on the JVM: The Discovery That Changed My Workflow
How Robolectric Made Compose UI Tests Fast and CI Friendly
-
π§© Koin Injection on iOS Without Reified Crashes: A Clean KMM Pattern
Tired of Koin blowing up on iOS because of reified generics? Hereβs the definitive fix. Clean, type-safe, Swift-friendly. No crashes, no leaks, no nonsense.
-
π Cross-Platform Notifications with KMP β All in Kotlin!
All logic, all flows, all platform calls are written in Kotlin.
-
π Exploring Multi-Layer Navigation in Jetpack Compose with Navigation 3
A simple, clean, and shows how to combine multiple NavDisplays in a way that scales beautifully as your app grows.
-
No, Emitting Loading State from the Repository Doesnβt Make You a Junior Dev
Why handling loading in your repository isnβt bad architecture, itβs actually a sign of experience and clean design.
-
Sleeping But Working: Cross-Platform Background Sync with KMP
How to keep your app busy while your users (and you) sleep.
-
π§ How Talking to Myself, Vanilla PHP, and an Ice Cream Led Me to Kotlin Multiplatform π
A funny and honest story about bugs, PHP, and how one vanilla ice cream helped me realize that talking to myself was actually my greatest debugging tool.
-
NetFlow Part 1: Why I Took the Leap from Android-Only to Kotlin Multiplatform
A real-world story of how one Android-first library became a Kotlin Multiplatform (KMP) journey.
-
π¨ iOS 26βs Liquid Glass Is a Game-Changer for Kotlin Multiplatform β And a Wake-Up Call for Flutter
A stunning leap in visual design that only native apps truly get to experience.
-
Ktorfit + Kotlin Multiplatform: Retrofit-like Networking for KMP Apps
Bring Retrofitβs simplicity to Kotlin Multiplatform with Ktorfit β type-safe networking that just works everywhere.
-
Flutter vs Kotlin Multiplatform: KMP with SwiftUI β Native Code with Kotlin Brain
Differences between KMP and Flutter
-
π§© Injecting Fun: KMP + Koin Annotations Made Easy
Koin Annotations on Compose Multiplatform
-
π Good News for Kotlin Multiplatform Devs: It Just Got Way Easier!
If youβve been curious about Kotlin Multiplatform (KMP) or already building cross-platform apps, Iβve got some great news for you.