Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kotlin Multiplatform más allá del móvil: Backen...

Kotlin Multiplatform más allá del móvil: Backend, Web y Escritorio

Kotlin Multiplatform ha demostrado ser una herramienta poderosa para el desarrollo móvil, pero sus capacidades van mucho más allá. En esta charla, exploraremos cómo Kotlin Multiplatform está transformando el desarrollo de software al permitir la reutilización de código en backend, web y aplicaciones de escritorio.

Comenzaremos con una visión general de cómo Kotlin Multiplatform facilita la creación de aplicaciones verdaderamente multiplataforma, compartiendo lógica de negocio y reduciendo la duplicación de código. A continuación, profundizaremos en casos de uso específicos para cada plataforma.

Descubre cómo Kotlin Multiplatform puede expandir tus horizontes de desarrollo, permitiéndote crear aplicaciones robustas y eficientes que operan sin problemas en múltiples plataformas.

Antonio Leiva

April 08, 2025
Tweet

More Decks by Antonio Leiva

Other Decks in Programming

Transcript

  1. 📅 Agenda 1. ­ 🤔 ¿Qué es Kotlin Multiplatform? 2.

    ­ 🌐 Más allá del móvil: Web, Desktop y Backend
  2. 📅 Agenda 1. ­ 🤔 ¿Qué es Kotlin Multiplatform? 2.

    ­ 🌐 Más allá del móvil: Web, Desktop y Backend 3. ­ 📚 Ecosistema de Librerías
  3. 📅 Agenda 1. ­ 🤔 ¿Qué es Kotlin Multiplatform? 2.

    ­ 🌐 Más allá del móvil: Web, Desktop y Backend 3. ­ 📚 Ecosistema de Librerías 4. ­ 🚀 Demo y Conclusiones
  4. 🤔 1. ¿Qué es Kotlin Multiplatform? Permite escribir código en

    Kotlin para múltiples plataformas Cada target puede tener su propia implementación Decidimos hasta dónde vamos a compartir el código
  5. 🤔 1. ¿Qué es Kotlin Multiplatform? Targets soportados: JVM /

    Android Native (iOS, macOS, Linux, Windows, etc.) JS / WASM (Browser, Node.js)
  6. 🤔 1. ¿Qué es Kotlin Multiplatform? // Common expect class

    PlatformConfiguration { fun getPlatformName(): String } // Android actual class PlatformConfiguration { actual fun getPlatformName(): String = "Android" } // iOS actual class PlatformConfiguration { actual fun getPlatformName(): String = "iOS" }
  7. 🌐 2. Más allá del móvil: Web, Desktop y Backend

    2.1. 🌐 Web 2.2 💻 Desktop 2.3 📦 Backend
  8. 🌐 2.1 Web con Kotlin Multiplatform ¿Qué es Kotlin/JS? ­

    Transpila código Kotlin a JavaScript ­ Permite usar Kotlin en navegadores web
  9. 🌐 2.1 Web con Kotlin Multiplatform ¿Qué es Kotlin/JS? ­

    Transpila código Kotlin a JavaScript ­ Permite usar Kotlin en navegadores web ­ Interoperabilidad con librerías JavaScript existentes
  10. 🌐 2.1 Web con Kotlin Multiplatform Ventajas: ­ Tipos estáticos

    y null-safety ­ Corrutinas para asincronía
  11. 🌐 2.1 Web con Kotlin Multiplatform Ventajas: ­ Tipos estáticos

    y null-safety ­ Corrutinas para asincronía ­ DSLs para HTML y CSS
  12. 🌐 2.1 Web con Kotlin Multiplatform Ventajas: ­ Tipos estáticos

    y null-safety ­ Corrutinas para asincronía ­ DSLs para HTML y CSS ­ Acceso al DOM tipado
  13. 🌐 2.1 Web con Kotlin Multiplatform Ventajas: ­ Tipos estáticos

    y null-safety ­ Corrutinas para asincronía ­ DSLs para HTML y CSS ­ Acceso al DOM tipado ­ Dependencias de Node (con npm)
  14. 🌐 2.1 Web con Kotlin Multiplatform import kotlinx.browser.document fun main()

    { document .getElementById("my-element") ?.textContent = "Hello, Kotlin/JS!" val email = document.getElementById("email") as HTMLInputElement email.value = "[email protected]" }
  15. 🌐 2.1 Web con Kotlin Multiplatform Entornos de ejecución: ­

    Browser: para desarrollo de clientes web
  16. 🌐 2.1 Web con Kotlin Multiplatform Entornos de ejecución: ­

    Browser: para desarrollo de clientes web ­ Node.js: para ejecutar código JavaScript fuera del navegador
  17. 🌐 2.1 Web con Kotlin Multiplatform kotlin { js {

    browser { // Configuración para navegador } nodejs { // Configuración para Node.js } } }
  18. 🌐 2.1 Web con Kotlin Multiplatform Interoperabilidad con JavaScript: ­

    Uso de js() para código JavaScript directo ­ Modificador external para APIs nativas
  19. 🌐 2.1 Web con Kotlin Multiplatform Interoperabilidad con JavaScript: ­

    Uso de js() para código JavaScript directo ­ Modificador external para APIs nativas ­ Tipo dynamic para sistemas no tipados
  20. 🌐 2.1 Web con Kotlin Multiplatform external fun alert(message: Any?):

    Unit external class Node { val firstChild: Node fun append(child: Node): Node fun removeChild(child: Node): Node } external val window: Window
  21. 🌐 2.1 Web con Kotlin Multiplatform Kotlin/WASM (Alpha) ­ Nuevo

    target para WebAssembly ­ Soporte para Compose Multiplatform
  22. 🌐 2.1 Web con Kotlin Multiplatform Kotlin/WASM (Alpha) ­ Nuevo

    target para WebAssembly ­ Soporte para Compose Multiplatform ­ Reutilización de código entre plataformas
  23. 💻 2.2 Desktop con Kotlin Multiplatform Targets soportados: Framework principal:

    ­ Windows (x64) ­ macOS (x64, arm64) ­ Linux (x64, arm64)
  24. 💻 2.2 Desktop con Kotlin Multiplatform Targets soportados: Framework principal:

    ­ Windows (x64) ­ macOS (x64, arm64) ­ Linux (x64, arm64) ­ Compose Multiplatform
  25. 💻 2.2 Desktop con Kotlin Multiplatform Compose Multiplatform ­ UI

    declarativa moderna ­ Compartir código con Android/iOS
  26. 💻 2.2 Desktop con Kotlin Multiplatform Compose Multiplatform ­ UI

    declarativa moderna ­ Compartir código con Android/iOS ­ Material Design 3
  27. 💻 2.2 Desktop con Kotlin Multiplatform Compose Multiplatform ­ UI

    declarativa moderna ­ Compartir código con Android/iOS ­ Material Design 3 ­ Hot Reload
  28. 💻 2.2 Desktop con Kotlin Multiplatform Compose Multiplatform ­ UI

    declarativa moderna ­ Compartir código con Android/iOS ­ Material Design 3 ­ Hot Reload ­ Soporte multiplataforma
  29. 💻 2.2 Desktop con Kotlin Multiplatform Compose Multiplatform ­ UI

    declarativa moderna ­ Compartir código con Android/iOS ­ Material Design 3 ­ Hot Reload ­ Soporte multiplataforma ­ Desarrollado por JetBrains
  30. 💻 2.2 Desktop con Kotlin Multiplatform Características de Compose Desktop:

    ­ Acceso al sistema de archivos ­ Integración con el sistema operativo
  31. 💻 2.2 Desktop con Kotlin Multiplatform Características de Compose Desktop:

    ­ Acceso al sistema de archivos ­ Integración con el sistema operativo ­ Soporte para múltiples ventanas
  32. 💻 2.2 Desktop con Kotlin Multiplatform Características de Compose Desktop:

    ­ Acceso al sistema de archivos ­ Integración con el sistema operativo ­ Soporte para múltiples ventanas ­ Menús y barras de herramientas
  33. 💻 2.2 Desktop con Kotlin Multiplatform Características de Compose Desktop:

    ­ Acceso al sistema de archivos ­ Integración con el sistema operativo ­ Soporte para múltiples ventanas ­ Menús y barras de herramientas ­ Drag & Drop
  34. 💻 2.2 Desktop con Kotlin Multiplatform Características de Compose Desktop:

    ­ Acceso al sistema de archivos ­ Integración con el sistema operativo ­ Soporte para múltiples ventanas ­ Menús y barras de herramientas ­ Drag & Drop ­ Componentes nativos
  35. 💻 2.2 Desktop con Kotlin Multiplatform Herramientas de desarrollo: ­

    IntelliJ IDEA / Android Studio ­ Gradle para la construcción
  36. 💻 2.2 Desktop con Kotlin Multiplatform Herramientas de desarrollo: ­

    IntelliJ IDEA / Android Studio ­ Gradle para la construcción ­ Empaquetado con jpackage
  37. 💻 2.2 Desktop con Kotlin Multiplatform Herramientas de desarrollo: ­

    IntelliJ IDEA / Android Studio ­ Gradle para la construcción ­ Empaquetado con jpackage ­ Distribución multiplataforma
  38. 💻 2.2 Desktop con Kotlin Multiplatform Herramientas de desarrollo: ­

    IntelliJ IDEA / Android Studio ­ Gradle para la construcción ­ Empaquetado con jpackage ­ Distribución multiplataforma ­ Actualizaciones automáticas
  39. 💻 2.2 Desktop con Kotlin Multiplatform Herramientas de desarrollo: ­

    IntelliJ IDEA / Android Studio ­ Gradle para la construcción ­ Empaquetado con jpackage ­ Distribución multiplataforma ­ Actualizaciones automáticas ­ Preview de componentes
  40. 📦 2.3 Backend con Kotlin Multiplatform Targets soportados: Frameworks principales:

    ­ JVM (Java 8+) ­ Native (Linux, macOS, Windows) ­ Node.js (con Kotlin/JS)
  41. 📦 2.3 Backend con Kotlin Multiplatform Targets soportados: Frameworks principales:

    ­ JVM (Java 8+) ­ Native (Linux, macOS, Windows) ­ Node.js (con Kotlin/JS) ­ Ktor
  42. 📦 2.3 Backend con Kotlin Multiplatform Targets soportados: Frameworks principales:

    ­ JVM (Java 8+) ­ Native (Linux, macOS, Windows) ­ Node.js (con Kotlin/JS) ­ Ktor ­ Spring Boot
  43. 📦 2.3 Backend con Kotlin Multiplatform Targets soportados: Frameworks principales:

    ­ JVM (Java 8+) ­ Native (Linux, macOS, Windows) ­ Node.js (con Kotlin/JS) ­ Ktor ­ Spring Boot
  44. 📦 2.3 Backend con Kotlin Multiplatform Ventaja clave: Compartir modelos

    ­ Mismos modelos en backend y cliente ­ Validación consistente
  45. 📦 2.3 Backend con Kotlin Multiplatform Ventaja clave: Compartir modelos

    ­ Mismos modelos en backend y cliente ­ Validación consistente ­ Serialización/deserialización unificada
  46. 📦 2.3 Backend con Kotlin Multiplatform Ventaja clave: Compartir modelos

    ­ Mismos modelos en backend y cliente ­ Validación consistente ­ Serialización/deserialización unificada ­ Tipado fuerte en toda la aplicación
  47. 📦 2.3 Backend con Kotlin Multiplatform Ventaja clave: Compartir modelos

    ­ Mismos modelos en backend y cliente ­ Validación consistente ­ Serialización/deserialización unificada ­ Tipado fuerte en toda la aplicación ­ Menos errores en tiempo de ejecución
  48. 📦 2.3 Backend con Kotlin Multiplatform Ventaja clave: Compartir modelos

    ­ Mismos modelos en backend y cliente ­ Validación consistente ­ Serialización/deserialización unificada ­ Tipado fuerte en toda la aplicación ­ Menos errores en tiempo de ejecución ­ Mantenimiento simplificado
  49. 📦 2.3 Backend con Kotlin Multiplatform // commonMain/kotlin/models/User.kt data class

    User( val id: String, val name: String, val email: String, val role: UserRole ) enum class UserRole { ADMIN, USER, GUEST } // Compartido entre backend y clientes
  50. 📦 2.3 Backend con Kotlin Multiplatform Ktor ­ Framework ligero

    y asíncrono ­ Desarrollado por JetBrains
  51. 📦 2.3 Backend con Kotlin Multiplatform Ktor ­ Framework ligero

    y asíncrono ­ Desarrollado por JetBrains ­ Soporte multiplataforma nativo
  52. 📦 2.3 Backend con Kotlin Multiplatform Ktor ­ Framework ligero

    y asíncrono ­ Desarrollado por JetBrains ­ Soporte multiplataforma nativo ­ Corrutinas y Flow
  53. 📦 2.3 Backend con Kotlin Multiplatform Ktor ­ Framework ligero

    y asíncrono ­ Desarrollado por JetBrains ­ Soporte multiplataforma nativo ­ Corrutinas y Flow ­ Plugins modulares
  54. 📦 2.3 Backend con Kotlin Multiplatform Ktor ­ Framework ligero

    y asíncrono ­ Desarrollado por JetBrains ­ Soporte multiplataforma nativo ­ Corrutinas y Flow ­ Plugins modulares ­ Testing integrado
  55. 📦 2.3 Backend con Kotlin Multiplatform fun main() { embeddedServer(Netty,

    port = 8080) { routing { get("/") { call.respondText("Hello KMP Backend!") } } }.start(wait = true) }
  56. 📦 2.3 Backend con Kotlin Multiplatform Spring Boot ­ Framework

    maduro y estable ­ Gran ecosistema ­ Soporte para Kotlin
  57. 📦 2.3 Backend con Kotlin Multiplatform Spring Boot ­ Framework

    maduro y estable ­ Gran ecosistema ­ Soporte para Kotlin ­ Integración con Spring Cloud
  58. 📦 2.3 Backend con Kotlin Multiplatform Spring Boot ­ Framework

    maduro y estable ­ Gran ecosistema ­ Soporte para Kotlin ­ Integración con Spring Cloud ­ Testing robusto
  59. 📦 2.3 Backend con Kotlin Multiplatform Spring Boot ­ Framework

    maduro y estable ­ Gran ecosistema ­ Soporte para Kotlin ­ Integración con Spring Cloud ­ Testing robusto ­ Documentación extensa
  60. 📦 2.3 Backend con Kotlin Multiplatform @SpringBootApplication class Application fun

    main(args: Array<String>) { runApplication<Application>(*args) } @RestController class Controller { @GetMapping("/") fun hello() = "Hello KMP Backend!" }
  61. 📦 2.3 Backend con Kotlin Multiplatform Node.js con Kotlin/JS ­

    Backend JavaScript moderno ­ Interoperabilidad con npm
  62. 📦 2.3 Backend con Kotlin Multiplatform Node.js con Kotlin/JS ­

    Backend JavaScript moderno ­ Interoperabilidad con npm ­ Ecosistema JavaScript completo
  63. 📦 2.3 Backend con Kotlin Multiplatform Node.js con Kotlin/JS ­

    Backend JavaScript moderno ­ Interoperabilidad con npm ­ Ecosistema JavaScript completo ­ Despliegue en Vercel, Netlify, etc.
  64. 📦 2.3 Backend con Kotlin Multiplatform Node.js con Kotlin/JS ­

    Backend JavaScript moderno ­ Interoperabilidad con npm ­ Ecosistema JavaScript completo ­ Despliegue en Vercel, Netlify, etc. ­ Serverless functions
  65. 📚 3. Ecosistema de Librerías Asincronía ­ Carga de imágenes

    ­ Persistencia local ­ Inyección de dependencias
  66. 📚 3. Ecosistema de Librerías Asincronía ­ Carga de imágenes

    ­ Persistencia local ­ Inyección de dependencias ­ Testing
  67. 📚 3. Ecosistema de Librerías UI: ­ Compose: UI declarativa

    para Android, que ahora también soporta Desktop, iOS (beta) y Web (alpha)
  68. 📚 3. Ecosistema de Librerías UI: ­ Compose: UI declarativa

    para Android, que ahora también soporta Desktop, iOS (beta) y Web (alpha) ­ UIs nativas: Podemos compartir lógica de aplicación, e implementar vistas nativas
  69. 📚 3. Ecosistema de Librerías Arquitectura de UI: ­ ViewModels

    de Architecture Components: Patrón MVVM Mismo código que se usa en Android Navegación con Navigation Compose
  70. 📚 3. Ecosistema de Librerías Arquitectura de UI: ­ ViewModels

    de Architecture Components: Patrón MVVM Mismo código que se usa en Android Navegación con Navigation Compose ­ Voyager: Navegación para Compose También ofrece ViewModels
  71. 📚 3. Ecosistema de Librerías Arquitectura de UI: ViewModels de

    Architecture Components: Voyager: Decompose: Patrón BLoC Funciona con UIs nativas
  72. 📚 3. Ecosistema de Librerías Networking: ­ Ktor Client: Cliente

    HTTP Soporta corrutinas ­ Ktorfit: Wrapper sobre ktor Similar a Retrofit para Android
  73. 📚 3. Ecosistema de Librerías Asincronía: ­ Corrutinas: Soporte para

    programación asíncrona Todo el API es multiplataforma Flows para manejar eventos asíncronos
  74. 📚 3. Ecosistema de Librerías Carga de imágenes: ­ Coil:

    Carga de imágenes en CMP Soporte para Web Multiplataforma
  75. 📚 3. Ecosistema de Librerías Carga de imágenes: ­ Coil:

    Carga de imágenes en CMP Soporte para Web Multiplataforma ­ Kamel: Alternativa a Coil La primera para CMP
  76. 📚 3. Ecosistema de Librerías Persistencia local: ­ SQLDelight: ORM

    para SQLite Más popular ­ Room: La de Android, ahora para KMP Soporte en 2.7.0 (actualmente en RC03)
  77. 📚 3. Ecosistema de Librerías Persistencia local: DataStore: Almacenamiento de

    preferencias Adaptado de Android ­ KStore: Almacenamiento en ficheros JSON Soporte para WASM
  78. 📚 3. Ecosistema de Librerías Inyección de dependencias: ­ Koin:

    Se está convirtiendo en estándar Multiplataforma Muy fácil de usar
  79. 📚 3. Ecosistema de Librerías Inyección de dependencias: ­ Koin:

    Se está convirtiendo en estándar Multiplataforma Muy fácil de usar ­ Kodein: Alternativa a Koin API muy similar
  80. 📚 3. Ecosistema de Librerías Testing: ­ kotlinx.text: Desarrollar tests

    una vez Reutilizar en todas las plataformas ­ Kotest: Framework de testing Librería propia de Assertions Property testing
  81. 📚 3. Ecosistema de Librerías Testing: ­ kotlinx.text: Desarrollar tests

    una vez Reutilizar en todas las plataformas ­ Kotest: Framework de testing Librería propia de Assertions Property testing ­ Mokkery: Mocking framework