• Stars
    star
    1,373
  • Rank 34,254 (Top 0.7 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created over 3 years ago
  • Updated about 2 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

An objective comparison of multiple frameworks that allow us to "transform" our web apps to desktop applications.

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 Wails Flutter .Net MAUI
Github stars 109k 39.8k 68.1k 8.5k 6.9k 17.3k 156.4k 19.6k
Forks 15k 4k 2k 0.3k 0.3k 0.8k 25.9k 1.4k
Creation date 2013 2011 2019 2019 2018 2019 2018 2020
Last Update 9/2023 8/2023 9/2023 8/2023 9/2023 9/2023 9/2023 9/2023
Framework Language C++, JS, Objective-C, Python C++ Rust C++ C++ Go C, C++, Dart C#
Usage Language - Back JS, C++ JS, C++ Rust JS, C++ JS, C++ Go Dart C#
Usage Language - Front HTML, CSS, JS HTML, CSS, JS HTML, CSS, JS HTML, CSS, JS HTML, CSS, JS HTML, CSS, JS Dart C#
License MIT 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 Go 1.18+, Node 15+, Wails Flutter SDK, Visual Studio 2019 / Clang .Net SDK, Visual Studio (optional), WebView2 (optional), Xcode (optional)
User Dependencies None None None None None None None None
Dependencies / modules support npm & node.js native addons npm & node.js native addons cargo (back), npm (front) npm & node.js native addons ❌ Gomod (back), npm (front) pub.dev NuGet
Engine Chromium Webkit, Chromium WRY (WebKitGTK for Linux, WebKit for MacOS, Webview2 for Windows) Qt WebkitGTK+ Webkit Flutter engine .NET MAUI
Integrated updater ? Official Community Official No Official Planned No, but there are community solutions No
Automated Tests Standard node.js tests (back-end) or Webdriver/Playwright (UI) Standard node.js tests (back-end) or Webdriver(UI) Cargo (back-end) or Webdriver (UI) ? ? ? Integrated Standard C# tests (back-end), no official solution for UI

Operating systems support

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI
Developement Environment Windows βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ
MacOS βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ
Linux βœ”οΈ1 βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ
Target Environment Windows βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ
MacOS βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ
Linux βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ βœ”οΈ Soon
Android ❌ Requested Soon2 ❌ ❌ Requested βœ”οΈ βœ”οΈ
iOS ❌ ❌ In progress2 ❌ ❌ Requested βœ”οΈ βœ”οΈ
tvOS ❌ ❌ ❌ ❌ ❌ ❌ ❌ βœ”οΈ
Web ❌ ❌ ❌ ❌ βœ”οΈ3 ❌ βœ”οΈ ❌

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 Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ248MB β‰ˆ354MB β‰ˆ1MB β‰ˆ171MB β‰ˆ2MB β‰ˆ8MB ? N/A1 N/A2
Windows (x86) β‰ˆ220MB β‰ˆ318MB ? ? ? ? ? N/A1 N/A2
Windows (ARM64) β‰ˆ257MB Requested ? ? ? ? ? N/A1 N/A2
MacOS (x64) β‰ˆ386MB β‰ˆ531MB β‰ˆ3MB ? β‰ˆ1MB β‰ˆ7MB ? N/A1 N/A2
MacOS (arm64) β‰ˆ369MB ? ? ? ? ? ? N/A1 N/A2
Linux (x64) β‰ˆ251MB β‰ˆ474MB β‰ˆ4MB β‰ˆ75MB β‰ˆ1MB β‰ˆ6MB ? N/A1 N/A2
Linux (x86) ? β‰ˆ473MB ? ? ? ? ? N/A1 N/A2
Linux (ARMv7l) β‰ˆ188MB Requested ? ? ? ? ? N/A1 N/A2
Linux (ARM64) β‰ˆ258MB Requested ? ? β‰ˆ1MB ? ? N/A1 N/A2

Build time

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ4139ms β‰ˆ29100ms β‰ˆ274447ms β‰ˆ11509ms β‰ˆ866ms β‰ˆ9403ms ? N/A1 N/A2
Windows (x86) β‰ˆ4139ms β‰ˆ29100ms ? ? ? ? ? N/A1 N/A2
Windows (ARM64) β‰ˆ4139ms Requested ? ? ? ? ? N/A1 N/A2
MacOS (x64) β‰ˆ5983ms β‰ˆ29100ms β‰ˆ207511ms ? β‰ˆ875ms β‰ˆ70980ms ? N/A1 N/A2
MacOS (arm64) β‰ˆ5983ms ? ? ? ? ? ? N/A1 N/A2
Linux (x64) β‰ˆ2218ms β‰ˆ29100ms β‰ˆ305380ms β‰ˆ9474ms β‰ˆ875ms β‰ˆ40059ms ? N/A1 N/A2
Linux (x86) ? β‰ˆ29100ms ? ? ? ? ? N/A1 N/A2
Linux (ARMv7l) β‰ˆ2218ms Requested ? ? ? ? ? N/A1 N/A2
Linux (ARM64) β‰ˆ2218ms Requested ? ? β‰ˆ875ms ? ? N/A1 N/A2

Memory Usage - (Average of runs) Median of used memory for main process and children ones)

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ382MB (Debug) => β‰ˆ242MB (Release) β‰ˆ403MB (Debug) => β‰ˆ286MB (Release) β‰ˆ144MB (Debug) => β‰ˆ29MB (Release) β‰ˆ221MB (Debug) β‰ˆ84MB (Debug) β‰ˆ196MB (Debug) => β‰ˆ33MB (Release) β‰ˆ840MB (Debug) N/A1 N/A2
MacOS (x64) β‰ˆ298MB (Debug) => β‰ˆ201MB (Release) β‰ˆ390MB (Debug) => β‰ˆ280MB (Release) β‰ˆ150MB (Debug) => β‰ˆ31MB (Release) β‰ˆ152MB (Debug) β‰ˆ187MB (Debug) => β‰ˆ30MB (Release) β‰ˆ208MB (Debug) => β‰ˆ34MB (Release) β‰ˆ193MB (Debug) N/A1 N/A2
Linux (x64) β‰ˆ666MB (Debug) => β‰ˆ544MB (Release) β‰ˆ205MB (Debug) β‰ˆ302MB (Debug) => β‰ˆ92MB (Release) β‰ˆ295MB (Debug) β‰ˆ854MB (Debug) => β‰ˆ742MB (Release) β‰ˆ663MB (Debug) => β‰ˆ431MB (Release) β‰ˆ21MB (Debug) N/A1 N/A2

