# Web to Desktop Framework Comparison: engines, dependency chains and updater support across eight frameworks

> This repository tables how Electron, Tauri, NW.JS, Wails, NodeGui, Neutralino, Flutter and .Net MAUI differ on rendering engine, developer setup, distribution tooling and front-end framework compatibility. It is a reference, not a verdict: the tables record what each project offers but do not weigh the columns for you.

**Elanis/web-to-desktop-framework-comparison** — An objective comparison of multiple frameworks that allow us to "transform" our web apps to desktop applications.

- Repository: https://github.com/Elanis/web-to-desktop-framework-comparison
- Stars: 1,994 · Forks: 54
- Language: JavaScript
- License: MIT
- Published: 2026-10-11 · Updated: 2026-10-11 · Language: en
- Canonical page: https://hysenlabs.com/projects/elanis-web-to-desktop-framework-comparison

## Eight frameworks in one structured reference covering fifteen years of approaches

The repository collects comparison data for eight frameworks that let a web application run as a native desktop executable: Electron, Tauri, NW.JS, Wails, NodeGui, Neutralino, Flutter and .Net MAUI. Four structured tables organise them across major characteristics, features, front-end framework support and benchmarks. A GRAPHS.md file at the repository root holds visual charts of star and fork counts over time, and a benchmark/ directory alongside a runner/ directory contain the test infrastructure.

The major characteristics table is the starting point. It tracks creation dates, framework languages, rendering engines, developer dependencies, user dependencies, module support and licensing across all eight in a single view. NW.JS is the oldest entry in the comparison, created in 2011, with Electron following at 2013. Neutralino and Flutter date from 2018. Tauri, Wails and NodeGui all arrived in 2019, and .Net MAUI came last in 2020. That fifteen-year span means the table holds frameworks with settled API surfaces alongside ones still evolving rapidly, though stability is not a column the comparison tracks directly.

## Rendering engines divide the eight into three distinct approaches to displaying the UI

The engine row is where the most consequential structural difference appears. Electron bundles Chromium, meaning every application ships a full browser runtime regardless of what the application itself uses. NW.JS takes the same approach, embedding both Webkit and Chromium. Those two are the only frameworks in the comparison that package their own browser binary, which affects installer size in ways the table does not measure but the engine column makes visible.

Tauri and Wails both delegate rendering to the platform's system WebView. Tauri uses WRY, calling WebKitGTK on Linux, WebKit on macOS and Webview2 on Windows. Wails follows an identical platform division: WebKit2gtk on Linux, Webview2 on Windows and WkWebview on macOS, a choice documented in issue #611 of the comparison repository. With either of those two frameworks, the renderer comes from the operating system rather than the application package.

NodeGui sits apart from the other seven entirely. Its engine is Qt, so the front end does not use HTML and CSS at all but Qt's own widget system, even though the developer-facing language is JavaScript. Neutralino uses WebkitGTK+, Flutter runs on the Flutter engine, and .Net MAUI renders through its own layer. Of the eight, only Electron and NW.JS ship a browser binary as part of their distribution.

## Developer setup ranges from a single npm package to Rustc, Cargo and a C++ compiler

The developer dependencies row shows how much a team needs installed before the first line of application code can build. Electron, NW.JS and Neutralino are the lightest options: Electron requires Node.js and the Electron NPM package, NW.JS requires Node.js and the NW.JS SDK, and Neutralino requires Node.js and the Neu NPM package.

Tauri's setup cost is higher. It requires a C++ compiler, Node.js, Rustc and Cargo, because the framework's core is written in Rust and the build step links Rust code directly. Wails requires Go 1.18 or newer, Node.js 15 or newer and the Wails CLI. NodeGui requires Cmake, make, Node.js and the NodeGUI NPM package, so native compilation tooling is mandatory there too. Flutter requires the Flutter SDK plus either Visual Studio 2019 or Clang depending on the target operating system. .Net MAUI requires the .Net SDK as its baseline, with Visual Studio, WebView2 and Xcode each listed as optional additions.

All eight frameworks list user dependencies as None. Once compiled and distributed, an application built on any of these eight frameworks requires no runtime installation on the end user's machine.

## The auto-updater column shows which frameworks solved in-place distribution on their own terms

The integrated updater column records whether each framework ships a mechanism for delivering updates without requiring a manual reinstall. Electron, Tauri and Neutralino each provide an official integrated updater. NW.JS has a community-maintained updater solution rather than an official one. Wails lists the feature as planned, linking to issue #1178 in the Wails repository. NodeGui has no updater at all, and the issue linked in the comparison table confirms no current plans exist for one. The table records 'No, but there are community solutions' for Flutter. .Net MAUI also has no integrated updater.

For projects that need to deliver patches silently to end users, this column eliminates options before any code is written. Three frameworks offer an official path; one offers a community option; one has a roadmap entry; and three have nothing. Choosing a framework with no updater support means building or adopting a separate distribution mechanism before the second version ships to anyone, which changes both the architecture and the maintenance burden from the start.

## NodeGui's React binding is listed as official in the table and simultaneously marked end-of-life

The front-end framework compatibility table tracks support for Angular, NextJS, Preact, Qwik, React and Svelte across the eight, noting whether each is official, community-maintained or absent. The React row for NodeGui contains a detail that a quick scan of the column would miss.

