Comment un projet Kotlin couvre Android, iOS, le Web, Wear OS et les agents IA
Lorsqu'il s'agit de démontrer les capacités de Kotlin Multiplatform en code réel, il est facile de se perdre dans des architectures complexes et des dizaines de couches d'abstraction. John O'Reilly a adopté une approche différente. Il a choisi une tâche simple : afficher une liste de personnes en orbite et les coordonnées de l'ISS. Le résultat est un exemple clair de la façon dont un seul module de logique métier fonctionne sur une douzaine de plateformes différentes.
Le projet a été intégré dans la documentation officielle de Kotlin et la Google Dev Library. Décortiquons la structure de tout cela et pourquoi ce code source constitue un bac à sable pratique.
De quoi parle ce projet
L'application récupère des données auprès de deux sources ouvertes. La liste des astronautes avec leurs biographies provient de l'API The Space Devs, tandis que les coordonnées de l'ISS sont extraites via l'API Open Notify. Pour éviter que les clients n'accèdent directement aux services tiers, le dépôt inclut un petit backend Ktor.
L'idée principale ici est la déduplication du code. La logique métier, les requêtes réseau, la mise en cache et les modèles de données sont écrits une seule fois dans un module partagé common. Ce code se connecte ensuite aux clients ciblant toutes sortes de systèmes d'exploitation et d'écrans différents.
La liste des cibles prises en charge comprend :
- Smartphones Android et widgets d'écran d'accueil utilisant l'API Glance
- Application iOS construite avec SwiftUI
- Montres connectées sous Wear OS
- Version desktop via Compose for Desktop
- Client web utilisant Kotlin/Wasm
- Composant côté serveur avec Ktor
- Serveur MCP pour la connexion aux clients IA
Ce qui se cache sous le capot du module partagé
Le module common gère toute la plomberie. Il utilise des bibliothèques familières aux développeurs Kotlin :
- Ktor Client gère les requêtes réseau
- SQLDelight s'occupe du stockage de la base de données locale
- Koin gère l'injection de dépendances
- Kotlinx Serialization analyse le JSON
Compose Multiplatform et la bibliothèque SKIE gèrent la communication avec l'UI. Cette dernière simplifie considérablement le travail avec Swift en traduisant les coroutines et Flow en concepts async que les développeurs iOS comprennent.
class PeopleInSpaceViewModel(
private val peopleInSpaceRepository: PeopleInSpaceRepositoryInterface
) : KMMViewModel() {
val peopleInSpace: StateFlow<List<Assignment>> =
peopleInSpaceRepository.fetchPeopleAsFlow()
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
}
Grâce à cette séparation, les clients de plateforme restent minces. Ils ne gèrent que le rendu de l'UI et les événements tactiles utilisateur.
Des montres connectées au navigateur Web
Chaque client du dépôt est structuré comme un module séparé. Cela facilite la compréhension rapide de la façon dont une technologie spécifique s'intègre avec le code KMP partagé.
L'application Android est construite avec Jetpack Compose. À côté se trouve le module wearApp, où l'interface est adaptée aux écrans ronds de montres via Compose for Wear OS. Vous y trouverez également un widget d'écran d'accueil fonctionnel pour Android écrit avec l'API Glance.
Pour iOS, l'auteur propose deux chemins : une interface SwiftUI classique ou du code Compose partagé. Le choix appartient au développeur.
La version navigateur est construite avec Kotlin/Wasm. La compilation s'exécute via une tâche Gradle standard, produisant un frontend fonctionnel sans avoir besoin d'écrire de JavaScript.
Connexion à Claude Desktop via MCP
L'une des dernières nouveautés du dépôt est le module mcp-server. L'auteur a implémenté un serveur utilisant le Model Context Protocol avec le SDK MCP Kotlin officiel.
L'idée est que le même module common contenant la logique métier et la couche réseau est intégré dans une application console. Cette application expose des outils pour l'intelligence artificielle. En exécutant le serveur local, vous pouvez le connecter à Claude Desktop ou à un autre assistant.
La configuration pour Claude Desktop ressemble à ceci :
{
"mcpServers": {
"kotlin-peopleinspace": {
"command": "java",
"args": [
"-jar",
"/path/to/repo/mcp-server/build/libs/serverAll.jar",
"--stdio"
]
}
}
}
Après cela, le réseau neuronal obtient un accès direct à la fonction de récupération de données et peut répondre aux questions sur les cosmonautes en extrayant des informations fraîches de votre code KMP.

Pourquoi consulter ce dépôt
Le dépôt PeopleInSpace est précieux non pas pour l'ampleur de son code, mais pour sa pile technologique à jour. L'auteur met constamment à jour les versions de Kotlin, Gradle, Compose et des bibliothèques associées.
Le projet constitue une bonne référence si vous envisagez de :
- Évaluer combien de code vous pouvez réellement réutiliser entre Android et iOS.
- Voir Kotlin/Wasm fonctionner dans un navigateur en pratique.
- Comprendre comment SKIE fonctionne lors du passage de flux de données à Swift.
- Apprendre à construire des serveurs MCP avec Kotlin.
Pour commencer, il suffit de cloner le dépôt, de l'ouvrir dans une nouvelle version d'Android Studio et d'exécuter la tâche Gradle souhaitée.
Projets similaires