Flutter 3.47
flutter.dev
flutter.dev
* Language and hiring: TypeScript has a much larger developer pool. Dart is a solid language, but finding experienced Flutter engineers is harder.
* Platform model: React Native maps much more naturally to native platform concepts. Flutter owns much more of the rendering stack, which is powerful, but also creates another abstraction layer between the app and the platform.
* Performance: Flutter can absolutely be fast, so I would not claim otherwise. My experience, however, is that RN has required less work to get interactions and animations that feel consistently native.
* Ecosystem: RN benefits from the broader React, TypeScript, JavaScript, and native ecosystems. Expo has also improved dramatically and now covers a large part of the usual mobile platform work.
* Platform-specific features: neither framework completely eliminates native code. Things like widgets, Live Activities, Dynamic Island, extensions, NFC, and other platform APIs eventually bring you back to Swift/Kotlin anyway.
* Migration to native: if the long-term destination is Swift and Kotlin, I find RN a better intermediate representation. Its component model and platform integration are closer to native concepts, which also makes the codebase easier for agents to translate incrementally into proper native applications.
That said, these are trade-offs, not claims that Flutter is bad. Flutter has improved a lot, and for teams that want a highly consistent cross-platform UI, its rendering model can be an advantage.
- Dart. It's richer than JS/TS with stronger type safety, and seems purpose-built for UI. Fewer Dart developers than JS, but I'd argue those JS developers cannot be immediately effective coding React Native (Expo) anyway.
- Emulated components vs. real native components. For multi-platform apps, this is actually desirable. These kinds of apps have their own design system.
- Speed. In my experience, it's negligible, but maybe because I keep using the latest version.
- Ecosystem. Flutter/Dart occasionally introduces "breaking" changes (such as migration to null safety, and recently deprecation of CocoaPods). Community very quick to update their plugins and adapt. Some abandoned plugins were immediately forked to keep being maintained.
- Migrating to native platforms, easier for agents to read an RN project. I'd argue it should be _easier_ to do that with Dart since the language is less "ambiguous" than JS.
However it's not perfect. My complaints:
- Not ideal for web apps with lots of FIRST-time visitors, due to initial download. There are some attempts to solve this, e.g. deferred loading, but I think inherently it's unsolvable since you need to download the whole world (a few MBs) to have the app running on your browser. That's why for this scenario I use SvelteKit. But if you already have a mobile app and want to get a web app "for free", this is a useful feature.
- WebView support is inconsistent across platforms (I'm looking at you, Windows and Linux).
- Text fields are quirky on Android TV.
another reason why the web should move from whole app bundling to content addressed CDNs for library code. you would only need to download one copy for each framework version not every site. and its easy to make it decentralized with IPFS if you want.
What was your experience on that aspect with Flutter?
Aren't you conflating framework design with dev discipline? You can write a monolithic disaster in React, native iOS, or Flutter with equal ease. Bad architecture usually happens when devs copy-paste habits from web or imperative paradigms without adapting to a declarative model.
Flutter actually gives you great primitives for clean code. UI components are lightweight config objects, so breaking a huge screen into tiny, modular pieces has virtually zero performance penalty. Its state model naturally separates logic from rendering, making it easy to isolate business logic into testable layers. Plus, the built-in analyzer catches anti-patterns like memory leaks at compile time.
all the tools to enforce separation of concerns are there, imo
I lost so many days of my life profiling and debugging to figure out why hundreds of components were re-rendering when a tiny thing changed somewhere completely unrelated
Could you explain how this comes from React Native and/or redux?
I have used Angular with redux (ngrx) and redux made it quite obvious what changed what and why
You create a selector. You use the selector in a React component.
The component re-renders when the selector outputs a different value, with the usual reference equality caveat.
Does it get any simpler than that?
However, yes, I have seen most developers use Redux incompetently.
They would use actions like "setOrder" instead of "itemAdded", defeating the purpose of a state machine from the start.
Since when does React Native use real native components? Last time I've checked it wasn't capable of doing ANYTHING with my phones NFC scanner or native camera...
With flutter I can just build a Kotlin component and integrate it easily into my app. Also Flutters performance is extremely good, I dont know what you are on about. Our app is used on extremely old phones and has great performance. (I am not even a professional android/flutter dev, so I didnt optimize for performance).
Im a very happy Flutter dev and it's always been odd to see so much negative sentiment around it when there are public discussions.
- Dart is a really _ugly_ language with lots of tiny annoyances. Its as if someone took worst parts of Java and Javascript and turned them into a language. Terrible to write, terrible to read, terrible to use.
- While there is no Skia anymore, the whole custom rendering of Flutter often caused more trouble than not, from the UI implementation itself all the way to specific low-end chipsets not being supported.
- Ecosystem propagates these insane architectures that don't make much sense and are made to either print apps as fast as possible or to emulate some Clean Code like behavior.
- Web still feels terrible to use, even after all these years.
Since I'm not happy with any of these, I've even taken upon writing a framework of my own that renders into native UI and works with any language (gonna shill it here https://hypen.space). It was inspired directly by years of working with mobile and experiencing the pains of crossplatform development such as Flutter and Expo. We can do better than these!
Regarding maturity level - I would yet say it's mature for serious applications with OAuth, local storage etc. Late alpha/early beta stage.
There are some semi-trivial examples on the landing page - most are just UI + input with DB or API fetching in the background, so nothing spectacular.
All of these are crossplatform and render in both web/desktop/mobile and web SDK's or inside the Hypen Gallery apps.
Biggest obstacles to maturity currently are:
- Does not have native platform channels yet
- Renderers need more optimization work
- Ecosystem needs more stability - i.e. test mode and studio still have hiccups
- Error handling and retry story needs improvement
- Some components are still a bit off across desktop/mobile and need syncing
- Resource references derived from state need implementing for better DX
- Protocol isn't binary yet so performance isn't all it could be
But recently things landed that improve maturity quite a lot:
- Accessibility defining & automatic inference has landed, where framework does the best it can to figure it out for you with no intervention
- Animation API has landed with a minimal DX to enable transitions and animations
- Most of tailwind surface is supported and implemented
- Performance improvements being released this week land it in "often 30-50% slower, but sometimes 50% faster than react". Will add benchmarks to docs for visibility.
- CLI improved by a large margin, with expanded template support and easy building
- Cloudflare worker adapter so you can host your app on a worker
Also the integration story is quite different, where Slint is more leaning into a "component integration" model, Hypen leans more into a "just a display layer" model with strict state/UI/action segregation.
While I’m a bit ambivalent towards Flutter, I totally disagree with you on Dart. To me it’s a better version of Java/Typescript with a very mature cross-platform and JIT/AOT compiler. Admittedly there are some things I wish they would take from TS (like discriminated unions), and I haven’t tried “modern” Java either so maybe that’s improved, but even so, I rarely feel like Dart is getting in the way.
And I mean, their entire comment is a way to shill their app so I wouldn't take much stock in what they're saying.
When given a choice, I'd rather use bland React Native nowadays than Expo or Flutter - one is a legacy addon to a framework, while the other sounds like a good idea until you step on a nail or have to read some _bad_ code. And there is a whoooole lot of bad flutter code out there due to relaxed language semantics.
For example:
- Class constructors cannot be in definition headers, i.e. class Something(Int a, Int b)
- The whole final and const/static const mess
- required is annoying and really "slapped on"
- shorthand syntax is => instead of =, personal pet peeve
- positional, named and optional parameters segregation makes things noisy
- concurrency, in which an event loop sounds like a great idea but ends up causing pain with multi-threading and background work so you have to spawn diff isolates
- the whole `await fn()` vs `fn()` validity issue, where you can miss the await keyword and it still compiles is such a slap in the face. think now they solved it, but you could also have returns from non-return functions and vice-versa.
- `dynamic` and generics in the same language have caused many bad designs
- extension types also feel hacked on
- type inference is annoying and highly contextual vs out of the box
- Worst sin: DateTime.now() returns different things based on the platform its running on, making it highly unreliable for something so important
It's a matter of taste, and Dart's syntax style doesn't match mine. As much as I tried to enjoy it, after a while I just couldn't look at it anymore.
All of these accumulate and make it feel overly noisy for a lazy brain.
I love working with Dart (which IMO is _not_ "worst parts of Java and Javascript (...) turned (...) into a language", "Terrible to write, terrible to read, terrible to use" - quite the opposite, actually) and its toolchain, including Flutter.
I find the architecture simple to follow, no need for "either print apps as fast as possible or to emulate some Clean Code like behavior", though I do think some people use overcomplicated state management solutions. But nobody forces anybody to do that.
My experience with Web has been fine so far and I've seen fully cross platform Flutter apps working absolutely fine on mobile, desktop and web.
This is not to gaslight your experience, YMMV after all.
And React Native, with its dependency hell, project rot, npm ecosystem under the hood, and transpilation with lax runtime leaking into TS, is a total no-go for me. Though I base this opinion partially on my experience with NodeJS, and partially on that of my friends who use RN.
Btw. Does your platform support bundling UI in addition to streaming it from the server? How large is the bundled runtime?
PS. Clicking on "see all supported platforms →" on your project's homepage gives 404 for https://docs.hypen.space/docs/adapters .
Unfortunately sometimes you have to, and on average, that code is much worse than your average React Native spaghetti. Whole generations of Flutter devs got these patterns ingrained, and often times they make not just writing and reading code, but communication itself harder.
>And React Native, with its dependency hell, project rot, npm ecosystem under the hood, and transpilation with lax runtime leaking into TS, is a total no-go for me.
That was my stance too until the new architecture released - since then the framework has improved a whole lot, together with its build chain, and is the best way to do crossplatform nowadays.
>Btw. Does your platform support bundling UI in addition to streaming it from the server? How large is the bundled runtime?
Not yet unless you DIY it - currently you can bundle UI and runtime by integrating the Rust engine + renderer with your app, or TS + renderer itself.
There is work being done in a private mirror currently on bundling the whole app + runtime as WASM, exposing WASI interfaces to native such as storage, network, permissions etc, depending on how testing goes it should land in a month or two on the public branch.
>PS. Clicking on "see all supported platforms →" on your project's homepage gives 404 for https://docs.hypen.space/docs/adapters
Thanks, fixing that ASAP!
Highly agree with this. I'm almost done moving an app off it into React (web, not native) because the SDK upgrades kept including unlisted breaking changes to the point I can't upgrade anymore. Biggest culprit was Reanimated.
React Native is actually Native so you feel all the pain of the yearly redesign by Apple and Google and the millions of different device quirks to manage which will break your app.
You have the Javascript ecosystem which is notoriously janky and hard to maintain over time, even more so as nobody else cares about making it work for React Native, you are a third-tier platform.
Then the performance, Flutter is actually more performant than native for very cheap devices (I've tested it), that's why it's so popular in India.
The language is unified and doesn't feel as ducked tape as Javascript is.
Honestly, Flutter is an extremely enjoyable development experience I would recommend anyone I care for to stay away from. The fact it's developed by Google doesn't help: it's a matter of time before they kill it like they did with so many UI libraries and frameworks already, specially with JetBrains developing Compose Multiplatform and the Android team going all-in in the Compose strategy.
Because Impeller has had quite a bumpy ride. Even as recently as June I reported a bug/regression with basic stuff (lines with partial transparency on desktop). All my Android apps are still built with --no-enable-impeller because I've had many instances where the app just shows a blank screen due to driver conflicts.
It may be getting close to stable now, but it wasn't a smooth transition at all.
IIRC, the Flutter team mentioned how using just width/height constraints is enough to represent all relevant layouts. This sounds very nice, being so much simpler than Flexbox and miles ahead of CSS Grid ergonomics.
Did it live up to the promise or did they expand the model with Flex/Grid/etc?
Row and Column are just layout algorithms built on that same model, not separate engines added later. GridView uses the sliver system internally, but still doesn't require anything like CSS Grid's general layout model. The render API is open enough for custom layouts too, so packages like https://pub.dev/packages/boxy build directly on it
We got tables and floats instead.
So they're probably investing in it enough for basic maintenance, but don't really care about evolving the language.
It's been over a decade since then, though, and I'm out of touch now.
I think Dart and Flutter are very overlooked. The language has completely changed since its release, its statically typed, has null safety, enums, and pattern matching, and is very simple and easy to read. It has fast compilation and a ui framework with hot reload. It's as fast as Js on v8 while using less memory and has the overlooked feature of having very fast, almost 0 overhead, ffi.
I think the importance of good ffi is underrated for these ui languages. For reference, everyone that's using electron has to run two node processes doing ipc over a websocket connection. That's going to waste an absurd number of cpu cycles and memory when you are passing messages around when your app is basically a ui for a cli.
Got any case studies?
Flutter made a lot of sense during the Oracle lawsuit when Google needed a way to show Oracle that it can pivot from Java. Now it no longer makes sense but the inertia is too deep.
My guess is that flutter is sold internally through the Huawei support as a leg within China.
Note that Dart or Flutter are nowhere to be found on Android developer documentation.
Killing Flutter would not promote a manager. For now, of course.
At some point there's just not much exciting new stuff to add. Flutter is a nice stable platform, I'd highly recommend it.
I understand it's limitations vs native apps, but there's quite a few cases where it really doesn't matter.
The biggest one for me is always the fear it will be abandoned. Pretty much goes for any cross platform app framework though.
Also, Google dogfoods it quite a bit.
Archive link: https://archive.is/IIUaj
I really don't understand how/why people deny reality so hard when it comes to Flutter. Reminds me a bit of years ago when people were still scoffing at the idea of anyone actually adopting JavaScript to write web servers with while Node.js was very obviously eating up the market.
I used to work at ByteDance and they alone employed I think more than 800 Flutter Devs. Douyin uses Flutter (the Chinese version of TikTok), Grab and Ebay use it, Alibaba and Baidu did too. Toyota and Volkswagen I think both use Flutter. Nubank I think is also a flutter app and they alone have like one hundred million some users.
With the popularity in the Chinese ecosystem alone there's gotta be a billion plus people using flutter.
Gonna check out the app
And that new rendering engine is also why apps like Immich are unable to show HDR photos. Apple & Google both pushed broad support for that a couple years ago, with things like Ultra HDR and subsequently ISO 21496-1.
Meanwhile Flutter still doesn't really have wide gamut support https://github.com/flutter/flutter/issues/189155
Of course they need to prioritize where to spend resources, like any project, but Flutter also doesn't seem to be on any critical path for fancy headlining new features, either.
I am convinced they did some proper analysis in-house and continuously find that investing the flutter/dart yields returns across all other services. The language/platform is the gateway.
It's super nice.
I get the impression that more are going for native mobile, KMP or PWA.
React Native: totally viable, because core business logic is the same. If you want native UI elements and all the iOS Liquid Glass stuff, but don’t want to have to completely separate code based, React Native is a viable option if you don’t mind installing lots of third party packages for functionality you get out of the box in Flutter or true native apps.
Native mobile: I have one smaller app with quite a custom calendar view, written with Claude Code natively for Android and iOS. Coding agents help and you get maximum control. Mentally, it’s a bit cumbersome to direct you agent to do everything twice. While one platform can serve as a reference implementation for the other, it’s kinda annoying mentally "to do the same feature all over again and test and direct the agent". But it’s doable.
KMP: No experience, I just hate most things around Android.
PWA: That ship has sailed. Nobody knows about PWAs, most PWAs are bad. It’s a bummer really.
Capacitor: make an SPA (offline-first preferably), and use native code plugins via Capacitor. Still quite feasible, comparable to Flutter in the sense that you need to build a custom UI or use a fake version of Liquid Glass and Material. I use Ionic for that, but it’s a bit dated (still on Material v2). Heavily depends on your skills as a web dev to get good UX.
I use Ableton, Figma, and Emacs regularly. I have a decade (or more) of muscle memory around these apps. If they suddenly decided to adopt the look, feel, and conventions of their underlying host platform, I’d be very upset.
If I’m using Emacs, I don’t want to use Cmd+S to save my files on macOS and Ctrl+S on Windows. I’ve already memorized C-x C-s. I don’t want Ableton to adopt whatever new design language Apple or Microsoft is chasing this week. I want to open the app and find the UI controls looking and behaving exactly the same as they’ve looked and behaved since I started using it in 2014. I want to write code, make music, do design. I don’t want to be frustrated because the button for enabling the metronome is 15px to the left on Windows vs. macOS.
Apps that look and feel native only make sense in two cases:
1. The app is tied to the platform. E.g. Logic Pro. It can integrate deeply into macOS and use the native widget set because it will never run on any other platform. Same for Bear, Things, Pixelmator, Omni Group apps, etc.
2. The app is a replaceable, throw-away utility. I call these “fungible apps”. For example, it doesn’t really matter which Mastodon or Bluesky client you use. There are hundreds of them, and they’re not complex enough that the loss of familiarity or muscle memory matters very much. You can use one client on Windows, a different one on macOS, and a third one on Linux, and it’ll be fine. They can all be native to their platforms, or not. The interaction model is simple enough that you can afford to have a different one on every platform.
For apps that really matter—the apps I use to put food on the table—I absolutely want them to look and feel exactly the same on every platform. The app is the OS, the actual OS is just a hardware abstraction layer.
Can Flutter be used to build apps like Figma or Ableton or Emacs? I actually don’t think so. It’s a poor toolkit for building anything that must last for more than 3-5 years. If you care about longevity, there are basically only three options in 2026: Qt, Electron, or roll your own like Zed/Sublime.
I want to add a third category to the categories that make sense as native apps: apps that are built by the platform vendor (and potentially shipped with the platform).
GNOME apps are built with GTK+, KDE apps are built with Qt, and macOS apps are built with SwiftUI/AppKit. This is how it should be. Microsoft is the only outlier here, shipping apps built with everything from Win32 to React Native to Electron to their own WebView2.
I've recently had to do some win32 stuff in a Flutter app and it's amazing what you can do, but it's pretty hard, even with an AI to help you.
So the "lazy" devs go to work using React Native and Electron rather for apps inside of Windows shipped by Microsoft. Crazy, but it's to meet deadlines.
But with sufficient time and effort, proper native iOS/macOS wins every time.
Further:
> I just hate most things around Android.
and yet you say
> React Native: totally viable
It's just strange someone "hating things about Android" and then is "totally viable" about things react native. This must be some "personal" sort of hatred. I am saying this as someone who has always struggled and cursed the toolings around Android and then started appreciating it once I had to deal with "xcode world" and things "web dev". React native? That was another level of nightmare relatively speaking from development perspective.
This weekend I had an idea I set out to experiment with: if I have an existing React Native app, how much effort would it take an LLM to rewrite it into genuinely native apps. My idea being I no longer need to write cross-platform code and pay the intermediary framework costs, I’d get direct access to the underlying platform. Instead, I could just spec the features I need in the app and the LLM can build it.
It took me a year to build the original app to production quality by hand. My “twins”, as they’ve become known, were at 80% completion in three days of on-off work.
I’m pretty much convinced my experiment was a success. Which sorta terrifies me that I’ve specialised in a technology that can be, for all intents and purposes, be entirely erased.
The only caveat I can find is it is still a great technology for doing cross-platform mobile and web. Using something like Tamagui (as rough as that can be sometimes) allows genuine code sharing across all platforms.
Sucks most that I’m now actively looking for a new React Native role.
I'm trying it now with an app and so far it's working really well. I build what I can cross platform, the non-ui stuff, then have AI build the UI for each platform.
It even implemented native low-level graphics on each platform: metal, vulkan, and d3d12. It builds SwiftUI on Apple platforms, WinUI3 on Windows, GTK4 on Linux, Compose on Android. The cross platform stuff is Zig with a C ABI.
And yeah, it's a bit terrifying how fast you can iterate. I've built for all these platforms in about a month. It would have taken at least a year, maybe more before. I haven't even optimized the process by having AI agents follow my lead automatically, so as I finish features on the primary platform they could start building the others by watching. Requires some setup I haven't tackled yet (VMs for all platforms with agents waiting).
One downside for sure is lack of deep knowledge on all these platforms can make it difficult to see issues.
This is coming from a native framework evangelist for many years, and then just tried flutter early days (which was far more difficult than how easy it is today). Now I write almost all my projects in flutter/dart where I can, especially with AI the speed from idea to production is insane.
KMP I guess missed the ship and that ship has sailed quite deep into the ocean now. PWA won't be a choice anymore except for the "niche" usage.
React Native? I guess there will be use cases for this (at least for a while) as it is deeply entrenched into too many apps and many of those are very famous apps. Besides there's always been automasochism for the reason to pick react native.. so that's there :D
I will also expect native to pickup now (unless we only see single person tech teams now) because of AI. I mean as LLMs started getting better at coding my first thought as a native dev was - hah, hopefully people won't have to deal with such monstrosities in even small teams now.
Also, not having to see a package.json with a trillion entries (and counting) alone can put all these choices above RN for me.
its a cross platform framework that you can share component between mobile and other platform and always has been
Now I might vibe code such things using React, but 5 , 6 years ago Flutter got me what I wanted fast.
Firebase integration is absurdly easy. You can make a crud app in about 30 minutes
It's the fastest way to build something if you're not a big html person.
I've never particularly been good at hmtl tbh. The older I get, the more I'm concerned with the ease of tools/frameworks vs what's the most optimal.
Relying on WASM means that nobody on Apple platforms who has Lockdown Mode enabled for better security will be able to use it.
Still, Flutter now feels ancient to use compared to something like Compose, in that regard.
And it's completely free no ads, no subscriptions, or donations, for the public benefit of improving health and fitness.
It's a guaranteed weight loss or gain app; results within 2-5 weeks! Don't believe? well just read reviews. We do not have Revenue, so no money to spend on marketing.
OK so that's brief description of what we built now flutter part:
The Flutter development experience is very smooth; you rarely run into any issues, just be careful not to block the UI isolate. Sometimes bad structuring issues or ui bugs may end up blocking your UI.
My experience is in Backend (java, rust, c++, go, ruby, python etc..) and this is the first time i built a mobile app. And same is true for other guys on the team.
Some limitations are from the underlying platform and not Flutter. Initially, I thought the lack of OTA was a dealbreaker (as App Store / Play Store approvals are a slow loop) and Expo might be better, but the lack of OTA made me structure the app differently and it turned out it's not as big of a deal actually.
We also managed to have a PWA app (for nearly free) by using Flutter web, so it also runs on devices which do not support the Play Store or App Store, giving us max coverage across the board.
We tested react native but found it slow (your code runs in Hermes VM so you need to write native code to offload) and dev tools aren't as good as flutters imho. Dart AOT, which is what runs on iOS/Android, is much faster by default, so you'll hardly ever feel any need to write native code. And when you do need to write native code, we use some for WorkManager and HealthConnect it's very easy! Just be careful with R8; you might have to set rules (though most plugins ship with rules these days) but if you are writing native code in java/kotlin you may have to do this on your own, or it can sometimes break things!
I am glad I picked Flutter over React Native! I had my doubts, but I am glad I looked at their "architecture" rather than the hype of the subreddits.
Around the same time at my job tried to build a design system off Google’s web component MD implementation and that shit stalled and then got fully abandoned.
Most dieting apps are pushing for the AI photo and barcode scanning to make estimating easier and though far from perfect, it makes the whole experience at least somewhat doable.
We've had many people who have unsubscribed from MacroFactor after using our MacroCodex.
Not just this, we've also built MacroFactor Workout's rival Symbiote Workout app which is also completely free! it's now in Beta and under rapid developement.
For calorie tracking, you've established apps like Cronometer and MyFitnessPal or they can use our completely free AI calorie tracker CalorieCodex! which does what you want! barcode scan / photo to calorie and macro output etc...
>estimating macros on food is the hardest part of dieting. So your app is great but it tackles the part of dieting that people aren't stuggling with and doesn't address the part that they do struggle with.
I believe MacroCodex actually targets the part most people are likely to struggle with and this is why it is able to provide guaranteed results!
This app is not a calorie tracker, though it can pull calorie totals and weight from other apps using Health Connect on Android.
To understand the problem we are solving, you'll need to read this: https://macrocodex.app/knowledge/rethink/adaptive-tdee/
We've had to design this algorithm to figure out real maintenance calories:
https://macrocodex.app/knowledge/macrocodex/smart-calorie-bu...
>Most dieting apps are pushing for the AI photo and barcode scanning to make estimating easier and though far from perfect, it makes the whole experience at least somewhat doable.
We also have an AI calorie tracker; it's CalorieCodex. It's in BETA and can do Barcode/Photo using BYOK AI.
The language, like any other, does have some weaker parts, but in general is _very_ nice to write in - thanks to both the language itself and the toolchain built around it.
The apps compile to native binaries for production and are run in Dart VM during development. The SDK is multi purpose. You can write "scripts", you can write CLI apps, servers and with Flutter - the rest of them.
JIT mode is only for development, and its performance has not been a priority for a while now.
I personally would like for it to pick up some ideas from Svelte.
Flutter can get you up and running quickly. If I want cross-plaform support, one codebase is hard to beat.
How does such a basic feature only get added so late?
* Most of the team stayed at the company.
* The layoffs hit mostly DevOps and infra people in Flutter team.
* At least part of the laid off roles were moved offshore to Germany, India etc.The web app is here: https://app.vocabuo.com (completely free) And the links for Android/iOS builds are here: https://vocabuo.com (soft paywall)
To an untrained eye who does not care about dropping a few frames, the web version is almost indistinguishable from the "native" build. Especially if you add it to homescreen from safari to hide the navigation bar.
Example: https://grok.com/share/c2hhcmQtNA_e53f2ba6-cac3-49e4-ab95-c9...
The main reason i can think of is generics not existing initially
Iirc the reason is that the Dart team was willing to heavily modify the language and runtime to accommodate the needs of Flutter and the V8 team wasn't.
I think this is the video that talks about this: https://m.youtube.com/watch?v=xqGAC5QCYuQ
On the technical side, Flutter needed AOT compilation to native ARM for release builds and a JIT for development (that's what makes stateful hot reload possible). Dart does both from one codebase. TypeScript means shipping a JS VM, which is precisely the overhead Flutter was designed to avoid. (In contrast to RN). Dart's other big win is GC tuned for allocating and throwing away tons of short-lived objects which is what happens when you hot reload over and over.
Go has no JIT, so no hot reload, and no generics until 2022, Flutter has a big widget library so that would not have been possible.
And of course the Dart team was inside Google, and had just lost its original mission when Chrome declined to ship the Dart VM, and was willing to change the language to suit Flutter.
- we wanted hot reload
- it was supposed to feel familiar to web developers and reasonable to native developers
- iOS needed AOT compilation for speed since we couldn't use a JIT
- TypeScript had literally just reached 1.0
- Swift looked promising, but the Oracle lawsuit made the idea of using it tenuous
- Kotlin was not even 1.0 yet, that wouldn't happen for 2 more years
- Go made huge binaries. The language was also lacking features like generics and Go was unwilling to add them (remember this is 2014).
- v8 was not interested in AOT, but Dart was willing to dramatically invest in flutter
There were probably other reasons too I'm forgetting.
Dart was a really pragmatic choice to ship quickly. I have mixed feels about how the decision has aged over time, and wish we had things like Hermes and WASM back then, and a willingness to build a TypeScript compiler like other native frameworks (ex. Valdi)... But for the time I think the choice was reasonable.
lol.