Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Let’s get one thing straight: Kotlin Multiplatform (KMP) isn’t a framework; it’s a strategy. It’s about sharing the robust, type-safe heart of your application your business logic while letting iOS and Android teams craft flawless native UIs. But even the best strategy needs the right tools.
As someone who has architected multiple KMP projects, I can tell you that the ecosystem has matured from “promising” to “powerhouse.” The library support today is exceptional, stable, and backed by major players. Choosing the right ones is the difference between a smooth, scalable project and a maintenance nightmare.
This isn’t just a list of links. This is a curated guide to the libraries that form the solid foundation of a modern KMP application.

These are non negotiables. They are the bedrock upon which everything else is built.
kotlinx.coroutinesCategory: Asynchronous Programming
GitHub: github.com/Kotlin/kotlinx.coroutines
You simply cannot do modern KMP development without coroutines. This library provides the primitives for asynchronous programming, allowing you to write sequential-looking code that performs non blocking operations. It’s the standard for managing background tasks, concurrency, and data streams in your shared code.
Why it’s essential: Replaces callback hell with structured concurrency. It’s the idiomatic way to handle async operations in Kotlin.
kotlinx.serializationCategory: JSON Serialization/Deserialization
GitHub: github.com/Kotlin/kotlinx.serialization
The go to solution for converting Kotlin objects to and from JSON (and other formats like CBOR or Protobuf). It’s compile-time safe, meaning you get errors at compile time instead of runtime if you try to serialize something incorrectly.
Why it’s essential: High performance, no reflection, and seamless integration with HTTP clients like Ktor. It’s the perfect, type-safe partner for networking.
kotlinx.datetimeCategory: Date and Time
GitHub: github.com/Kotlin/kotlinx-datetime
Working with dates and times is notoriously difficult, especially across platforms. This library provides a set of multiplatform types for date and time operations, allowing you to share time related logic consistently without relying on the JVM’s java.time or writing platform-specific code.
Why it’s essential: Solves a common cross platform pain point with an official, well-designed solution.
This is where the community supercharges KMP development. These libraries are production-ready and widely adopted.
Category: Networking
GitHub: github.com/ktorio/ktor
Ktor is an asynchronous framework for creating connected applications. Its HTTP client is the undisputed champion for networking in KMP. It’s incredibly flexible, supports plugins (like JsonFeature for kotlinx.serialization), and is built on kotlinx.coroutines.
Why it’s essential: Feature-rich, coroutine-native, and the standard choice for all API communication.
Category: Local Storage / Database
GitHub: github.com/cashapp/sqldelight
SQLDelight generates type-safe Kotlin APIs from your SQL schemas. It’s not an ORM; it’s a code generator that lets you write SQL queries and gives you autocompleting, compile-time verified functions and data classes. It generates platform-specific code for Android (Android SQLite), iOS (Native SQLite), and JVM (e.g., for testing).
Why it’s essential: The best way to handle persistent, relational data storage in shared code. It’s robust, performant, and loved by developers who want the power of SQL with the safety of Kotlin.
Category: Asset & String Management
GitHub: github.com/icerockdev/moko-resources
This library allows you to share resources like strings, fonts, images, and files in your common code. It generates type-safe accessors, so you can’t accidentally reference a string that doesn’t exist. This ensures consistency in your app’s content across both platforms.
Why it’s essential: Crucial for maintaining a single source of truth for all user-facing strings and assets, a key tenet of efficient cross platform development.
Category: Logging
GitHub: github.com/AAkira/Napier
A multiplatform logging library with a simple API that supports different log levels, tags, and crash reporters. You can configure it to log to console on all platforms and easily plug in platform-specific loggers (like Logcat on Android) without touching your shared code.
Why it’s essential: Provides a unified, configurable logging strategy for your entire codebase, which is vital for debugging.
Category: Dependency Injection
GitHub: github.com/InsertKoinIO/koin
A pragmatic lightweight dependency injection framework. It’s purely written in Kotlin and offers full multiplatform support. If you prefer DI to manage your dependencies and facilitate testing, Koin is a fantastic and simple choice.
Why it’s essential: A familiar, easy-to-use DI solution for teams that want to manage dependencies in their shared module.
| Library | Category | Key Strength | Official |
|---|---|---|---|
kotlinx.coroutines | Async | Structured Concurrency | Yes |
kotlinx.serialization | Serialization | Type-safe, No Reflection | Yes |
Ktor Client | Networking | Flexible, Plugin System | No |
SQLDelight | Database | Type-safe SQL, Native Drivers | No |
Moko Resources | Resources | Shared Strings & Assets | No |
Napier | Logging | Unified Multiplatform API | No |
Koin | DI | Pragmatic, Lightweight | No |
When you find a new library, ask these questions:
android, iosArm64, iosSimulatorArm64, js?)Yes, absolutely. Both Koin and Kodein are popular choices. Koin tends to have a more “pragmatic” and simple API, while Kodein can be more explicit. The choice is often a matter of team preference.
koin-viewmodel or moko-mvvm?This is a powerful pattern. These libraries help you share your ViewModel classes (which hold state and logic) in common code. The native iOS and Android UI then just observes these shared ViewModels. I highly recommend exploring this architecture.
No. Room and Retrofit are Android-specific JVM libraries. This is precisely the problem KMP solves by providing multiplatform alternatives like SQLDelight and Ktor.
It’s different. The KMP ecosystem is more focused on foundational, infrastructure level libraries. You don’t need a library for every UI widget because you’re using native ones. The libraries that exist are typically high quality and solve critical, complex problems.
Start with the official JetBrains pillars (coroutines, serialization). Then, add Ktor for networking and SQLDelight for persistence. This combination will cover 95% of your shared logic needs for most applications.
The power of KMP is that you can start small. Maybe you just share your model classes and network layer first. Then, add your repository pattern. Then, your caching with SQLDelight. This incremental adoption is one of its greatest strengths. Choose your libraries wisely, and build a foundation that will scale.