Memory Usage - (Average of runs) Median of difference between system measured free memory before execution and during execution)

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ182MB (Debug) => β‰ˆ84MB (Release) β‰ˆ275MB (Debug) => β‰ˆ140MB (Release) β‰ˆ211MB (Debug) => β‰ˆ134MB (Release) β‰ˆ189MB (Debug) β‰ˆ64MB (Debug) β‰ˆ266MB (Debug) => β‰ˆ143MB (Release) β‰ˆ787MB (Debug) N/A1 N/A2
MacOS (x64) β‰ˆ153MB (Debug) => β‰ˆ92MB (Release) β‰ˆ237MB (Debug) => β‰ˆ159MB (Release) β‰ˆ154MB (Debug) => β‰ˆ33MB (Release) β‰ˆ93MB (Debug) β‰ˆ131MB (Debug) => β‰ˆ31MB (Release) β‰ˆ204MB (Debug) => β‰ˆ36MB (Release) β‰ˆ150MB (Debug) N/A1 N/A2
Linux (x64) β‰ˆ107MB (Debug) => β‰ˆ51MB (Release) β‰ˆ70MB (Debug) β‰ˆ80MB (Debug) => β‰ˆ11MB (Release) β‰ˆ67MB (Debug) β‰ˆ416MB (Debug) => β‰ˆ345MB (Release) β‰ˆ277MB (Debug) => β‰ˆ135MB (Release) β‰ˆ12MB (Debug) N/A1 N/A2

