🐠 Flumia ya está en Google Play: parámetros de tu acuario de agua dulce (pH, KH, GH, NO2, NO3...) sin cuentas ni servidor. Test hecho, mente tranquila. Gratis con 1 acuario.
https://t.co/2GiJRyHuIL
@neurodivdev Lo de mantener una sola lógica de negocio y no duplicar bugs en cada plataforma es justo el motivo por el que migramos parte de nuestra stack a Compose Multiplatform. ¿Lo que más fricción te está dando ahora es el testing compartido o la UI nativa por plataforma?
Un agente rápido que ejecuta un plan malo llega antes al mismo sitio equivocado.
Antes de pedirle código a un agente de IA, respondo 3 preguntas: qué archivos va a tocar, qué debe quedar igual, y cómo sé que el resultado es correcto sin revisar cada línea.
https://t.co/xEqwdc8CyU
Exactly — and it's not just the LLM angle. Android's own docs and codelabs are Compose-first now, so the training corpus reflects the current idiom instead of legacy XML translated by analogy. For Android-only in 2026, Compose isn't really competing with MAUI or Flutter anymore, it's competing with inertia.
That shim-accumulation worry has the same fix Room migrations use: you don't have to chain them. Once nobody's still on v2, collapse v1→v3 into one direct translator instead of stacking v1→v2→v3. Keeping the ID payload minimal (composable hash + byte range) is exactly what makes that collapsing cheap. Good addition to the roadmap.
@mike3k25@officialladi_T Fair on the web side — CMP for web is genuinely early. But for mobile-only (Android + iOS) it's less "bold" than it used to be; the tooling and the JetBrains support have matured a lot since the early days. I'd call it a real option now, not just a brave one.
Kotlin/Compose Multiplatform, genuinely — you keep native UI toolkits per platform where it matters (or share the UI too with CMP) but stop rewriting ViewModels and business logic twice. The one honest caveat: the last mile on iOS (coroutine lifecycle, no automatic onCleared) still needs manual work, it's not "write once, forget forever."
@JCMAppStudio@nihalnova Good catch on strong skipping, that one genuinely surprises people who last touched Compose pre-2.0.20. And yeah, ForEach(id:) vs LazyColumn's key {} is basically the same lesson taught twice — the framework can't guess identity for you, you have to hand it something stable.
On versioning: could you treat the plugin's stable-ID scheme itself as the contract instead of pinning to a specific compiler version — i.e. version the ID format, not the Kotlin release, and let a small compat shim translate old IDs forward? Feels closer to how Room handles schema migrations than to a hard version pin.
remember guarda el estado mientras el composable sigue vivo. rememberSaveable sobrevive rotación y cambios de configuración. Ninguno de los dos sobrevive un process death real (Android matando tu app en segundo plano) — para eso está SavedStateHandle en el ViewModel.
Tres capas de "esto no se pierde", tres garantías distintas. ¿Cuál os mordió primero?
@JCMAppStudio@nihalnova Jumping in — the thing that trips people up most isn't syntax, it's recomposition scope: Compose re-runs whole functions on state change instead of diffing a view tree, so unstable params (lambdas, unkeyed lists) cost you in ways that don't map to any SwiftUI bug.
@ZidaneZ08902030@paliwal_builds@invisiblehop Same experience here — for a side project the "share the logic, keep native UI" cut is genuinely low-friction once the ViewModel/repository layer is set up. I think the fear is bigger than the actual setup cost.
@dvnlydmnc001 Fair, honestly — for auth-critical state that's the safer default. Caching it just to save one network call isn't worth the bug where a stale role/session sneaks back in after logout.
@Honour__11 Glad it clicked. Once you've written that deinit-cleanup once for a project, it stops feeling like boilerplate and starts feeling like the one honest line between "works on Android" and "works everywhere."
That matches what I see too — the compiler metrics report is the only honest way to know, guessing from the source reads wrong half the time (a lambda you'd swear is stable often isn't, once it captures outer context). Past a certain amount of dynamic lists, treating the report as a CI gate beats chasing recompositions by hand.
En KMP, el ViewModel no se comporta igual en las 3 plataformas. Android limpia solo (onCleared). iOS no tiene esa magia: hay que escribirlo a mano en el deinit. Se hace una vez, con cuidado, y ya está resuelto.
#KotlinMultiplatform
Curious what specifically forces the move to a compiler plugin for that last 30% — is it cases where SourceInformation gets ambiguous (inlined composables, multiple calls on one line), or more that ui-tooling-data just isn't shipped/available in release builds so you need the info baked in some other way at build time?
It looks simple in the API and gets real the moment you check what iOS actually does: no automatic onCleared() there, so someone has to write that cleanup by hand (a small ObservableObject wrapper whose deinit clears the ViewModelStore). Wrote up the full Android/iOS/Desktop comparison as a long-form post right after this conversation, in case the details help: https://t.co/MuFOiRhLM4