2 cents from Sciter developer...<p>For the note: Sciter is an embeddable HTML/CSS/JS UI engine. For desktop and mobiles. By feature set it overlaps 96% with Flutter. It differs in ideology and implementation significantly though.<p>0. Dart<p>Not clear why Dart is used in Flutter. By architecture and feature set Dart is almost Java.
Why the Dart then? My guess is this is an attempt to simply replace Java on Android without changing existing UI paradigms. Yes/No ?<p>1. Desktop-first vs. Mobile-first development<p>Desktop UI is windowed one - UI may consist of multiple desktop windows: frame, dialog and popup windows. There is also a concept of "kiosk mode" in Desktop UI - single window spanning whole screen.<p>Mobile UI is a windowless thing - UI canvas spans whole device surface.
As you see Mobile UI is Desktop UI in Kiosk Mode - Mobile UI is a subset of Desktop UI.<p>Transition of large subset system to superset system is quite hard. On top of my mind I cannot tell any success stories of that. Anyone?<p>2. Separation of concerns<p>95% of UI development these days is a Web UI that uses three pillars: HTML as a semantic UI declaration, CSS as a style declaration of UI states and JS as declaration of event flows and UI state transformations. Essentially script is a definition (declaration, again) of flows/routes - how output of one native function is connected with input of other native function.<p>These three pillars, their purposes, are so different that their syntaxes should be different.
Attempt to combine all these definition in single language is doomed to fail. If in doubts then look at WPF.<p>3. Notes on language-behind-UI...<p>If to consider #2 then such simple thing as JavaScript language and VM are quite adequate to the task. Language-behind-UI do not need to be that performant, but it must be flexible. I may express un-popular opinion but language-behind-UI should be typeless.<p>Simply put: don't do ray tracing in language-behind-UI. But! Such a language shall have simple mechanism of adding high performant functions. There are good languages that are specifically designed for performance: C, C++, D, Rust, Zig, WebAssembly, etc. You just need convenient mechanism to expose those functions to runtime of language-behind-UI. Like here: <a href="https://gitlab.com/sciter-engine/sciter-js-sdk/-/blob/main/demos/integration/frame.cpp#L8" rel="nofollow">https://gitlab.com/sciter-engine/sciter-js-sdk/-/blob/main/d...</a><p>You need JITs, compilation, fat VMs and runtimes, strong types only if your language is the only mean to define algorithms in whole application. But expect that your code will always be sub-optimal - neither enough performant nor super flexible.<p>4. Conclusion<p>Flutter should be something Sciter-alike :) - use [X]HTML/JSX, CSS and some already well known language-behind-UI. JavaScript is the natural choice. If needed you should be able to use native UI components - like in Sciter you can use existing HWND based and windowless native components inside your UI. It may not follow Web UI model on 100% (that's impossible) but to be conceptually close so developers can reuse their skills. Web UI model is conceptually close to Mobile one - whole applications UI is constrained inside single window.