Come un progetto Kotlin copre Android, iOS, Web, Wear OS e agenti AI
Quando devi dimostrare le capacità di Kotlin Multiplatform con codice reale, è facile perdersi in architetture complesse e dozzine di livelli di astrazione. John O'Reilly ha adottato un approccio diverso. Ha scelto un compito semplice: mostrare una lista di persone in orbita e le coordinate della ISS. Il risultato è un esempio chiaro di come un singolo modulo di logica di business funzioni su una dozzina di piattaforme diverse.
Il progetto è stato incluso nella documentazione ufficiale di Kotlin e nella Google Dev Library. Analizziamo come è strutturato tutto e perché questo codebase rappresenta una sandbox pratica.
Di cosa tratta il progetto
L'app recupera i dati da due fonti aperte. La lista degli astronauti con le biografie arriva da The Space Devs API, mentre le coordinate della ISS vengono recuperate tramite l'Open Notify API. Per evitare che i client accedano direttamente ai servizi di terze parti, il repository include un piccolo backend Ktor.
L'idea principale è la deduplicazione del codice. La logica di business, le richieste di rete, la cache e i modelli dati vengono scritti una sola volta in un modulo condiviso common. Questo codice si connette poi ai client che puntano a diversi sistemi operativi e schermi.
La lista dei target supportati include:
- Smartphone Android e widget per la schermata home usando Glance API
- App iOS costruita con SwiftUI
- Smartwatch con Wear OS
- Versione desktop tramite Compose for Desktop
- Client web usando Kotlin/Wasm
- Componente server-side con Ktor
- Server MCP per connettersi ai client AI
Cosa c'è sotto il cofano del modulo condiviso
Il modulo common gestisce tutto il boilerplate. Utilizza librerie familiari agli sviluppatori Kotlin:
- Ktor Client gestisce le richieste di rete
- SQLDelight gestisce l'archiviazione del database locale
- Koin gestisce l'iniezione delle dipendenze
- Kotlinx Serialization analizza i JSON
Compose Multiplatform e la libreria SKIE gestiscono la comunicazione con l'UI. Quest'ultima semplifica notevolmente il lavoro con Swift traducendo le coroutine e Flow in concetti async che gli sviluppatori iOS comprendono.
class PeopleInSpaceViewModel(
private val peopleInSpaceRepository: PeopleInSpaceRepositoryInterface
) : KMMViewModel() {
val peopleInSpace: StateFlow<List<Assignment>> =
peopleInSpaceRepository.fetchPeopleAsFlow()
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
}
Grazie a questa separazione, i client delle piattaforme restano leggeri. Si occupano solo del rendering dell'interfaccia utente e della gestione degli eventi touch.
Dagli smartwatch al browser web
Ogni client nel repository è strutturato come un modulo separato. Questo rende facile capire rapidamente come una tecnologia specifica si integra con il codice KMP condiviso.
L'app Android è costruita con Jetpack Compose. Accanto si trova il modulo wearApp, dove l'interfaccia è adattata per gli schermi tondi degli smartwatch usando Compose for Wear OS. Troverai anche un widget funzionante per la schermata home Android scritto con la Glance API.
Per iOS, l'autore offre due percorsi: un'interfaccia classica SwiftUI o codice Compose condiviso. La scelta spetta allo sviluppatore.
La versione browser è costruita con Kotlin/Wasm. La build viene eseguita tramite un task Gradle standard, producendo un frontend funzionante senza bisogno di scrivere JavaScript.
Connessione a Claude Desktop tramite MCP
Una delle aggiunte più recenti al repository è il modulo mcp-server. L'autore ha implementato un server usando il Model Context Protocol con l'SDK MCP Kotlin ufficiale.
L'idea è che lo stesso modulo common con la logica di business e il layer di rete viene integrato in un'applicazione console. Questa applicazione espone strumenti per l'intelligenza artificiale. Avviando il server locale, puoi connetterlo a Claude Desktop o a un altro assistente.
La configurazione per Claude Desktop si presenta così:
{
"mcpServers": {
"kotlin-peopleinspace": {
"command": "java",
"args": [
"-jar",
"/path/to/repo/mcp-server/build/libs/serverAll.jar",
"--stdio"
]
}
}
}
Dopodiché, la rete neurale ottiene accesso diretto alla funzione di recupero dati e può rispondere a domande sui cosmonauti prelevando informazioni aggiornate dal tuo codice KMP.

Perché consultare questo repository
Il repository PeopleInSpace è prezioso non per la dimensione del suo codice, ma per lo stack tecnologico aggiornato. L'autore aggiorna costantemente le versioni di Kotlin, Gradle, Compose e le librerie correlate.
Il progetto rappresenta un buon riferimento se stai pianificando di:
- Valutare quanto codice puoi effettivamente riutilizzare tra Android e iOS.
- Vedere Kotlin/Wasm in azione in un browser.
- Capire come funziona SKIE quando si passano stream di dati a Swift.
- Imparare come vengono costruiti i server MCP con Kotlin.
Per iniziare, basta clonare il repository, aprirlo in una versione fresca di Android Studio ed eseguire il task Gradle desiderato.
Progetti correlati