Web to Desktop framework comparison
This repository was made to create an objective comparison of multiple framework that grant us to "transform" our web app to desktop application formats.
Table Of Content
Major characteristics
Electron | NW.JS | Tauri | NodeGui | Neutralino | Flutter | .Net MAUI | |
---|---|---|---|---|---|---|---|
Github stars | 99k | 39k | 25k | 7k | 5k | 133k | 13k |
Forks | 13k | 4k | 0.6k | 0.2k | 0.2k | 20k | 0.6k |
Creation date | 2013 | 2011 | 2017 | 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, Tauri Bundler | 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 |
Operating systems support
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 | |
|
|
|
|
|
|
1: https://github.com/tauri-apps/tauri#platforms
2: Uses modes to generate web apps
Benchmarks
See Benchmark.txt to get more informations about following data.
01 - Empty app
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 | - | - | - | ? | ? | ? | ? |
02 - Empty app (Headless)
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
Future content
TODO:
- WebGL Support
- Build constraints
- Source code protection
- Modules support (npm, native, etc.)
Benchmarks ideas:
- BabylonJS scene
- spreadsheet
- IDE