The blog
All Posts
Production experience, unfiltered opinions, and deep dives into Flutter architecture.
Flutter vs React Native in 2026. Renderers, bridges, and the choice that finally feels different.
A 2026 comparison of Flutter and React Native after both stacks finished major architectural rewrites. Impeller, Fabric, JSI, TurboModules, and which one to pick for what.
GenAI features in a Flutter app. What works, what is broken, and what users actually want.
Postmortem of shipping a GenAI feature in a production Flutter app. Latency UX, streaming text, on-device vs cloud, what flopped, what stuck, and what the stores allow.
Building an AI-powered code review assistant inside your Flutter dev workflow.
How to wire an LLM into a Flutter team's code review pipeline so it catches Dart-specific issues. Real prompts, a CI flowchart, and what does and does not work.
Integrating an LLM into a Flutter app without it feeling like a science project.
A real architecture for calling an LLM API from a Flutter app. Streaming, error handling, loading states, and cost-aware design. With a sequence diagram of the full request lifecycle.
Background processing in Flutter. What a native developer needs to know.
Isolates, WorkManager on Android, BGTaskScheduler on iOS, and the places where Flutter's abstraction breaks down. Native Kotlin and Swift equivalents included.
Debugging a Flutter crash that only happened in production on iOS.
A real production crash that only reproduced in release iOS builds. The misleading clues, the actual root cause, and how I would have found it sooner.
Should your team rewrite the native app in Flutter? The real answer.
For engineering managers and tech leads weighing a rewrite. The hidden costs, the team realities, and a direct verdict for three team sizes.
Flutter gesture system vs UIGestureRecognizer. Why I miss UIKit sometimes.
GestureDetector, the gesture arena, and the things UIGestureRecognizer does without thinking. A deep dive with Swift and Dart side by side.
I recommended GetX for 2 years. I changed my mind. Here is why.
An honest account of what made GetX appealing, where it broke at scale, and the specific bug that made me switch a production app to Riverpod.
Structuring a large Flutter codebase. What actually scales.
Feature-first or layer-first? Where does dependency injection go? A real folder structure that survives ten engineers and three years of churn.
Why our Flutter app was 200MB and how we got it down to 38MB.
A real binary-size investigation. Asset bloat, native libraries, build flags, and what actually moved the needle on a Flutter app that ballooned past 200MB.
Android back gesture handling in Flutter vs native. The edge cases nobody talks about.
Predictive back, PopScope, GoRouter, and the bottom sheet that swallows your gesture. The Android back gesture story for Flutter, with Kotlin equivalents.
Writing a Flutter platform channel in Swift. What the official docs skip.
A complete walk through a production platform channel in Swift, including threading, error propagation, and passing complex objects. The parts the docs gloss over.
Riverpod vs Bloc vs GetX. I used all three in production. Here is the honest breakdown.
Three production codebases, three state management choices. Where each one earned its keep, where each one cost me a weekend, and a recommendation matrix.
Flutter on iOS still does not feel native. Here is exactly why.
A line-by-line breakdown of where Flutter on iOS diverges from UIKit feel: scroll physics, text selection, keyboard, and font rendering. With code to close the gap.
I have shipped apps in Swift, Kotlin, and Flutter. Here is my unfiltered verdict after 18 months.
After eighteen months of shipping the same product surface in Swift, Kotlin, and Flutter, here is what actually held up in production and what did not.