SlideShare a Scribd company logo
Cross-Platform
Mobile UI
“Compilers, Compilers Everywhere”
27 June 2023 – EOSS Prague
Andy Wingo
Igalia, S.L.
Apps apps
apps
This is a talk about apps; good apps
And compilers; weird compilers
And open source, cross-platform app
frameworks
And the unexpected end of the end of
history
Cross-platform UI Engines Rendering Performance
Cross-platform UI Engines Rendering Performance
Cross-platform UI Engines Rendering Performance
Do we know
how to
make apps?
SwiftUI
❧
React Native
❧
Java and Android views
❧
Jetpack Compose
❧
OpenGL / Vulkan
❧
AppKit
❧
Capacitor
❧
NativeScript
❧
Flutter
❧
UIKit
❧
Step back I.M.H.O.—H before the O
Observe and learn: look for meaning
and motivation
Come back with lessons, then apply
them to now
Lessons 1.
2.
3.
4.
5.
Lesson 1 The old thing: stateful widget trees
var count = 0
let stack = new VStack
let text = new Text("Count: (count)")
stack.add_child(text)
let button = new Button("Increment")
button.set_onclick(||
count += 1
text.set_text("Count: (count)")
)
stack.add_child(button)
https://raphlinus.github.io/ui/
druid/2019/11/22/reactive-ui.html
Lesson 1:
Declarative
UI won on
the web
The newer thing: Declarative UI
2013: React
function Hello({ name }) {
return (
<p>Hello from React, {name}!</p>
);
}
UI is a function: translate state to
immutable tree of elements
Nowadays many derivatives of this
paradigm
Lesson 1:
Declarative
UI won on
Android
2019: Jetpack Compose
@Composable
fun MessageCard(name: String) {
Text(text = "Hello from " +
"Jetpack Compose, $name!");
}
Sometimes UI tree implicitly collected
instead of returned
Lesson 1:
Declarative
UI won on
iOS
2019: SwiftUI
struct ContentView: view {
var name: String
var body: some View {
Text("Hello from SwiftUI, (name)!")
.padding()
}
}
Particularly lovely ergonomics
Lesson 1:
Declarative
UI won,
cross-
platform
2017: Flutter
class Hello extends StatelessWidget {
const Hello({required this.name,
super.key});
final String name;
@override
Widget build(BuildContext context) {
return Text('Hello from Flutter,'
+ '$name!');
}
}
Even when people abstract away from
platform, they go declarative
Lesson 1:
Declarative
UI won
But why? 3 reasons
Managers like it: Decompose UI
into org chart (Conway’s law)
❧
Comprehensively avoid view/model
state mismatch
❧
Developers seem to like it too
❧
Lessons 1. Declarative UI won
2.
3.
4.
5.
Lesson 2 The rise of the framework
Developer declares UI
❧
Framework translates to imperative
operations on e.g. GPU
❧
Framework determines when UI
needs recomputation
❧
Observation: UI tree computation O(n)
in UI size
How to avoid performance disaster?
Lesson 2:
Frameworks
limit
performance
Division of labor: app developers say
what, framework developers say how
Risky bargain
4 main techniques
Managed state
❧
Incremental render
❧
Concurrent render
❧
Concurrent GC
❧
Lesson 2:
Frameworks
limit
performance
Technique 1: Managed state
Framework re-renders only when
needed
function Hello({ name }) {
const [count, setCount] = useState(0);
function inc() {
setCount(x => x+1);
}
return (
<div>
<p>Count: {count}</p>
<button onclick={inc}>+1</button>
</div>
);
}
Lesson 2:
Frameworks
limit
performance
Technique 2: Incremental render
Functional on top, but always
imperative underneath
Web: DOM
❧
React Native: UIKit / Android view
tree
❧
Flutter: GPU pipeline objects
❧
Don’t recreate whole DOM on each
frame: just apply changes
Pixels[N+1] := Pixels[N] +
Diff(UI[N+1], UI[N])
Lesson 2:
Frameworks
limit
performance
Technique 3: Concurrent render
Basic: Build UI on one thread, render
to GPU/DOM on another
Hard on the web, easier on mobile
Limited gains for per-frame
concurrency
Cross-platform UI Engines Rendering Performance
Lesson 2:
Frameworks
limit
performance
Technique 4: Concurrent GC
Concurrent: Runs while program runs.
Move O(n) trace off main thread
Without concurrent GC:
// UI thread
frame . frame . frame . pause: trace+finish . frame
With concurrent GC:
// UI thread
frame . frame . frame . pause: finish . frame
// GC thread
trace.................
Reduce long-pole GC pause
Lesson 2:
Frameworks
limit
performance
Providing good performance is a
framework concern
Frameworks nudge app developers
into good performance patterns
Frameworks limit performance too
Lessons 1. Declarative UI won
2. Frameworks limit performance
3.
4.
5.
Lesson 3
Lesson 3:
Compilers
are back
Example 1: Front-end
@Composable
fun MessageCard(name: String) {
Text(text = "Hello from " +
"Jetpack Compose, $name!");
}
@Composable decorator: make it look
like you declare a tree, but compile to
imperative operations
Lesson 3:
Compilers
are back
Not just Jetpack Compose
SwiftUI ResultBuilder
❧
HarmonyOS ArkUI with “eTS”
❧
React JSX
❧
Compilers are a core part of the
modern UI story
To work in this space: control the
means of production
Lesson 3:
Compilers
are back
Example 2: Deployment
Problem: Minimize startup latency,
maximize runtime predictability
Trend: Move to ahead-of-time
compilation
React Native Hermes
❧
Panda ArkTS (without eval!)
❧
Dart AOT
❧
Predictability over performance
Lesson 3:
Compilers
are back
Example 3: Graphics
Cross-platform UI Engines Rendering Performance
Lesson 3:
Compilers
are back
Flutter Impeller: Compile shaders
ahead-of-time, not at run-time
Requires different rendering backend:
tesselate into many primitive triangles
instead of generating specialized
shaders
Write all shaders in GLSL, compile to
Metal / Vulkan
Cross-platform UI Engines Rendering Performance
Lessons 1. Declarative UI won
2. Frameworks limit performance
3. Compilers are back
4.
5.
Lesson 4:
Programming
languages
are back?!
End of end of history (viz Java)
Declarative UI: Functional reactive
programming (FRP)
Declarative syntax requiring language
work
Are all languages the same?
Dart, Swift
Lesson 4:
Programming
languages
are back?!
Types! Swift, Dart, TypeScript
Co-design of language with plaform
Dart went sound and null-safe for
better AOT performance and binary
size
❧
Shift from run-times to compilers
Lessons 1. Declarative UI won
2. Frameworks limit performance
3. Compilers are back
4. Programming languages are back?!
5.
Lesson 5:
There’s no
winner yet
Marginal cross-platform app
development, viz Signal
Even relative winners have “new
architecture”
React Native: Fabric
❧
Flutter: Impeller
❧
Froth in JavaScript space: new winner
every other year
Flutter bundles the kitchen sink
Lesson 5:
There’s no
winner yet
Lots of awkward choices
Jetpack Compose
❧
ArkTS eTS
❧
React Native / Hermes needing
transpilers
❧
“Do we know how to build apps?”
Lessons 1. Declarative UI won
2. Frameworks limit performance
3. Compilers are back
4. Programming languages are back?!
5. No winner yet
There is space for something else
What is to
be done?
What is to
be done?
Use Flutter
What is to
be done?
Use Flutter
Caveats: Text, Impeller, Google
What is to
be done?
Rust?!?
Future 1:
Rust
Declarative: Dioxus, dioxuslabs.com
fn app(cx: Scope) -> Element {
cx.render(rsx!{
div {
"Hello, world!"
}
})
}
Experimental WebGPU backend
Other options out there
Future 1:
Rust
State story limited (same as React)
Compilers? Yes! Predictable AOT
Language: lightweight
experimentation via macros; rsx!
Flutter on Rust is great pitch
Future 2
Future 2: JS Ride wave of JavaScript popularity
Lots of activity: NativeScript,
Capacitor, React Native, ...
Native widgets: NativeScript, React
Native
AOT compilation: ~NativeScript, React
Native
Still room for new frameworks
Future 2: JS Risk: you sail in the wake of a big ship
Flutter’s choice to abandon JS
understandable though also risky
Far-sighted option: sound typing for
TypeScript
Future 3 What does Flutter need from a
platform? Build that
Future 3:
Wasm and
WebGPU
...and WebHID and ARIA and
WebBluetooth and...
Pitch: commoditize platforms by
providing same binary ABI
User apps are Wasm modules that
import WebGPU et al capabilities
Efficient interoperation facilitated by
GC in WebAssembly 2.0
Summary Apps at the end of the end of history
Declarative
❧
Platform / language codesign
❧
Strong cross-platform contenders:
React Native and Flutter
There is room for more
Crystal ball: in 2y, Flutter in Rust; in
5y, sound TypeScript AOT
To read more: wingolog.org

