finds.dev

// 8 picks · reviewed October 2026

The Best Open Source Desktop App Frameworks in 2026

Cross-platform desktop used to mean either learning Qt or building three separate native apps. Now it usually means picking how much browser you're willing to ship: a full bundled Chromium (Electron, NW.js), the OS's own webview (Tauri, Wails, Neutralino), an actual native rendering engine (Avalonia), or a Flutter engine you don't have to hand-code (Flet). Dioxus tries to split the difference depending on target.

What actually separates these eight isn't features — most of them can build a window, a tray icon, and an installer. It's the runtime you're already in. A Node team reaches for Electron or NW.js, a Rust team for Tauri or Dioxus, Go for Wails, .NET for Avalonia, Python for Flet. The honest tradeoff inside each lane is size and maturity versus how rough the edges still are.

  1. 01electron
  2. 02tauri
  3. 03Avalonia
  4. 04wails
  5. 05dioxus
  6. 06neutralinojs
  7. 07flet
  8. 08nw.js

★ 123,356C++MITupdated Oct 2026

best for teams wanting the most mature ecosystem and docs, where dev speed matters more than binary size

Electron is the safe default, and the reason is less about the technology than about scale: the problems you're about to run into have already been hit by whoever built Slack, Discord, VS Code, or 1Password, and the fix is probably a documented one. For dev speed, nothing else on this page beats it.

That maturity cuts both ways, though. Half the Electron tutorials and answers still floating around teach the old insecure pattern — nodeIntegration on, contextIsolation off — because that used to be the default, and it's still easy to copy-paste your way into a renderer that can touch the filesystem. Every app also ships its own Chromium and Node, so a hello-world installer lands at 150-200MB before you've written a line of your own code; Tauri, Wails, and Neutralino all exist specifically to avoid that. And even with electron-builder, signing and notarizing across three operating systems is still a multi-day project — surprising for something this mature.

★ 105,841RustApache-2.0updated Apr 2026

best for teams who want Electron's web-tech workflow without 100MB+ bundles, with auto-update built in

Tauri is what people mean when they say 'Electron but smaller.' It uses the OS's own webview instead of bundling Chromium, so a hello-world app is under 10MB instead of 150, and the capability-based permission system — JSON files that say exactly what each plugin and IPC call is allowed to touch, checked at compile time — is a more serious security model than Electron ships by default. Two independent audits back that up.

The catch is that using the OS webview means inheriting whatever that webview is bad at. Linux on an older Ubuntu gets WebKitGTK, which has real gaps in CSS and JS support compared to WebView2 or WKWebView, and you won't find out until you actually test on that box — there's no Chromium version floor to reason about the way there is with Electron. The bigger wall for a lot of teams is that Rust is mandatory for anything on the backend; a JS-only team can ship the frontend fine and then hit a dead stop the moment they need logic beyond what a plugin already provides.

★ 30,641C#MITupdated Apr 2026

best for .NET teams who want an actually-native rendering engine instead of an embedded browser

Avalonia is the one framework on this list that isn't wrapping a browser or a webview — it draws its own controls with Skia, so the UI is actually consistent across Windows, macOS, and Linux rather than inheriting whatever quirks the local webview has, which is exactly the problem Tauri, Wails, and Neutralino all have to live with. For a .NET team, it's the closest thing to a modern WPF replacement that still runs everywhere, and it's proven in production in Rider and GitHub Desktop.

The 'it's basically WPF' pitch undersells the migration cost. Avalonia's styling system is CSS-like rather than WPF's ResourceDictionary selectors, bindings and triggers differ in subtle ways, and a non-trivial app will surface missing controls faster than the docs suggest. The third-party control ecosystem is also thin next to WPF or WinForms, so anything outside the built-in set is often your own build. And if mobile or web is the actual primary target rather than a nice-to-have, this isn't the strongest pick here for either — mobile support lags desktop, and WASM carries real startup and payload costs.

★ 35,046GoMITupdated Jul 2026

best for Go backends that want a lightweight webview front end without adopting a Rust toolchain

Wails is Tauri's pitch for Go instead of Rust: no bundled Chromium, a 5-10MB binary, and — genuinely useful — auto-generated TypeScript types for your Go structs and methods, so the Go/JS boundary is type-safe without hand-written glue. v2 has been stable for years with real production apps behind it.

The thing to know going in is that v3 has been in alpha for a long time with no committed date to stable, so starting on v2 today means a breaking migration is somewhere in your future, not avoided. Linux is also the weaker platform here — GTK WebView has rendering quirks that macOS and Windows don't — and the Go-to-JS binding model, while clean for simple calls, gets awkward fast once you need streaming or complex async; you end up hand-building event plumbing that something like Dioxus handles more natively. There's no mobile story either, despite a stray IOS_ARCHITECTURE.md file sitting in the repo — this is desktop only.

★ 35,819RustApache-2.0updated Apr 2026

best for Rust teams who want one codebase targeting desktop, web and mobile without writing JavaScript

Dioxus is the most ambitious thing on this page — one Rust codebase targeting desktop, web, mobile, and server-rendered, with a signals-based reactivity model that's genuinely closer to SolidJS than to React's re-render-everything approach. The dx CLI backs that up with real tooling: subsecond hot-patching, an asset pipeline, and direct bundling to .ipa and .apk.

