Como Um Projeto Kotlin Cobre Android, iOS, Web, Wear OS e Agentes de IA
Quando você precisa demonstrar as capacidades do Kotlin Multiplatform em código real, é fácil se perder em arquiteturas complexas e dezenas de camadas de abstração. John O'Reilly adotou uma abordagem diferente. Ele escolheu uma tarefa simples: exibir uma lista de pessoas em órbita e coordenadas da ISS. O resultado é um exemplo claro de como um único módulo de lógica de negócio funciona em uma dúzia de plataformas diferentes.
O projeto entrou na documentação oficial do Kotlin e na Google Dev Library. Vamos analisar como tudo está estruturado e por que este código-fonte serve como um sandbox conveniente.
Sobre o Que é o Projeto
O app busca dados de duas fontes abertas. A lista de astronautas com biografias vem da API The Space Devs, enquanto as coordenadas da ISS são obtidas através da API Open Notify. Para evitar que os clientes acessem serviços de terceiros diretamente, o repositório inclui um pequeno backend em Ktor.
A ideia principal aqui é a deduplicação de código. A lógica de negócio, requisições de rede, cache e modelos de dados são escritos uma única vez em um módulo compartilhado common. Esse código então se conecta a clientes direcionados a vários sistemas operacionais e telas diferentes.
A lista de alvos suportados inclui:
- Smartphones Android e widgets de tela inicial usando a API Glance
- Aplicativo iOS construído com SwiftUI
- Relógios inteligentes rodando Wear OS
- Versão desktop via Compose for Desktop
- Cliente web usando Kotlin/Wasm
- Componente server-side com Ktor
- Servidor MCP para conectar a clientes de IA
O Que Está Por Trás do Módulo Compartilhado
O módulo common cuida de todo o boilerplate. Ele usa bibliotecas familiares para desenvolvedores Kotlin:
- Ktor Client gerencia requisições de rede
- SQLDelight cuida do armazenamento local no banco de dados
- Koin gerencia injeção de dependência
- Kotlinx Serialization faz o parsing de JSON
Compose Multiplatform e a biblioteca SKIE lidam com a comunicação com a UI. Esta última simplifica significativamente o trabalho com Swift ao traduzir coroutines e Flow em conceitos async que desenvolvedores iOS entendem.
class PeopleInSpaceViewModel(
private val peopleInSpaceRepository: PeopleInSpaceRepositoryInterface
) : KMMViewModel() {
val peopleInSpace: StateFlow<List<Assignment>> =
peopleInSpaceRepository.fetchPeopleAsFlow()
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
}
Graças a essa separação, os clientes de plataforma permanecem leves. Eles lidam apenas com a renderização da UI e eventos de toque do usuário.
Dos Smartwatches ao Navegador Web
Cada cliente no repositório é estruturado como um módulo separado. Isso facilita a compreensão rápida de como uma tecnologia específica se integra com o código KMP compartilhado.
O app Android é construído com Jetpack Compose. Ao lado dele está o módulo wearApp, onde a interface é adaptada para telas redondas de relógio usando Compose for Wear OS. Você também encontrará um widget funcional de tela inicial para Android escrito com a API Glance.
Para iOS, o autor oferece dois caminhos: uma interface clássica em SwiftUI ou código Compose compartilhado. A escolha é do desenvolvedor.
A versão do navegador é construída com Kotlin/Wasm. O build é executado via uma tarefa Gradle padrão, produzindo um frontend funcional sem precisar escrever nenhum JavaScript.
Conectando ao Claude Desktop via MCP
Uma das adições mais recentes ao repositório é o módulo mcp-server. O autor implementou um servidor usando o Model Context Protocol com o SDK MCP Kotlin oficial.
A ideia é que o mesmo módulo common com lógica de negócio e a camada de rede é incorporado em uma aplicação console. Essa aplicação expõe ferramentas para inteligência artificial. Ao executar o servidor local, você pode conectá-lo ao Claude Desktop ou outro assistente.
A configuração para o Claude Desktop fica assim:
{
"mcpServers": {
"kotlin-peopleinspace": {
"command": "java",
"args": [
"-jar",
"/path/to/repo/mcp-server/build/libs/serverAll.jar",
"--stdio"
]
}
}
}
Após isso, a rede neural obtém acesso direto à função de busca de dados e pode responder perguntas sobre cosmonautas buscando informações atualizadas do seu código KMP.

Por Que Conferir Este Repositório
O repositório PeopleInSpace é valioso não pelo tamanho do seu código, mas pelo stack tecnológico atualizado. O autor atualiza constantemente as versões de Kotlin, Gradle, Compose e bibliotecas relacionadas.
O projeto é uma boa referência se você está planejando:
- Avaliar quanto código você realmente pode reutilizar entre Android e iOS.
- Ver o Kotlin/Wasm funcionando na prática em um navegador.
- Entender como o SKIE funciona ao passar streams de dados para Swift.
- Aprender como servidores MCP são construídos com Kotlin.
Para começar, basta clonar o repositório, abrir em uma versão nova do Android Studio e executar a tarefa Gradle desejada.
Projetos relacionados