Start duration

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ1290ms (Debug) => β‰ˆ306ms (Release) β‰ˆ741ms (Release) β‰ˆ3348ms (Debug) => β‰ˆ563ms (Release) ? ? β‰ˆ11283ms (Debug) => β‰ˆ604ms (Release) ? N/A1 N/A2
MacOS (x64) β‰ˆ1923ms (Debug) => β‰ˆ704ms (Release) β‰ˆ1730ms (Release) β‰ˆ4977ms (Debug) => β‰ˆ743ms (Release) ? β‰ˆ2305ms (Debug) => β‰ˆ720ms (Release) β‰ˆ8980ms (Debug) => β‰ˆ802ms (Release) ? N/A1 N/A2
Linux (x64) β‰ˆ693ms (Debug) => β‰ˆ362ms (Release) ? β‰ˆ210536ms (Debug) ? β‰ˆ1779ms (Debug) => β‰ˆ449ms (Release) β‰ˆ4490ms (Debug) => β‰ˆ345ms (Release) ? N/A1 N/A2

1: Benchmark WIP
2: Benchmark WIP

02-empty-app-frameless

See source in benchmark/02-empty-app-frameless folder.

Build size

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ248MB β‰ˆ366MB β‰ˆ1MB β‰ˆ171MB β‰ˆ2MB β‰ˆ8MB N/A1 N/A2 N/A3
Windows (x86) β‰ˆ220MB β‰ˆ330MB ? ? ? ? N/A1 N/A2 N/A3
Windows (ARM64) β‰ˆ257MB Requested ? ? ? ? N/A1 N/A2 N/A3
MacOS (x64) β‰ˆ378MB β‰ˆ329MB β‰ˆ3MB ? β‰ˆ1MB β‰ˆ7MB N/A1 N/A2 N/A3
MacOS (arm64) β‰ˆ359MB ? ? ? ? ? N/A1 N/A2 N/A3
Linux (x64) β‰ˆ251MB β‰ˆ474MB β‰ˆ4MB β‰ˆ75MB β‰ˆ1MB β‰ˆ6MB N/A1 N/A2 N/A3
Linux (x86) ? β‰ˆ473MB ? ? ? ? N/A1 N/A2 N/A3
Linux (ARMv7l) β‰ˆ188MB Requested ? ? ? ? N/A1 N/A2 N/A3
Linux (ARM64) β‰ˆ258MB Requested ? ? β‰ˆ1MB ? N/A1 N/A2 N/A3

Build time

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ5760ms β‰ˆ35368ms β‰ˆ389844ms β‰ˆ16621ms β‰ˆ643ms β‰ˆ16151ms N/A1 N/A2 N/A3
Windows (x86) β‰ˆ5760ms β‰ˆ35368ms ? ? ? ? N/A1 N/A2 N/A3
Windows (ARM64) β‰ˆ5760ms Requested ? ? ? ? N/A1 N/A2 N/A3
MacOS (x64) β‰ˆ7106ms β‰ˆ35368ms β‰ˆ219046ms ? β‰ˆ1139ms β‰ˆ72115ms N/A1 N/A2 N/A3
MacOS (arm64) β‰ˆ7106ms ? ? ? ? ? N/A1 N/A2 N/A3
Linux (x64) β‰ˆ2904ms β‰ˆ35368ms β‰ˆ380472ms β‰ˆ12681ms β‰ˆ1139ms β‰ˆ53279ms N/A1 N/A2 N/A3
Linux (x86) ? β‰ˆ35368ms ? ? ? ? N/A1 N/A2 N/A3
Linux (ARMv7l) β‰ˆ2904ms Requested ? ? ? ? N/A1 N/A2 N/A3
Linux (ARM64) β‰ˆ2904ms Requested ? ? β‰ˆ1139ms ? N/A1 N/A2 N/A3

