O CrossFly é um framework open source (Apache 2.0) em que você escreve UI e lógica em Java puro e ele renderiza na GPU via LibGDX/OpenGL, compilando para binários nativos de Desktop (Windows, macOS e Linux), Android e iOS — mais uma build WebGL que roda em qualquer navegador moderno — Chrome, Firefox, Safari e outros. Combine com o CrossFly Sync para dados offline-first.
O Kotlin Multiplatform (KMP) é a tecnologia open source (Apache 2.0) da JetBrains para compartilhar código — lógica, rede, dados — entre Android, iOS, desktop e web, enquanto a UI fica nativa por plataforma. O Compose Multiplatform é o seu toolkit opcional de UI compartilhada (renderizado com Skia), estável no iOS desde maio de 2025.
As diferenças que realmente importam
Dois primos da JVM, duas apostas bem diferentes em linguagem, UI e ferramental.
É Kotlin-first, não Java
O código compartilhado do KMP é Kotlin. O Kotlin tem ótima interop com Java na JVM, mas Kotlin/Native (iOS) e Kotlin/Wasm são toolchains Kotlin — não “rode o seu Java existente”. Um time corporativo puramente Java precisa se comprometer com Kotlin como linguagem compartilhada.
O CrossFly mantém você em Java de ponta a ponta. Não há migração de linguagem para o time todo — seus desenvolvedores, bibliotecas e idiomas Java entram direto no app em toda plataforma.
A camada de interop no iOS tem perdas
No iOS, o Kotlin fala com o Swift só por uma ponte Objective-C gerada. É nessa tradução que moram as arestas: inteiros anuláveis viram boxed, sealed classes perdem o switch exaustivo, o Kotlin Flow vira callbacks desajeitados, genéricos colapsam para Any?. A correção idiomática da JetBrains, o Swift Export, ainda não está pronta.
O CrossFly tem um único caminho de renderização e lógica desenhado na GPU — não há fronteira Kotlin→Obj-C→Swift para atravessar, então nenhuma dessas perdas de interop aparece, para começar.
A UI compartilhada no iOS é jovem
Se você quer compartilhar também a UI, isso é o Compose Multiplatform — que só ficou estável no iOS em maio de 2025, com acessibilidade de campos de texto chegando ainda depois, e web/Wasm ainda em beta. É renderizado com Skia (não widgets nativos), então no iOS parece Material, não Cupertino.
O modelo de desenhar a própria UI do CrossFly é o framework inteiro, não uma camada recém-estabilizada — uma UI consistente em desktop e mobile desde o dia um. (Se você precisa da aparência nativa por plataforma, a opção de UI nativa do KMP é uma força real — veja a coluna de fair play.)
A matriz de build é o imposto
O KMP significa Gradle-multiplatform — que a própria JetBrains chama de “overwhelming” — mais a integração frágil com CocoaPods, um plugin de iOS que só funciona no macOS e compilações Kotlin/Native lentas. Espere atrito real de configuração e iteração, sobretudo no lado iOS.
O modelo de linguagem única e toolchain único do CrossFly mantém a história de build muito mais simples — menos peças móveis entre você e um app rodando nas três plataformas.
Onde o CrossFly se destaca
Onde o Kotlin Multiplatform é genuinamente forte
CrossFly vs Kotlin Multiplatform em resumo
| Dimensão | CrossFly | Kotlin Multiplatform |
|---|---|---|
| Linguagem | Java | Kotlin |
| Runtime | Binários nativos (herança JVM) | Binários nativos (Kotlin/Native, herança JVM) |
| O que é compartilhado | UI + lógica, um código só | Lógica por padrão; UI nativa ou via Compose MP |
| Modelo de UI | Uma UI na GPU em toda parte | Nativa por plataforma, ou Compose MP (Skia) |
| Maturidade da UI no iOS | Framework central | Compose MP iOS estável desde maio de 2025 |
| Interop no iOS | Um caminho, sem ponte ObjC | Ponte Kotlin↔Objective-C (Swift via camada gerada) |
| Build/ferramental | Toolchain JVM único | Gradle-multiplatform + CocoaPods; plugin iOS só no macOS |
| Offline-first | CrossFly Sync (bidirecional) | Montar a partir de bibliotecas |
| Desktop | Primeira classe (Win/mac/Linux) | Maduro via Compose for Desktop |
| Licença | Open source (Apache 2.0, Core) | Open source (Apache 2.0) |