Web to Desktop framework comparison

Overview

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 ✔️ 2 ✔️

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
Comments
  • Bump serde_json from 1.0.86 to 1.0.87 in /benchmark/01-empty-app/tauri/src-tauri

    Bump serde_json from 1.0.86 to 1.0.87 in /benchmark/01-empty-app/tauri/src-tauri

    Bumps serde_json from 1.0.86 to 1.0.87.

    Release notes

    Sourced from serde_json's releases.

    v1.0.87

    • Add write_i128 and write_u128 methods to serde_json::Formatter to control the formatting of 128-bit integers (#940, thanks @​Lucretiel)
    Commits
    • 993e7a6 Release 1.0.87
    • 3107034 Eliminate needless 'tri!' from Serializer impl
    • 46c9778 Merge pull request #942 from serde-rs/integer128
    • 37e76e0 Assume serde_if_integer128 is true
    • ec0456a Use existing macros to implement 128-bit From impls
    • c183125 Merge pull request #941 from serde-rs/alloc
    • ab0f884 Delete 1.36+ caveat from descriptions of alloc feature
    • 486598b Merge pull request 940 from Lucretiel/int128
    • 84d6d95 Add direct support for i128 and u128 via itoa
    • See full diff in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies rust 
    opened by dependabot[bot] 4
  • Bump @types/node from 18.11.0 to 18.11.3 in /benchmark/02-empty-app-frameless/nodegui

    Bump @types/node from 18.11.0 to 18.11.3 in /benchmark/02-empty-app-frameless/nodegui

    Bumps @types/node from 18.11.0 to 18.11.3.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 4
  • Bump electron from 21.1.0 to 21.1.1 in /benchmark/02-empty-app-frameless/electron

    Bump electron from 21.1.0 to 21.1.1 in /benchmark/02-empty-app-frameless/electron

    Bumps electron from 21.1.0 to 21.1.1.

    Release notes

    Sourced from electron's releases.

    electron v21.1.1

    Release Notes for v21.1.1

    Fixes

    • Fixed a drag-and-drop issue on macOS where items would be incorrectly moved instead of copied in some contexts. #35977 (Also in 20, 22)
    • Fixed a potential memory leak. #35965 (Also in 22)
    • Fixed an issue where some options were incorrectly ignored when using webContents.printToPDF(). #35992 (Also in 22)
    • Fixed on-screen-keyboard not hiding on input rendered in webview is blurred. #35982 (Also in 20, 22)
    • You can now import the built-in electron module via ESModule loaders, i.e. import('electron') and import 'electron' now work natively. #35958 (Also in 20, 22)

    Other Changes

    • Modified the Windows 11 WCO to match the native look more closely. #35970 (Also in 20)
    • Updated Chromium to 106.0.5249.103. #35933
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 3
  • Bump tar from 0.4.35 to 0.4.38 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bump tar from 0.4.35 to 0.4.38 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bumps tar from 0.4.35 to 0.4.38.

    Commits
    • dc78ebe Bump to 0.4.38
    • de72a30 Add a method to write a link name without canonicalization (#274)
    • ec5edf1 Add an append_link() method to handle long link targets (#273)
    • 5a1c8ea Add public constructor for PaxExtensions (#271)
    • 8333ef6 Avoid reallocating Strings when creating TarError (#269)
    • 1890555 Consolidate some methods and tweak some lifetimes
    • 64b8e1b Add support for readers that implement Seek (#218) (#266)
    • a2a82e6 Fix the second overflow with self.next
    • de08ca1 Fix an overflow when rounding up the size of a file
    • 60c6bd8 Use rust birthday for HeaderMode::Deterministic timestamp (#262)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 3
  • Bump regex from 1.5.4 to 1.5.6 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bump regex from 1.5.4 to 1.5.6 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bumps regex from 1.5.4 to 1.5.6.

    Changelog

    Sourced from regex's changelog.

    1.5.6 (2022-05-20)

    This release includes a few bug fixes, including a bug that produced incorrect matches when a non-greedy ? operator was used.

    1.5.5 (2022-03-08)

    This releases fixes a security bug in the regex compiler. This bug permits a vector for a denial-of-service attack in cases where the regex being compiled is untrusted. There are no known problems where the regex is itself trusted, including in cases of untrusted haystacks.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 3
  • Bump tokio from 1.9.0 to 1.19.2 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bump tokio from 1.9.0 to 1.19.2 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bumps tokio from 1.9.0 to 1.19.2.

    Release notes

    Sourced from tokio's releases.

    Tokio v1.19.1

    1.19.1 (June 5, 2022)

    This release fixes a bug in Notified::enable. (#4747)

    #4747: tokio-rs/tokio#4747

    Tokio v1.19.0

    1.19.0 (June 3, 2022)

    Added

    • runtime: add is_finished method for JoinHandle and AbortHandle (#4709)
    • runtime: make global queue and event polling intervals configurable (#4671)
    • sync: add Notified::enable (#4705)
    • sync: add watch::Sender::send_if_modified (#4591)
    • sync: add resubscribe method to broadcast::Receiver (#4607)
    • net: add take_error to TcpSocket and TcpStream (#4739)

    Changed

    • io: refactor out usage of Weak in the io handle (#4656)

    Fixed

    • macros: avoid starvation in join! and try_join! (#4624)

    Documented

    • runtime: clarify semantics of tasks outliving block_on (#4729)
    • time: fix example for MissedTickBehavior::Burst (#4713)

    Unstable

    • metrics: correctly update atomics in IoDriverMetrics (#4725)
    • metrics: fix compilation with unstable, process, and rt, but without net (#4682)
    • task: add #[track_caller] to JoinSet/JoinMap (#4697)
    • task: add Builder::{spawn_on, spawn_local_on, spawn_blocking_on} (#4683)
    • task: add consume_budget for cooperative scheduling (#4498)
    • task: add join_set::Builder for configuring JoinSet tasks (#4687)
    • task: update return value of JoinSet::join_one (#4726)

    #4498: tokio-rs/tokio#4498 #4591: tokio-rs/tokio#4591 #4607: tokio-rs/tokio#4607 #4624: tokio-rs/tokio#4624 #4656: tokio-rs/tokio#4656 #4671: tokio-rs/tokio#4671 #4682: tokio-rs/tokio#4682 #4683: tokio-rs/tokio#4683 #4687: tokio-rs/tokio#4687 #4697: tokio-rs/tokio#4697 #4705: tokio-rs/tokio#4705 #4709: tokio-rs/tokio#4709 #4713: tokio-rs/tokio#4713 #4725: tokio-rs/tokio#4725 #4726: tokio-rs/tokio#4726 #4729: tokio-rs/tokio#4729

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 3
  • Bump crossbeam-utils from 0.8.5 to 0.8.8 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bump crossbeam-utils from 0.8.5 to 0.8.8 in /benchmark/02-empty-app-headless/tauri/src-tauri

    Bumps crossbeam-utils from 0.8.5 to 0.8.8.

    Release notes

    Sourced from crossbeam-utils's releases.

    crossbeam-utils 0.8.8

    • Fix a bug when unstable loom support is enabled. (#787)

    crossbeam-utils 0.8.7

    • Add AtomicCell<{i*,u*}>::{fetch_max,fetch_min}. (#785)
    • Add AtomicCell<{i*,u*,bool}>::fetch_nand. (#785)
    • Fix unsoundness of AtomicCell<{i,u}64> arithmetics on 32-bit targets that support Atomic{I,U}64 (#781)

    crossbeam-utils 0.8.6

    • Re-add AtomicCell<{i,u}64>::{fetch_add,fetch_sub,fetch_and,fetch_or,fetch_xor} that were accidentally removed in 0.8.0 0.7.1 on targets that do not support Atomic{I,U}64. (#767)
    • Re-add AtomicCell<{i,u}128>::{fetch_add,fetch_sub,fetch_and,fetch_or,fetch_xor} that were accidentally removed in 0.8.0 0.7.1. (#767)
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies rust 
    opened by dependabot[bot] 3
  • Update README.md - Web Support

    Update README.md - Web Support

    All these libraries rely on HTML, CSS, JS for frontend. Saying they don't support web is confusing. If this theory is incorrect, what all should these libraries do, so we can say they support web?

    documentation 
    opened by xerosanyam 3
  • How to run Neutralinojs benchmark source

    How to run Neutralinojs benchmark source

    Hi, I have tried running neutralinojs benchmark on Linux with different neu CLI versions, the CLI complaints about the bin file not existing.

    here are screen shots:

    tried with latest neu-cli:

    image

    tried with older version of neu-cli: image

    could you post your way to run or build the benchmark source?

    question library-specific 
    opened by oHaiyang 3
  • [ Question ] Neutralinojs supports web as a target (or not)?

    [ Question ] Neutralinojs supports web as a target (or not)?

    If we run the Neutralinojs in cloud mode and bind to a domain, anyone can access it as a web application. But all the native functionalities won't run purely inside the browser. So maybe we could add a small hint about this scenario into your comparison. Maybe "Partial" instead of the red icon in the "Operating System" section?

    Just an idea. you can check more about cloud mode here: https://neutralino.js.org/docs/developer-environment/modes#cloud

    Thanks for creating an awesome comparison!

    doc-enhancement library-specific 
    opened by shalithasuranga 3
  • Bump webpack-cli from 4.10.0 to 5.0.0 in /benchmark/02-empty-app-frameless/nodegui

    Bump webpack-cli from 4.10.0 to 5.0.0 in /benchmark/02-empty-app-frameless/nodegui

    Bumps webpack-cli from 4.10.0 to 5.0.0.

    Release notes

    Sourced from webpack-cli's releases.

    v5.0.0

    5.0.0 (2022-11-17)

    Bug Fixes

    • improve description of the --disable-interpret option (#3364) (bdb7e20)
    • remove the redundant utils export (#3343) (a9ce5d0)
    • respect NODE_PATH env variable (#3411) (83d1f58)
    • show all CLI specific flags in the minimum help output (#3354) (35843e8)

    Features

    • failOnWarnings option (#3317) (c48c848)
    • update commander to v9 (#3460) (6621c02)
    • added the --define-process-env-node-env option
    • update interpret to v3 and rechoir to v0.8
    • add an option for preventing interpret (#3329) (c737383)

    BREAKING CHANGES

    • the minimum supported webpack version is v5.0.0 (#3342) (b1af0dc), closes #3342
    • webpack-cli no longer supports webpack v4, the minimum supported version is webpack v5.0.0
    • webpack-cli no longer supports webpack-dev-server v3, the minimum supported version is webpack-dev-server v4.0.0
    • remove the migrate command (#3291) (56b43e4), closes #3291
    • remove the --prefetch option in favor the PrefetchPlugin plugin
    • remove the --node-env option in favor --define-process-env-node-env
    • remove the --hot option in favor of directly using the HotModuleReplacement plugin (only for build command, for serve it will work)
    • the behavior logic of the --entry option has been changed - previously it replaced your entries, now the option adds a specified entry, if you want to return the previous behavior please use webpack --entry-reset --entry './src/my-entry.js'
    Changelog

    Sourced from webpack-cli's changelog.

    5.0.0 (2022-11-17)

    Bug Fixes

    • improve description of the --disable-interpret option (#3364) (bdb7e20)
    • remove the redundant utils export (#3343) (a9ce5d0)
    • respect NODE_PATH env variable (#3411) (83d1f58)
    • show all CLI specific flags in the minimum help output (#3354) (35843e8)

    Features

    • failOnWarnings option (#3317) (c48c848)
    • update commander to v9 (#3460) (6621c02)
    • added the --define-process-env-node-env option
    • update interpret to v3 and rechoir to v0.8
    • add an option for preventing interpret (#3329) (c737383)

    BREAKING CHANGES

    • the minimum supported webpack version is v5.0.0 (#3342) (b1af0dc), closes #3342
    • webpack-cli no longer supports webpack v4, the minimum supported version is webpack v5.0.0
    • webpack-cli no longer supports webpack-dev-server v3, the minimum supported version is webpack-dev-server v4.0.0
    • remove the migrate command (#3291) (56b43e4), closes #3291
    • remove the --prefetch option in favor the PrefetchPlugin plugin
    • remove the --node-env option in favor --define-process-env-node-env
    • remove the --hot option in favor of directly using the HotModuleReplacement plugin (only for build command, for serve it will work)
    • the behavior logic of the --entry option has been changed - previously it replaced your entries, now the option adds a specified entry, if you want to return the previous behavior please use webpack --entry-reset --entry './src/my-entry.js'
    Commits
    • 1d6ada1 chore(release): 5.0.0 (#3492)
    • 24334d9 refactor: resolve TODO for devServer.stdin
    • 49b6aea chore: peer deps in root package
    • 636ba3e chore(deps-dev): bump cspell from 6.12.0 to 6.14.2 (#3488)
    • f3016a5 chore(deps-dev): bump eslint from 8.24.0 to 8.27.0 (#3487)
    • 5782242 chore(deps-dev): bump lerna from 6.0.1 to 6.0.3 (#3486)
    • 80eb8c8 chore(deps-dev): bump @​commitlint/config-conventional (#3485)
    • 8ea9020 chore(deps-dev): bump ts-jest from 29.0.1 to 29.0.3 (#3484)
    • 515971a chore(deps-dev): bump css-loader from 6.7.1 to 6.7.2 (#3481)
    • f106109 chore(deps-dev): bump @​typescript-eslint/eslint-plugin
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 2
  • Memory usage is very incorrect on some projects

    Memory usage is very incorrect on some projects

    Some projects use the system webview, when they allocate and use the system webivew the memory is allocated by the system and so it shows up as being used by the system. It unfortunately is not actually tracked against the process. This gives you a very invalid idea of how much memory the actual process is actually using...

    For example, Wails (or Tauri) might just 40m memory usage, but the system might be using another 60m of memory for the webview instance that it is managing on behalf of the Tauri/Wails app. To get the actual memory usage of these types of projects, you need to measure total system memory usage before app is ran, and then while app is being ran to see how much memory the system had to allocate for the process. Doing this either multiple times in a row or running the app multiple times at the same time can give you the approximate memory usage the system is allocating for each run of app that is using a system webview. (Please note, when checking global memory you will also need to check for additional used swap memory usage, and ignore any memory used or freed by caches)

    In my tests, the majority of the memory is NOT shared between instances and is allocated per instance of the app. Even though the system is allocating the memory, it is purely for the app and is not actually shared.


    One other very minor nitpick, the html used in each app (for those using a webview) should be as close to identical as possible. For example if I do <div>This is Electron</div> and do <div><p><b>This is NW.JS</b></p></div> the memory NW.JS uses in the webview will be more than Electron, because you now have three HTMLNodes having to be allocated by the webview in NW.JS vs the one in Electron. So to make things a lot closer, I would recommend that at least for your base tests, that the html displayed is as close to identical as possible to eliminate any extra css or html that has to be rendered, processed and allocated... :grinning:

    doc-enhancement benchmark-tool automation 
    opened by NathanaelA 1
  • Bump minimatch from 3.0.4 to 3.1.2 in /benchmark/02-empty-app-frameless/nodegui

    Bump minimatch from 3.0.4 to 3.1.2 in /benchmark/02-empty-app-frameless/nodegui

    Bumps minimatch from 3.0.4 to 3.1.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the Security Alerts page.
    dependencies javascript 
    opened by dependabot[bot] 0
  • Add Avalonia to the list

    Add Avalonia to the list

    Avalonia is yet another cross-platform GUI toolkit built on top of the Skia engine (the same engine powering Flutter) for dotnet. It targets Windows, Linux, macOS and has beta support for Android and iOS, as well as an early support to Wasm.

    library-specific lib-adding .NET 
    opened by brainwo 0
  • Add FeathersUI to the list

    Add FeathersUI to the list

    FeathersUI is an open source cross-platform UI framework for Haxe language. It's quite adopted by many apps including one game published by Ubisoft. https://feathersui.com/ https://github.com/feathersui/feathersui-openfl/

    lib-adding 
    opened by brainwo 1
  • Only re-run application benchmark that have been updated to make action faster

    Only re-run application benchmark that have been updated to make action faster

    e.g. if we only modified something in 01-empty-app, only run this one.

    We still need to run every library example as we're probably gonna get another machine than the previous one, so we need to run benchmark on a compatible base.

    benchmark-tool automation 
    opened by Elanis 0
  • Crash when benchmarking release version of nw.js example on linux x64

    Crash when benchmarking release version of nw.js example on linux x64

    Error:  stderr: [10259:10259:1101/121205.499488:FATAL:spawn_subprocess.cc(221)] posix_spawn: Permission denied (13)
    #0 0x7f19ea726033 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x5f1b032)
    #1 0x7f19ea73aa53 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x5f2fa52)
    #2 0x7f19ea73ba5a (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x5f30a59)
    #3 0x7f19eb3032f3 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x6af82f2)
    #4 0x7f19eb2f86a3 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x6aed6a2)
    #5 0x7f19ecf864f7 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x877b4f6)
    #6 0x7f19ecf7f18e (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x877418d)
    #7 0x7f19e69dcfda (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x21d1fd9)
    #8 0x7f19ea29fd19 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x5a94d18)
    #9 0x7f19ea29d86a (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x5a92869)
    #10 0x7f19ea29dc61 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x5a92c60)
    #11 0x7f19e69db1e7 (/home/runner/work/web-to-desktop-framework-comparison/web-to-desktop-framework-comparison/benchmark/01-empty-app/nw.js/dist/01-empty-app-1.0.0-linux-x64/lib/libnw.so+0x21d01e6)
    #12 0x7f19e45e7083 (/usr/lib/x86_64-linux-gnu/libc-2.31.so+0x24082)
    
    bug library-specific 
    opened by Elanis 0
Owner
Axel
Game dev & Web Dev. Founder of Dysnomia (https://dysnomia.studio) a company that create and manage websites & games !
Axel
Appupdater is a C++ cross-platform framework to update desktop software (gitlab mirror)

appupdater is a C++ cross-platform framework to update desktop software. How it works Framework checks the URL you specified for info about versions a

Ronzhin Mikhail 1 Jan 8, 2022
The c++ micro framework for building web applications based on workflow

wfrest The c++ micro framework for building web applications based on workflow ⌛️ Build Step 1 : install workflow git clne [email protected]:sogou/workfl

Shiyu Yi 507 Nov 20, 2022
A beginner friendly desktop UI for Tasmota flashed devices for Windows, macOS and Linux.

TasmoManager A beginner friendly desktop UI for Tasmota flashed devices for Windows, macOS and Linux. Features Native Tasmota device discovery (via ta

Tom Butcher 49 Nov 20, 2022
Add virtual monitors to your windows 10 device! Works with Oculus software, obs, and any desktop sharing software

License MIT and CC0 or Public Domain, whichever is least restrictive -- Use it AS IS - NO IMPLICIT OR EXPLICIT warranty This may break your computer,

Rashi Abramson 221 Nov 26, 2022
A Flutter package that makes it easy to customize and work with your Flutter desktop app's system tray.

system_tray A Flutter package that that enables support for system tray menu for desktop flutter apps. on Windows, macOS and Linux. Features: - Modify

AnTler 132 Nov 11, 2022
This plugin allows Flutter desktop apps to defines system tray.

tray_manager This plugin allows Flutter desktop apps to defines system tray. tray_manager Platform Support Quick Start Installation ⚠️ Linux requireme

LeanFlutter 115 Nov 21, 2022
ContactGot is an offline desktop app, where clients can leave their info, while an administrator can manage which information they need to gather on certain projects.

ContactGot Contents Description How to use Requirements Engineering Installation Documentation Design Architecture Demonstration 1. Description During

Elizaveta 15 Sep 17, 2022
ESP32 based Desktop Clock

ESP32_Desktop_Clock ESP32 based Desktop Clock This ESP32 internet of things desktop clock is a project created for my home. School has started and fal

Mike Rankin 75 Nov 16, 2022
A backend implementation for xdg-desktop-portal

xdg-desktop-portal-lxqt A backend implementation for xdg-desktop-portal that is using Qt/KF5. Building xdg-desktop-portal-lxqt Dependencies: xdg-deskt

LXQt 8 Aug 27, 2022
Temporary Directory for Desktop Build

flutter_tips A new Flutter application. Getting Started This project is a starting point for a Flutter application. A few resources to get you started

Paras Jain 1 Nov 2, 2021
This plugin allows Flutter desktop apps to Auto launch on startup / login.

This plugin allows Flutter desktop apps to Auto launch on startup / login.

LeanFlutter 40 Nov 4, 2022
This plugin allows Flutter desktop apps to defines system/inapp wide hotkey (i.e. shortcut).

hotkey_manager This plugin allows Flutter desktop apps to defines system/inapp wide hotkey (i.e. shortcut). hotkey_manager Platform Support Quick Star

LeanFlutter 77 Oct 30, 2022
Windscribe 2.0 desktop client for Windows, Mac and Linux

Windscribe 2.0 Desktop Application This repo contains the complete source code for the Windscribe 2.0 app. This includes installer, service/helper, ba

Windscribe 344 Nov 22, 2022
Telegram Desktop messaging app

Telegram Desktop – Official Messenger This is the complete source code and the build instructions for the alpha version of the official desktop client

Telegram Desktop 20.3k Nov 16, 2022
SDK for building cross-platform desktop apps in ANSI-C

NAppGUI Cross-Platform C SDK. Build portable desktop applications for Windows, macOS and Linux, using just C. Quick start in Windows Prerequisites Vis

Francisco García Collado 234 Nov 19, 2022
Dwm_lut - Apply 3D LUTs to the Windows desktop for system-wide color correction/calibration

About This tool applies 3D LUTs to the Windows desktop by hooking into DWM. It works in both SDR and HDR modes, and uses tetrahedral interpolation on

null 195 Nov 13, 2022
Dock - Desktop Taskbar.

Dock CutefishOS application dock. Dependencies sudo pacman -S gcc cmake qt5-base qt5-quickcontrols2 kwindowsystem You also need fishui and libcutefish

CutefishOS 94 Nov 13, 2022
A npm package that lets you automate your windows desktop.

js-macro A npm package that lets you automate your windows desktop. npm i js-macro Examples Simple cursor usage const { cursor } = require("js-macro"

5 Jul 30, 2022
A npm package that lets you automate your windows desktop.

js-macro A npm package that lets you automate your windows desktop. npm i js-macro Examples Simple cursor usage const { cursor } = require("js-macro"

5 Jul 30, 2022