More Related Content

PPTX
benjamin kenwright webgpu api lecture 1.pptx
PDF
Introduction of WebGPU CTS
PDF
Introduction to RxJS
PDF
Spring core module
PPTX
Introduction to RxJS
PPT
Spring Framework
PPTX
Typescript Fundamentals
PPTX
Spring framework IOC and Dependency Injection
benjamin kenwright webgpu api lecture 1.pptx
Introduction of WebGPU CTS
Introduction to RxJS
Spring core module
Introduction to RxJS
Spring Framework
Typescript Fundamentals
Spring framework IOC and Dependency Injection

What's hot (20)

PDF
React Router: React Meetup XXL
PPTX
Introduction to React JS for beginners | Namespace IT
PDF
Spring framework Introduction
PDF
React js
PPTX
Introduction to React
PDF
React js t2 - jsx
PPTX
What is component in reactjs
PDF
Angular Observables & RxJS Introduction
DOCX
My resume selenium
PPTX
PPTX
Introduction to es6
PPTX
TypeScript Overview
PPTX
What Is Cucumber?
PPTX
React render props
PPTX
An introduction to Vue.js
PDF
Introduction to Redux
PPTX
React JS - A quick introduction tutorial
PPTX
Angular 9
PDF
Java 17
PDF
Android fundamentals and tutorial for beginners
React Router: React Meetup XXL
Introduction to React JS for beginners | Namespace IT
Spring framework Introduction
React js
Introduction to React
React js t2 - jsx
What is component in reactjs
Angular Observables & RxJS Introduction
My resume selenium
Introduction to es6
TypeScript Overview
What Is Cucumber?
React render props
An introduction to Vue.js
Introduction to Redux
React JS - A quick introduction tutorial
Angular 9
Java 17
Android fundamentals and tutorial for beginners
Ad