Memory Usage - (Average of runs) Median of used memory for main process and children ones)

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ374MB (Debug) => β‰ˆ241MB (Release) β‰ˆ84MB (Debug) => β‰ˆ280MB (Release) β‰ˆ130MB (Debug) => β‰ˆ27MB (Release) β‰ˆ168MB (Debug) β‰ˆ86MB (Debug) β‰ˆ210MB (Debug) => β‰ˆ33MB (Release) N/A1 N/A2 N/A3
MacOS (x64) β‰ˆ296MB (Debug) => β‰ˆ194MB (Release) β‰ˆ114MB (Debug) => β‰ˆ271MB (Release) β‰ˆ149MB (Debug) => β‰ˆ29MB (Release) β‰ˆ159MB (Debug) β‰ˆ190MB (Debug) => β‰ˆ29MB (Release) β‰ˆ208MB (Debug) => β‰ˆ32MB (Release) N/A1 N/A2 N/A3
Linux (x64) β‰ˆ661MB (Debug) => β‰ˆ541MB (Release) β‰ˆ167MB (Debug) β‰ˆ301MB (Debug) => β‰ˆ92MB (Release) β‰ˆ294MB (Debug) β‰ˆ925MB (Debug) => β‰ˆ741MB (Release) β‰ˆ653MB (Debug) => β‰ˆ429MB (Release) N/A1 N/A2 N/A3

Memory Usage - (Average of runs) Median of difference between system measured free memory before execution and during execution)

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ179MB (Debug) => β‰ˆ89MB (Release) β‰ˆ58MB (Debug) => β‰ˆ147MB (Release) β‰ˆ199MB (Debug) => β‰ˆ134MB (Release) β‰ˆ122MB (Debug) β‰ˆ70MB (Debug) β‰ˆ268MB (Debug) => β‰ˆ145MB (Release) N/A1 N/A2 N/A3
MacOS (x64) β‰ˆ195MB (Debug) => β‰ˆ96MB (Release) β‰ˆ73MB (Debug) => β‰ˆ132MB (Release) β‰ˆ133MB (Debug) => β‰ˆ32MB (Release) β‰ˆ101MB (Debug) β‰ˆ133MB (Debug) => β‰ˆ29MB (Release) β‰ˆ198MB (Debug) => β‰ˆ38MB (Release) N/A1 N/A2 N/A3
Linux (x64) β‰ˆ102MB (Debug) => β‰ˆ57MB (Release) β‰ˆ32MB (Debug) β‰ˆ76MB (Debug) => β‰ˆ10MB (Release) β‰ˆ61MB (Debug) β‰ˆ437MB (Debug) => β‰ˆ337MB (Release) β‰ˆ249MB (Debug) => β‰ˆ128MB (Release) N/A1 N/A2 N/A3

Start duration

Electron NW.JS Tauri NodeGui Neutralino Wails Flutter .Net MAUI .Net MAUI w/ Vue
Windows (x64) β‰ˆ1795ms (Debug) => β‰ˆ402ms (Release) β‰ˆ941ms (Release) β‰ˆ4230ms (Debug) => β‰ˆ767ms (Release) β‰ˆ8798ms (Debug) ? β‰ˆ19748ms (Debug) => β‰ˆ955ms (Release) N/A1 N/A2 N/A3
MacOS (x64) β‰ˆ2287ms (Debug) => β‰ˆ746ms (Release) β‰ˆ1785ms (Release) β‰ˆ5479ms (Debug) => β‰ˆ721ms (Release) ? β‰ˆ2449ms (Debug) => β‰ˆ742ms (Release) β‰ˆ9391ms (Debug) => β‰ˆ782ms (Release) N/A1 N/A2 N/A3
Linux (x64) β‰ˆ867ms (Debug) => β‰ˆ419ms (Release) ? β‰ˆ42036ms (Debug) ? β‰ˆ2152ms (Debug) => β‰ˆ590ms (Release) β‰ˆ6096ms (Debug) => β‰ˆ450ms (Release) N/A1 N/A2 N/A3

1: Frameless mode not supported yet
2: Frameless mode not working
3: Frameless mode not working

Future content

See Issues and Pull requests. You can participate by proposing new issues, of filling them !

Contributors

List of contributors to this repository