将 Web 应用程序“转换”为桌面应用程序格式框架对比
Major characteristics
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Github stars
104.4k
39.2k
53.8k
8k
6.1k
146.3k
17.4k
Forks
14k
4k
1.4k
0.3k
0.3k
23.7k
1.1k
Creation date
2013
2011
2019
2019
2018
2018
2020
Last Update
11/2022
11/2022
11/2022
9/2022
11/2022
11/2022
11/2022
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 (optional), WebView2 (optional), Xcode (optional)
User Dependencies
None
None
None
None
None
None
None
Dependencies / modules support
npm & node .js native addons
npm & node.js native addons
cargo
npm & node.js native addons
pub.dev
NuGet
Engine
Chromium
Webkit, Chromium
WRY (WebKitGTK for Linux, WebKit for MacOS, Webview2 for Windows)
Qt
WebkitGTK+
Flutter engine
.NET MAUI
Operating systems support
1 : Linux 32 Bit support dropped
2 : https://github.com/tauri-apps/tauri#platforms
3 : Uses modes to generate web apps
Benchmarks
See benchmarks.json to get more informations about following data.
Note: These benchmarks are done on Github CI, there are measures to have measurements more accurates (e.g. multiple runs), but it will never exactly be accurate, as it totally depends on system load and resources. You should read these tables as comparision between frameworks on a same OS/Arch/App with a margin of error.
01-empty-app
See source in benchmark/01-empty-app folder.
Build size
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈226MB
≈326MB
≈3MB
≈171MB
≈2MB
?
N/A1
Windows (x86)
≈202MB
≈294MB
?
?
?
?
N/A1
Windows (ARM64)
≈226MB
Requested
?
?
?
?
N/A1
MacOS (x64)
≈358MB
≈493MB
≈5MB
?
≈1MB
?
N/A1
MacOS (arm64)
≈343MB
?
?
?
?
?
N/A1
Linux (x64)
≈231MB
?
≈6MB
≈236MB
≈1MB
?
N/A1
Linux (x86)
?
≈431MB
?
?
?
?
N/A1
Linux (ARMv7l)
≈168MB
Requested
?
?
?
?
N/A1
Linux (ARM64)
≈236MB
Requested
?
?
≈1MB
?
N/A1
Build time
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈6038ms
≈43676ms
≈432482ms
≈13004ms
≈866ms
?
N/A1
Windows (x86)
≈6038ms
≈43676ms
?
?
?
?
N/A1
Windows (ARM64)
≈6038ms
Requested
?
?
?
?
N/A1
MacOS (x64)
≈4255ms
≈43676ms
≈568016ms
?
≈1538ms
?
N/A1
MacOS (arm64)
≈4255ms
?
?
?
?
?
N/A1
Linux (x64)
≈2909ms
?
≈345081ms
≈43994ms
≈1538ms
?
N/A1
Linux (x86)
?
≈43676ms
?
?
?
?
N/A1
Linux (ARMv7l)
≈2909ms
Requested
?
?
?
?
N/A1
Linux (ARM64)
≈2909ms
Requested
?
?
≈1538ms
?
N/A1
Memory Usage
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈65MB (Debug) => ≈82MB (Release)
≈49MB (Debug) => ≈48MB (Release)
≈44MB (Debug) => ≈25MB (Release)
≈125MB (Debug)
≈62MB (Debug)
≈258MB (Debug)
N/A1
MacOS (x64)
≈62MB (Debug) => ≈61MB (Release)
≈65MB (Debug) => ≈77MB (Release)
≈53MB (Debug) => ≈29MB (Release)
≈143MB (Debug)
≈77MB (Debug) => ≈28MB (Release)
≈181MB (Debug)
N/A1
Linux (x64)
≈143MB (Debug) => ≈124MB (Release)
≈71MB (Debug)
≈159MB (Debug) => ≈156MB (Release)
≈154MB (Debug)
≈171MB (Debug) => ≈185MB (Release)
≈397MB (Debug)
N/A1
Start duration
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈279ms (Release)
≈672ms (Release)
≈382ms (Release)
?
?
?
N/A1
MacOS (x64)
≈2610ms (Debug) => ≈1165ms (Release)
≈2108ms (Release)
≈7051ms (Debug) => ≈903ms (Release)
?
≈3187ms (Debug) => ≈1233ms (Release)
?
N/A1
Linux (x64)
≈661ms (Debug) => ≈289ms (Release)
?
≈981ms (Debug) => ≈325ms (Release)
?
≈1460ms (Debug) => ≈442ms (Release)
?
N/A1
1 : Benchmark WIP
02-empty-app-frameless
See source in benchmark/02-empty-app-frameless folder.
Build size
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈226MB
≈326MB
≈3MB
≈171MB
≈2MB
N/A1
N/A2
Windows (x86)
≈202MB
≈294MB
?
?
?
N/A1
N/A2
Windows (ARM64)
≈226MB
Requested
?
?
?
N/A1
N/A2
MacOS (x64)
≈358MB
≈493MB
≈5MB
?
≈1MB
N/A1
N/A2
MacOS (arm64)
≈343MB
?
?
?
?
N/A1
N/A2
Linux (x64)
≈231MB
?
≈6MB
≈236MB
≈1MB
N/A1
N/A2
Linux (x86)
?
≈431MB
?
?
?
N/A1
N/A2
Linux (ARMv7l)
≈168MB
Requested
?
?
?
N/A1
N/A2
Linux (ARM64)
≈236MB
Requested
?
?
≈1MB
N/A1
N/A2
Build time
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈3963ms
≈28509ms
≈425238ms
≈12812ms
≈643ms
N/A1
N/A2
Windows (x86)
≈3963ms
≈28509ms
?
?
?
N/A1
N/A2
Windows (ARM64)
≈3963ms
Requested
?
?
?
N/A1
N/A2
MacOS (x64)
≈3143ms
≈28509ms
≈334078ms
?
≈964ms
N/A1
N/A2
MacOS (arm64)
≈3143ms
?
?
?
?
N/A1
N/A2
Linux (x64)
≈2403ms
?
≈346580ms
≈44093ms
≈964ms
N/A1
N/A2
Linux (x86)
?
≈28509ms
?
?
?
N/A1
N/A2
Linux (ARMv7l)
≈2403ms
Requested
?
?
?
N/A1
N/A2
Linux (ARM64)
≈2403ms
Requested
?
?
≈964ms
N/A1
N/A2
Memory Usage
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈63MB (Debug) => ≈80MB (Release)
≈100MB (Debug) => ≈52MB (Release)
≈44MB (Debug) => ≈23MB (Release)
≈104MB (Debug)
≈54MB (Debug)
N/A1
N/A2
MacOS (x64)
≈65MB (Debug) => ≈62MB (Release)
≈83MB (Debug) => ≈78MB (Release)
≈49MB (Debug) => ≈28MB (Release)
≈105MB (Debug)
≈72MB (Debug) => ≈27MB (Release)
N/A1
N/A2
Linux (x64)
≈143MB (Debug) => ≈118MB (Release)
≈73MB (Debug)
≈158MB (Debug) => ≈155MB (Release)
≈118MB (Debug)
≈173MB (Debug) => ≈184MB (Release)
N/A1
N/A2
Start duration
Electron
NW.JS
Tauri
NodeGui
Neutralino
Flutter
.Net MAUI
Windows (x64)
≈291ms (Release)
≈681ms (Release)
≈364ms (Release)
?
?
N/A1
N/A2
MacOS (x64)
≈1963ms (Debug) => ≈937ms (Release)
≈1803ms (Release)
≈6290ms (Debug) => ≈814ms (Release)
?
≈2827ms (Debug) => ≈865ms (Release)
N/A1
N/A2
Linux (x64)
≈631ms (Debug) => ≈283ms (Release)
?
≈985ms (Debug) => ≈326ms (Release)
?
≈1456ms (Debug) => ≈430ms (Release)
N/A1
N/A2
1 : Frameless mode not supported yet
2 : Frameless mode not working