Similar to Cross-platform UI Engines Rendering Performance (20)

PPT
PPTX
Modern frontend in react.js
PDF
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
PPTX
Compose in Theory
PDF
Oopp Lab Work
PPTX
The Javascript Ecosystem
PPTX
Electron - cross platform desktop applications made easy
PDF
Daniel Steigerwald - Este.js - konec velkého Schizma
PPT
Code generation
PPTX
20180518 QNAP Seminar - Introduction to React Native
ODP
Plug yourself in and your app will never be the same (1 hr edition)
PPT
Introduction to Software Development
PDF
React Native +Redux + ES6 (Updated)
PPTX
Rethinking Best Practices
PDF
Writing native Linux desktop apps with JavaScript
PDF
React Native in Production
PPTX
Road to sbt 1.0: Paved with server (2015 Amsterdam)
PPT
Csharp dot net
PDF
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
PDF
Best Practices in apps development with Titanium Appcelerator
Modern frontend in react.js
Progscon 2017: Taming the wild fronteer - Adventures in Clojurescript
Compose in Theory
Oopp Lab Work
The Javascript Ecosystem
Electron - cross platform desktop applications made easy
Daniel Steigerwald - Este.js - konec velkého Schizma
Code generation
20180518 QNAP Seminar - Introduction to React Native
Plug yourself in and your app will never be the same (1 hr edition)
Introduction to Software Development
React Native +Redux + ES6 (Updated)
Rethinking Best Practices
Writing native Linux desktop apps with JavaScript
React Native in Production
Road to sbt 1.0: Paved with server (2015 Amsterdam)
Csharp dot net
ClojureScript - Making Front-End development Fun again - John Stevenson - Cod...
Best Practices in apps development with Titanium Appcelerator
Ad