The cell reads 'Yes, official but EOL': react-nodegui was the officially maintained React integration for NodeGui and has since been declared end-of-life. No other cell in the entire front-end table combines official status with an EOL declaration. A developer reading the React column heading for NodeGui and seeing only 'Yes, official' without reading the complete cell text would draw the wrong conclusion about what is actively maintained. The qualifier changes the practical answer from a usable integration to an abandoned one.

Electron and Tauri both show active, end-of-life-free React paths, and Wails has wails-react-scripts. Flutter and .Net MAUI list no React support, which follows from their non-HTML rendering architectures. NextJS coverage is narrower than React coverage across the table: Tauri shows official support, Wails links to community templates, and the remaining six frameworks show question marks or blank entries for NextJS.

## Neutralino has no back-end package manager, the only framework in the row with that gap

The dependencies and modules support row is where Neutralino diverges from the rest. All seven other frameworks list a defined back-end package manager. Electron, NW.JS and NodeGui support npm and Node.js native addons. Tauri pairs Cargo for back-end code with npm for front-end work, and Wails pairs Go modules for back-end with npm for front-end. Flutter uses pub.dev, and .Net MAUI uses NuGet. Neutralino's cell in that row is a cross symbol, and it is the only cross in the entire column.

That mark means no back-end package manager is available in Neutralino at all. Application code that relies on npm packages running in the main process, or native addons compiled from C or C++, cannot use Neutralino as its host runtime. The README does not describe a workaround for this constraint, and the gap is specific to back-end code: front-end npm packages used inside the WebView are a separate matter.

For teams that would otherwise choose Neutralino because of its lighter developer dependency footprint, this limitation is the first requirement to check. If all logic runs in the front end and no main-process npm packages are necessary, the constraint does not block anything. If they are required, no other characteristic of the framework compensates for the absence.

## Reading the tables against real requirements, and where the comparison still has gaps

Using this comparison means reading its tables against the specific needs of the project at hand, not scanning for a winner. The repository is structured around README.md, with GRAPHS.md providing star and fork visualisation and the benchmark/ directory holding the test infrastructure. Two benchmark categories appear in the table of contents: an empty app test and an empty app frameless test. Benchmark numbers themselves are not in the README; they live in the benchmark/ directory.

The features table has openly incomplete entries. Wails, NodeGui and Neutralino each show question marks under automated tests. That means the comparison does not report what those frameworks offer in that dimension, and a question mark should be read as 'unconfirmed' rather than 'none'. Whether a specific cell is current requires checking the relevant framework's own documentation, since the comparison depends on contributors updating cells when the underlying projects change.

The last push to the repository was on 2026-10-02. In the major characteristics table, Tauri, Electron, NW.JS, Wails, Neutralino, Flutter and .Net MAUI all show a last update of 10/2026. NodeGui shows 5/2026, making it the only entry in that column with a date more than a few months behind the others.

## Conclusion

This repository is most useful before a framework choice is made, not after. If a project needs an official auto-updater from the first release, Electron, Tauri and Neutralino are the only three that provide one, and the table reflects that. If back-end code relies on npm packages, Neutralino is out. If the team knows only JavaScript and has no Rust or Go experience, Tauri and Wails each require a toolchain that is not trivial to set up. Check the cells relevant to your requirements against each framework's current documentation, because the question marks in the automated-test row show where the comparison is still incomplete.

## FAQ

### What is web-to-desktop-framework-comparison?

It is a MIT-licensed GitHub repository that tables the characteristics, features and front-end compatibility of eight web-to-desktop frameworks side by side: Electron, Tauri, NW.JS, Wails, NodeGui, Neutralino, Flutter and .Net MAUI. It provides structured comparison data rather than a recommendation.

### Which web-to-desktop frameworks include an official auto-updater?

Electron, Tauri and Neutralino each provide an official integrated updater according to the comparison table. NW.JS has a community-maintained updater. Wails lists it as planned in issue #1178. NodeGui and .Net MAUI have no updater, and Flutter has no official one though community solutions are noted.

### Does Electron bundle its own browser engine?

The comparison table lists Electron's engine as Chromium, meaning it packages a full browser runtime with every application. NW.JS also bundles Webkit and Chromium. Tauri and Wails use the operating system's built-in WebView component instead of shipping a browser binary.

### Can I use React with all eight frameworks in this comparison?

No. Flutter and .Net MAUI list no React support given their non-HTML rendering stacks. NodeGui lists React support as official but marks the react-nodegui binding as end-of-life. Electron, Tauri, NW.JS, Neutralino and Wails each show an active React path.

### Does Neutralino support npm packages for back-end code?

The comparison table marks Neutralino with a cross in the dependencies and modules support row, the only framework to receive that mark. It has no back-end package manager, so npm packages running in the main process are not available in Neutralino.

## Sources

- [Elanis/web-to-desktop-framework-comparison on GitHub](https://github.com/Elanis/web-to-desktop-framework-comparison)
- [Issues](https://github.com/Elanis/web-to-desktop-framework-comparison/issues)
- [License: MIT](https://github.com/Elanis/web-to-desktop-framework-comparison/blob/main/LICENSE)
- [README](https://github.com/Elanis/web-to-desktop-framework-comparison/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/elanis-web-to-desktop-framework-comparison
