This repository was made to create an objective comparison of multiple framework that grant us to "transform" our web app to desktop application formats.
Electron | NW.JS | Tauri | NodeGui | Neutralino | Flutter | .Net MAUI | |
---|---|---|---|---|---|---|---|
Github stars | 102k | 39k | 37k | 8k | 6k | 139k | 15k |
Forks | 14k | 4k | 0.9k | 0.2k | 0.2k | 22k | 0.9k |
Creation date | 2013 | 2011 | 2019 | 2019 | 2018 | 2018 | 2020 |
Last Update | 2021 | 2021 | 2021 | 2021 | 2021 | 2021 | 2021 |
Framework Language | C++, JS, Objective-C, Python | C++ | Rust | C++ | C++ | C, C++, Dart | C# |
Usage Language - Back | JS, C++ | JS, C++ | Rust | JS, C++ | JS, C++ | Dart | C# |
Usage Language - Front | HTML, CSS, JS | HTML, CSS, JS | HTML, CSS, JS | HTML, CSS, JS | HTML, CSS, JS | Dart | C# |
License | MIT | MIT | MIT | MIT | MIT | BSD 3-Clause | MIT |
Developer Dependencies | Node.js, Electron NPM Package | Node.js, NW.JS SDK | C++ Compiler, Node.js, Rustc, Cargo | Cmake, make, Node.js, NodeGUI NPM Package | Node.js, Neu NPM Package | Flutter SDK, Visual Studio 2019 / Clang | .Net SDK, Visual Studio (optionnal), WebView2 (optionnal), Xcode (optionnal) |
User Dependencies | None | None | None | None | None | None | None |
npm/yarn module support | ✔️ | ✔️ | ❌ | ✔️ | ❌ | ❌ | ❌ |
Engine | Chromium | Webkit, Chromium | WRY (WebKitGTK for Linux, WebKit for MacOS, Webview2 for Windows) | Qt | WebkitGTK+ | Flutter engine | .NET MAUI |
Electron | NW.JS | Tauri | NodeGui | Neutralino | Flutter | .Net MAUI | ||
---|---|---|---|---|---|---|---|---|
Developement Environment | Windows | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
MacOS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Linux | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Target Environment | Windows | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
MacOS | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
Linux | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Soon | |
Android | ❌ | Requested | Soon1 | ❌ | ❌ | ✔️ | ✔️ | |
iOS | ❌ | ❌ | In progress1 | ❌ | ❌ | ✔️ | ✔️ | |
tvOS | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ | ✔️ | |
Web | ❌ | ❌ | ❌ | ❌ | ✔️2 | ✔️ | ❌ |
1: https://github.com/tauri-apps/tauri#platforms
2: Uses modes to generate web apps
See Benchmark.txt to get more informations about following data.
See source in benchmark/01-empty-app folder.
Electron | NW.JS | Tauri | NodeGui | Neutralino | Flutter | .Net MAUI | ||
---|---|---|---|---|---|---|---|---|
Build size | Windows (x64) | 180MB | 264MB | 2.6MB | 83.6MB | 2MB | 18MB | 108MB |
Windows (x86) | 160MB | 237MB | ? | 83.6MB | 2MB | 18MB | ? | |
Windows (ARM64) | 193MB | Requested | ? | ? | ? | ? | ? | |
MacOS | ? | 265MB | ? | ? | 2MB | ? | ? | |
Linux (x64) | 181MB | 328MB | 5.8MB | ? | 2MB | 56.8MB | ? | |
Linux (x86) | 171MB | 329MB | ? | ? | 2MB | ? | ? | |
Linux (ARM64) | 196MB | Requested | ? | ? | ? | ? | ? | |
Linux (ARMv7l) | 128MB | Requested | ? | ? | ? | ? | ? | |
Android | - | - | ? | ? | ? | ? | ? | |
iOS | - | - | ? | ? | ? | ? | ? | |
tvOS | - | - | - | ? | ? | ? | ? | |
Web | - | - | - | ? | ? | ? | ? | |
Memory Usage | Windows | ≈58MB | ≈67MB (Debug) / ≈63MB (Release) | ≈59MB | ≈44MB then ≈39MB | ≈2.7MB | ≈36.2MB (Debug) / ≈23.7MB (Release) | ≈61.6MB (Debug) / ≈60.4MB (Release) |
MacOS | ? | ? | ? | ? | ? | ? | ? | |
Linux | ? | ? | ? | ? | ? | ? | ? | |
Android | - | - | ? | ? | ? | ? | ? | |
iOS | - | - | ? | ? | ? | ? | ? | |
tvOS | - | - | - | ? | ? | ? | ? | |
Web | - | - | - | ? | ? | ? | ? | |
Start duration | Windows | ≈131ms | ≈21ms (Debug) | ≈121ms | ≈103ms (Debug) | ? | ≈5.6ms | ? |
MacOS | ? | ? | ? | ? | ? | ? | ? | |
Linux | ? | ? | ? | ? | ? | ? | ? | |
Android | - | - | ? | ? | ? | ? | ? | |
iOS | - | - | ? | ? | ? | ? | ? | |
tvOS | - | - | - | ? | ? | ? | ? | |
Web | - | - | - | ? | ? | ? | ? |
See source in benchmark/02-empty-app-headless folder.
Electron | NW.JS | Tauri | NodeGui | Neutralino | Flutter | .Net MAUI | ||
---|---|---|---|---|---|---|---|---|
Build size | Windows (x64) | 180MB | 264MB | 2.6MB | 83.6MB | 2MB | N/A1 | 108MB |
Windows (x86) | 160MB | 237MB | ? | 83.6MB | 2MB | N/A1 | ? | |
Windows (ARM64) | 193MB | Requested | ? | ? | ? | N/A1 | ? | |
MacOS | ? | 265MB | ? | ? | ? | N/A1 | ? | |
Linux (x64) | 181MB | 328MB | 5.8MB | ? | 2MB | N/A1 | ? | |
Linux (x86) | 171MB | 329MB | ? | ? | 2MB | N/A1 | ? | |
Linux (ARM64) | 196MB | Requested | ? | ? | ? | N/A1 | ? | |
Linux (ARMv7l) | 128MB | Requested | ? | ? | ? | N/A1 | ? | |
Android | - | - | ? | ? | ? | N/A1 | ? | |
iOS | - | - | ? | ? | ? | N/A1 | ? | |
tvOS | - | - | - | ? | ? | N/A1 | ? | |
Web | - | - | - | ? | ? | N/A1 | ? | |
Memory Usage | Windows | ≈57MB | ≈67MB (Debug) / ≈63MB (Release) | ≈59MB | ≈44MB then ≈39MB | ≈2.7MB | N/A1 | ≈61.6MB (Debug) / ≈60.4MB (Release) |
MacOS | ? | ? | ? | ? | ? | N/A1 | ? | |
Linux | ? | ? | ? | ? | ? | N/A1 | ? | |
Android | - | - | ? | ? | ? | N/A1 | ? | |
iOS | - | - | ? | ? | ? | N/A1 | ? | |
tvOS | - | - | - | ? | ? | N/A1 | ? | |
Web | - | - | - | ? | ? | N/A1 | ? | |
Start duration | Windows | ≈123ms | ≈21ms (Debug) | ≈121ms | ≈105ms (Debug) | ? | N/A1 | ? |
MacOS | ? | ? | ? | ? | ? | N/A1 | ? | |
Linux | ? | ? | ? | ? | ? | N/A1 | ? | |
Android | - | - | ? | ? | ? | N/A1 | ? | |
iOS | - | - | ? | ? | ? | N/A1 | ? | |
tvOS | - | - | - | ? | ? | N/A1 | ? | |
Web | - | - | - | ? | ? | N/A1 | ? |
1: Frameless mode not supported yet
TODO:
- WebGL Support
- Build constraints
- Source code protection
- Modules support (npm, native, etc.)
Benchmarks ideas:
- BabylonJS scene
- spreadsheet
- IDE