More from Igalia (20)

PDF
Life of a Kernel Bug Fix
PDF
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
PDF
Advancing WebDriver BiDi support in WebKit
PDF
Jumping Over the Garden Wall - WPE WebKit on Android
PDF
Collective Funding, Governance and Prioritiation of Browser Engine Projects
PDF
Don't let your motivation go, save time with kworkflow
PDF
Solving the world’s (localization) problems
PDF
The Whippet Embeddable Garbage Collection Library
PDF
Nobody asks "How is JavaScript?"
PDF
Getting more juice out from your Raspberry Pi GPU
PDF
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
PDF
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
PDF
CSS :has() Unlimited Power
PDF
Device-Generated Commands in Vulkan
PDF
Current state of Lavapipe: Mesa's software renderer for Vulkan
PDF
Vulkan Video is Open: Application showcase
PDF
Scheme on WebAssembly: It is happening!
PDF
EBC - A new backend compiler for etnaviv
PDF
RISC-V LLVM State of the Union
PDF
Device-Generated Commands in Vulkan
Life of a Kernel Bug Fix
Unlocking the Full Potential of WPE to Build a Successful Embedded Product
Advancing WebDriver BiDi support in WebKit
Jumping Over the Garden Wall - WPE WebKit on Android
Collective Funding, Governance and Prioritiation of Browser Engine Projects
Don't let your motivation go, save time with kworkflow
Solving the world’s (localization) problems
The Whippet Embeddable Garbage Collection Library
Nobody asks "How is JavaScript?"
Getting more juice out from your Raspberry Pi GPU
WebRTC support in WebKitGTK and WPEWebKit with GStreamer: Status update
Demystifying Temporal: A Deep Dive into JavaScript New Temporal API
CSS :has() Unlimited Power
Device-Generated Commands in Vulkan
Current state of Lavapipe: Mesa's software renderer for Vulkan
Vulkan Video is Open: Application showcase
Scheme on WebAssembly: It is happening!
EBC - A new backend compiler for etnaviv
RISC-V LLVM State of the Union
Device-Generated Commands in Vulkan

Recently uploaded (20)

PPT
Introduction Database Management System for Course Database
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
System and Network Administration Chapter 2
PPTX
history of c programming in notes for students .pptx
PDF
Softaken Excel to vCard Converter Software.pdf
PDF
System and Network Administraation Chapter 3
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PPTX
Odoo POS Development Services by CandidRoot Solutions
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PPTX
Introduction to Artificial Intelligence
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Nekopoi APK 2025 free lastest update
PPTX
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
PPTX
ai tools demonstartion for schools and inter college
PDF
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
PPTX
Transform Your Business with a Software ERP System
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
Introduction Database Management System for Course Database
Design an Analysis of Algorithms II-SECS-1021-03
System and Network Administration Chapter 2
history of c programming in notes for students .pptx
Softaken Excel to vCard Converter Software.pdf
System and Network Administraation Chapter 3
Which alternative to Crystal Reports is best for small or large businesses.pdf
Odoo POS Development Services by CandidRoot Solutions
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Introduction to Artificial Intelligence
Operating system designcfffgfgggggggvggggggggg
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Raksha Bandhan Grocery Pricing Trends in India 2025.pdf
Design an Analysis of Algorithms I-SECS-1021-03
Nekopoi APK 2025 free lastest update
Oracle E-Business Suite: A Comprehensive Guide for Modern Enterprises
ai tools demonstartion for schools and inter college
Flood Susceptibility Mapping Using Image-Based 2D-CNN Deep Learnin. Overview ...
Transform Your Business with a Software ERP System
Navsoft: AI-Powered Business Solutions & Custom Software Development