Two things to weigh against that. First, despite being a Rust framework, desktop rendering still defaults to a webview under the hood — the experimental GPU-based renderer that would make it genuinely native isn't production-ready yet, so you're not actually escaping the webview problem that Tauri and Wails also have. Second, this is pre-1.0 with a real history of breaking API changes release over release — every minor version from 0.3 to 0.7 has required rework. If you need something to not move under you for the next two years, Avalonia or Electron are steadier ground.

★ 8,672CNOASSERTIONupdated Oct 2026

best for the smallest possible footprint when you don't need Tauri's Rust build chain

Neutralino's pitch is the smallest possible footprint with the least ceremony: no bundled Chromium, no Rust toolchain to install, sub-second builds, and a WebSocket bridge that lets you write native logic in whatever language can spawn a child process. If Tauri still feels heavy, this is the lighter alternative.

What you give up for that simplicity is everything Tauri built on top of the same basic idea. Rendering is just whatever the OS webview happens to do, so you get the same Linux/macOS/Windows inconsistency as Tauri without the compile-time permission system that makes Tauri's IPC trustworthy. The dependency list is also a sprawl of vendored C++ libraries — asio, mbedtls, websocketpp — that all need patching individually, and there's no clear story for hardening the WebSocket channel against another local process scanning ports and talking to it. Fine for a small internal tool; worth a harder look before anything handling sensitive data.

★ 16,394PythonApache-2.0updated Jul 2026

best for Python teams who want a desktop UI without picking up a JS frontend

Flet is the only framework here aimed at Python rather than JS or Rust, and it earns that niche honestly — it wraps Flutter for rendering, so widgets look genuinely native rather than like web components pretending, and a data scientist can ship a mobile app that imports pandas and opencv directly, which nothing else on this page can do.

The pitch of 'no frontend experience required' has a ceiling, and it's lower than it sounds. The 150 built-in controls cover a lot, but going past them means writing Dart to wrap a Flutter package — the exact skill the pitch promised you wouldn't need. The web story is split in an awkward way too: server mode means every click is a network round-trip to your Python process, which feels sluggish on anything but a fast connection, while the client-side WASM/Pyodide path avoids that but breaks on packages with C extensions and costs 5-10 seconds just to load cold. Worth knowing before you commit: the project has rewritten its internals more than once, and upgrading an older Flet app has historically meant real rework, not a version bump.

★ 41,147JavaScriptMITupdated Sep 2026

best for apps that need direct Node.js access from the DOM, without Electron's process separation

NW.js predates Electron and makes the opposite bet: Node and the page share the same context, so you call require() straight from the DOM with no IPC, no contextBridge, no marshaling. If your app only ever loads trusted content and you want the full Node API with zero plumbing, that's a real simplification Electron doesn't offer.

It's also the exact decision Electron's whole security model exists to avoid. Any page with Node access is a huge attack surface the moment it loads anything remote or untrusted, and there's none of Electron's sandboxing-by-default to catch a mistake. The ecosystem has shrunk hard in the years since Electron took over — fewer boilerplates, fewer answers, a smaller plugin set — and the project shows its age in smaller ways too: the README's binary verification instructions still point at an SKS keyserver network that's been dead for years. It's still shipping real releases after fifteen years, which says something, but you're choosing a quieter, riskier path than Electron for not much upside unless unmediated Node access is specifically what you need.

// questions people ask

Before you choose

Electron vs Tauri — which should I actually pick?

Pick Electron if you need the widest ecosystem and don't care about binary size; pick Tauri if size and memory matter and you're fine writing backend logic in Rust. Tauri's capability-based permissions are also a meaningfully better security default than Electron's, which still requires you to enable contextIsolation yourself.

Is Avalonia a good replacement for WPF?

Close, but not a drop-in one. The styling system is CSS-like rather than WPF's ResourceDictionary selectors, and you'll hit missing controls and binding differences in anything non-trivial — budget real migration time, not a rebuild weekend.

Which of these has the smallest binary size?

Neutralino and Wails both land apps in the 5-10MB range by skipping a bundled browser entirely and using the OS webview instead. Tauri is close behind; Electron and NW.js, which both ship their own Chromium, start at 150MB before you write any code.

Do any of these support mobile as well as desktop?

Avalonia, Dioxus, and Flet all target iOS and Android from the same codebase, though none of the three treat mobile as a first-class citizen yet — expect rougher tooling, more Xcode and Android Studio friction, and thinner platform integration than a dedicated mobile framework.

None of these are wrong, exactly — they're just wrong for different teams. If you want picks like this matched to what you're actually building instead of hunting them down yourself, that's what the weekly email does.

// how we picked these

Every repo here was read and assessed on its own before it was considered for this page: we pull the README, the directory layout and a key source file, and write the assessment from those rather than from the project's own marketing. Candidates for this list came from a full-text and topic search over the 194 reviewed repositories that matched this category. Anything with no commit in the last 12 months was cut, as were link collections, tutorials and boilerplates; the floor for inclusion was 3.000 stars. The ordering is a judgement call about who should pick what, not a ranking by stars. finds.dev is independent of every project listed here: nobody paid for a place on this page, there are no affiliate or referral links on it, and we have no commercial relationship with any of them. That is the point of writing down what each one is bad at as well as what it is good at.

Our criteria →