CrossFly es un framework open source (Apache 2.0) en el que escribes UI y lógica en Java puro y renderiza en la GPU mediante LibGDX/OpenGL, compilando a binarios nativos para Desktop (Windows, macOS y Linux), Android e iOS — más una build WebGL que corre en cualquier navegador moderno — Chrome, Firefox, Safari y otros. Combínalo con CrossFly Sync para datos offline-first.
Kotlin Multiplatform (KMP) es la tecnología open source (Apache 2.0) de JetBrains para compartir código — lógica, red, datos — entre Android, iOS, desktop y web, mientras la UI permanece nativa por plataforma. Compose Multiplatform es su toolkit opcional de UI compartida (renderizado con Skia), estable en iOS desde mayo de 2025.
Las diferencias que realmente importan
Dos primos de la JVM, dos apuestas muy distintas en lenguaje, UI y herramientas.
Es Kotlin-first, no Java
El código compartido de KMP es Kotlin. Kotlin tiene una gran interop con Java sobre la JVM, pero Kotlin/Native (iOS) y Kotlin/Wasm son toolchains Kotlin — no «ejecuta tu Java existente». Un equipo corporativo puramente Java tiene que comprometerse con Kotlin como su lenguaje compartido.
CrossFly te mantiene en Java de punta a punta. No hay migración de lenguaje para todo el equipo — tus desarrolladores, bibliotecas e idiomatismos Java entran directo en la app en toda plataforma.
La capa de interop en iOS tiene pérdidas
En iOS, Kotlin habla con Swift solo mediante un puente Objective-C generado. Es en esa traducción donde viven las aristas: los enteros anulables acaban boxed, las sealed classes pierden el switch exhaustivo, el Kotlin Flow se vuelve callbacks torpes, los genéricos colapsan a Any?. El arreglo idiomático de JetBrains, Swift Export, todavía no está listo.
CrossFly tiene una única ruta de renderizado y lógica dibujada en la GPU — no hay frontera Kotlin→Obj-C→Swift que cruzar, así que ninguna de esas pérdidas de interop aparece, para empezar.
La UI compartida en iOS es joven
Si quieres compartir también la UI, eso es Compose Multiplatform — que solo alcanzó estabilidad en iOS en mayo de 2025, con la accesibilidad de campos de texto llegando aún después, y web/Wasm todavía en beta. Está renderizado con Skia (no widgets nativos), así que en iOS parece Material, no Cupertino.
El modelo de dibujar tu propia UI de CrossFly es el framework entero, no una capa recién estabilizada — una UI consistente en desktop y móvil desde el día uno. (Si necesitas apariencia nativa por plataforma, la opción de UI nativa de KMP es una fortaleza real — mira la columna de fair play.)
La matriz de build es el impuesto
KMP significa Gradle-multiplatform — que la propia JetBrains califica de «overwhelming» — más la integración frágil con CocoaPods, un plugin de iOS que solo funciona en macOS y compilaciones Kotlin/Native lentas. Espera fricción real de configuración e iteración, sobre todo en el lado iOS.
El modelo de lenguaje único y toolchain único de CrossFly mantiene la historia de build mucho más simple — menos piezas móviles entre tú y una app corriendo en las tres plataformas.
Dónde CrossFly toma la delantera
Dónde Kotlin Multiplatform es genuinamente fuerte
CrossFly vs Kotlin Multiplatform de un vistazo
| Dimensión | CrossFly | Kotlin Multiplatform |
|---|---|---|
| Lenguaje | Java | Kotlin |
| Runtime | Binarios nativos (herencia JVM) | Binarios nativos (Kotlin/Native, herencia JVM) |
| Qué se comparte | UI + lógica, un solo código | Lógica por defecto; UI nativa o vía Compose MP |
| Modelo de UI | Una UI en la GPU en todas partes | Nativa por plataforma, o Compose MP (Skia) |
| Madurez de la UI en iOS | Framework central | Compose MP iOS estable desde mayo de 2025 |
| Interop en iOS | Un camino, sin puente ObjC | Puente Kotlin↔Objective-C (Swift vía capa generada) |
| Build/herramientas | Toolchain JVM único | Gradle-multiplatform + CocoaPods; plugin iOS solo en macOS |
| Offline-first | CrossFly Sync (bidireccional) | Ensamblar a partir de bibliotecas |
| Desktop | Primera clase (Win/mac/Linux) | Maduro vía Compose for Desktop |
| Licencia | Open source (Apache 2.0, Core) | Open source (Apache 2.0) |