Cross-platform UI Engines Rendering Performance

  • 1. Cross-Platform Mobile UI “Compilers, Compilers Everywhere” 27 June 2023 – EOSS Prague Andy Wingo Igalia, S.L.
  • 2. Apps apps apps This is a talk about apps; good apps And compilers; weird compilers And open source, cross-platform app frameworks And the unexpected end of the end of history
  • 6. Do we know how to make apps? SwiftUI ❧ React Native ❧ Java and Android views ❧ Jetpack Compose ❧ OpenGL / Vulkan ❧ AppKit ❧ Capacitor ❧ NativeScript ❧ Flutter ❧ UIKit ❧
  • 7. Step back I.M.H.O.—H before the O Observe and learn: look for meaning and motivation Come back with lessons, then apply them to now
  • 9. Lesson 1 The old thing: stateful widget trees var count = 0 let stack = new VStack let text = new Text("Count: (count)") stack.add_child(text) let button = new Button("Increment") button.set_onclick(|| count += 1 text.set_text("Count: (count)") ) stack.add_child(button) https://raphlinus.github.io/ui/ druid/2019/11/22/reactive-ui.html
  • 10. Lesson 1: Declarative UI won on the web The newer thing: Declarative UI 2013: React function Hello({ name }) { return ( <p>Hello from React, {name}!</p> ); } UI is a function: translate state to immutable tree of elements Nowadays many derivatives of this paradigm
  • 11. Lesson 1: Declarative UI won on Android 2019: Jetpack Compose @Composable fun MessageCard(name: String) { Text(text = "Hello from " + "Jetpack Compose, $name!"); } Sometimes UI tree implicitly collected instead of returned
  • 12. Lesson 1: Declarative UI won on iOS 2019: SwiftUI struct ContentView: view { var name: String var body: some View { Text("Hello from SwiftUI, (name)!") .padding() } } Particularly lovely ergonomics
  • 13. Lesson 1: Declarative UI won, cross- platform 2017: Flutter class Hello extends StatelessWidget { const Hello({required this.name, super.key}); final String name; @override Widget build(BuildContext context) { return Text('Hello from Flutter,' + '$name!'); } } Even when people abstract away from platform, they go declarative
  • 14. Lesson 1: Declarative UI won But why? 3 reasons Managers like it: Decompose UI into org chart (Conway’s law) ❧ Comprehensively avoid view/model state mismatch ❧ Developers seem to like it too ❧
  • 15. Lessons 1. Declarative UI won 2. 3. 4. 5.
  • 16. Lesson 2 The rise of the framework Developer declares UI ❧ Framework translates to imperative operations on e.g. GPU ❧ Framework determines when UI needs recomputation ❧ Observation: UI tree computation O(n) in UI size How to avoid performance disaster?
  • 17. Lesson 2: Frameworks limit performance Division of labor: app developers say what, framework developers say how Risky bargain 4 main techniques Managed state ❧ Incremental render ❧ Concurrent render ❧ Concurrent GC ❧
  • 18. Lesson 2: Frameworks limit performance Technique 1: Managed state Framework re-renders only when needed function Hello({ name }) { const [count, setCount] = useState(0); function inc() { setCount(x => x+1); } return ( <div> <p>Count: {count}</p> <button onclick={inc}>+1</button> </div> ); }
  • 19. Lesson 2: Frameworks limit performance Technique 2: Incremental render Functional on top, but always imperative underneath Web: DOM ❧ React Native: UIKit / Android view tree ❧ Flutter: GPU pipeline objects ❧ Don’t recreate whole DOM on each frame: just apply changes Pixels[N+1] := Pixels[N] + Diff(UI[N+1], UI[N])
  • 20. Lesson 2: Frameworks limit performance Technique 3: Concurrent render Basic: Build UI on one thread, render to GPU/DOM on another Hard on the web, easier on mobile Limited gains for per-frame concurrency
  • 22. Lesson 2: Frameworks limit performance Technique 4: Concurrent GC Concurrent: Runs while program runs. Move O(n) trace off main thread Without concurrent GC: // UI thread frame . frame . frame . pause: trace+finish . frame With concurrent GC: // UI thread frame . frame . frame . pause: finish . frame // GC thread trace................. Reduce long-pole GC pause
  • 23. Lesson 2: Frameworks limit performance Providing good performance is a framework concern Frameworks nudge app developers into good performance patterns Frameworks limit performance too
  • 24. Lessons 1. Declarative UI won 2. Frameworks limit performance 3. 4. 5.
  • 26. Lesson 3: Compilers are back Example 1: Front-end @Composable fun MessageCard(name: String) { Text(text = "Hello from " + "Jetpack Compose, $name!"); } @Composable decorator: make it look like you declare a tree, but compile to imperative operations
  • 27. Lesson 3: Compilers are back Not just Jetpack Compose SwiftUI ResultBuilder ❧ HarmonyOS ArkUI with “eTS” ❧ React JSX ❧ Compilers are a core part of the modern UI story To work in this space: control the means of production
  • 28. Lesson 3: Compilers are back Example 2: Deployment Problem: Minimize startup latency, maximize runtime predictability Trend: Move to ahead-of-time compilation React Native Hermes ❧ Panda ArkTS (without eval!) ❧ Dart AOT ❧ Predictability over performance
  • 31. Lesson 3: Compilers are back Flutter Impeller: Compile shaders ahead-of-time, not at run-time Requires different rendering backend: tesselate into many primitive triangles instead of generating specialized shaders Write all shaders in GLSL, compile to Metal / Vulkan
  • 33. Lessons 1. Declarative UI won 2. Frameworks limit performance 3. Compilers are back 4. 5.
  • 34. Lesson 4: Programming languages are back?! End of end of history (viz Java) Declarative UI: Functional reactive programming (FRP) Declarative syntax requiring language work Are all languages the same? Dart, Swift
  • 35. Lesson 4: Programming languages are back?! Types! Swift, Dart, TypeScript Co-design of language with plaform Dart went sound and null-safe for better AOT performance and binary size ❧ Shift from run-times to compilers
  • 36. Lessons 1. Declarative UI won 2. Frameworks limit performance 3. Compilers are back 4. Programming languages are back?! 5.
  • 37. Lesson 5: There’s no winner yet Marginal cross-platform app development, viz Signal Even relative winners have “new architecture” React Native: Fabric ❧ Flutter: Impeller ❧ Froth in JavaScript space: new winner every other year Flutter bundles the kitchen sink
  • 38. Lesson 5: There’s no winner yet Lots of awkward choices Jetpack Compose ❧ ArkTS eTS ❧ React Native / Hermes needing transpilers ❧ “Do we know how to build apps?”
  • 39. Lessons 1. Declarative UI won 2. Frameworks limit performance 3. Compilers are back 4. Programming languages are back?! 5. No winner yet There is space for something else
  • 40. What is to be done?
  • 41. What is to be done? Use Flutter
  • 42. What is to be done? Use Flutter Caveats: Text, Impeller, Google
  • 43. What is to be done?
  • 45. Future 1: Rust Declarative: Dioxus, dioxuslabs.com fn app(cx: Scope) -> Element { cx.render(rsx!{ div { "Hello, world!" } }) } Experimental WebGPU backend Other options out there
  • 46. Future 1: Rust State story limited (same as React) Compilers? Yes! Predictable AOT Language: lightweight experimentation via macros; rsx! Flutter on Rust is great pitch
  • 48. Future 2: JS Ride wave of JavaScript popularity Lots of activity: NativeScript, Capacitor, React Native, ... Native widgets: NativeScript, React Native AOT compilation: ~NativeScript, React Native Still room for new frameworks
  • 49. Future 2: JS Risk: you sail in the wake of a big ship Flutter’s choice to abandon JS understandable though also risky Far-sighted option: sound typing for TypeScript
  • 50. Future 3 What does Flutter need from a platform? Build that
  • 51. Future 3: Wasm and WebGPU ...and WebHID and ARIA and WebBluetooth and... Pitch: commoditize platforms by providing same binary ABI User apps are Wasm modules that import WebGPU et al capabilities Efficient interoperation facilitated by GC in WebAssembly 2.0
  • 52. Summary Apps at the end of the end of history Declarative ❧ Platform / language codesign ❧ Strong cross-platform contenders: React Native and Flutter There is room for more Crystal ball: in 2y, Flutter in Rust; in 5y, sound TypeScript AOT To read more: wingolog.org