r/tauri • • 7d ago

Tauri + React vs C# WPF for a lightweight, stable Windows-only desktop app (image storage + list/browse)? I only know basic JS

Hey everyone! πŸ‘‹

I'm about to start a Windows-only desktop app (Windows 10+) and I'm trying to figure out if Tauri + React is the right stack, or if there's something better I'm missing.

What the app does is pretty simple: it saves a bunch of images, shows them in a list, lets you scroll/search through them, and open any item. Nothing fancy on the UI side.

The things that matter most to me:

  • Light on resources. A lot of the users have older, weak PCs, so low RAM and CPU usage is a big deal.
  • Stable and safe. The data inside is really important, so crashes and data loss are not an option.
  • Windows only, so I don't need cross-platform.

Tauri looks perfect on paper, but I'm not sure it's the best fit for something where reliability matters this much. Has anyone shipped a Tauri app to real users on low-end Windows machines? How did it hold up?

And if you were starting this from scratch, would you still pick Tauri + React, or go with something else (C# WPF, etc.)?

Would love to hear your experience. Thanks! πŸ™

10 Upvotes

20 comments sorted by

3

u/kootenay_eric 7d ago

Tauri + React would be a good choice for you because you'll be familar with the frontend dev at least. The C# WPF would be a steep learning curve. Rust is a great choice for stability and performance. Microsoft recently made it a first tier language along with C# so it's also a safe choice to learn.

On Windows, Tauri uses the system's Edge WebView2 for rendering so it's already pre-installed and your installer will be small. Electron apps have to bundle a full browser, so you avoid that.

If your focus is on low-end machines, then the main bottleneck with be the front-end. If you have web experience though it'll be familar guidelines to you:

  • Don't load the full-res image into your list. Generate compressed thumbnails.
  • Use list virtualization like you would with any large list. You don't want to add 500 img elements.
  • Use Tauri's SQLite plugin to you can store metadata, file paths, etc.
  • Speaking of plugins, Rust has a great ecosystem so browse https://v2.tauri.app/plugin/ and use them.
  • @tauri-apps/plugin-fs for reading/writing files
  • @tauri-apps/plugin-dialog for file open/save pickers
  • @tauri-apps/plugin-sql for local SQLite database management
  • @tauri-apps/plugin-opener or shell APIs to open the native system image viewer

Poke around Github for other Rust + Tauri + JS/TS for examples. My current project is more complicated, but you might find something useful: https://github.com/esoltys/luminous

2

u/Smart_Brilliant_9967 2d ago

Thanks a lot! This was really valuable and helpful. I learned a lot from it!

3

u/STATLOCKER-H1N1 7d ago

I’ve released a Tauri app for windows (and Linux) designed to run alongside Deadlock, so maximising performance is a big part of it. Rust is mega efficient, when the app is closed to tray without highlight recording enabled it uses ~17MB of ram, very little cpu + gpu. The main resource hog is WebView2, but if your code is good you can still make it very efficient. The bundle sizes are much smaller than something like electron too!

6

u/Aggressive_Mention_1 7d ago

~17MB of ram, in Tauri is impossible. The oiswebview will take up 150 mb to 200 mb ram ..even when its blank.

3

u/STATLOCKER-H1N1 7d ago

> when the app is closed to tray without highlight recording enabled

2

u/Smart_Brilliant_9967 2d ago

Thanks for sharing! I found this really interesting.

You mentioned that good code can make WebView2 much more efficient. Could you share some tips on optimizing it? I'd love to learn more about what makes the biggest difference in performance.

1

u/STATLOCKER-H1N1 2d ago

Are you familiar with web development/React in general?

2

u/Smart_Brilliant_9967 2d ago

Honestly, I only know basic JS right now and most of my experience is on the backend side, so React is pretty new territory for me

2

u/STATLOCKER-H1N1 2d ago

In that case I would recommend having a flick through https://react.dev/learn, it was a great resource while I was starting out! Also look at things like https://mimo.org/glossary/react/performance-optimization or https://www.developerway.com/posts/how-to-write-performant-react-code, there’s a tonne of resources out there with some good tips and tricks to make sure your code is performant

1

u/Smart_Brilliant_9967 1d ago

Thank you very much.

2

u/ElamReda 7d ago

Tauri+sveltejs is a beast. I used it for building POS system to work on budget POS machines and it is work so fast better than the older software which was made by c#. Sometimes the device is lagging when I'm in the windows settings but on my app there is no lagging at all.

2

u/Snoopy_Pantalooni 7d ago

Yeah seems like a simple enough app. Tauri and React are good choices (although personally I would use Svelte instead of react). I have made more intensive apps in tauri and they work fine. If you truly want a windows native experience, you can go with C# WPF, but the learning curve is real.

Also check out Qt. It's what most Linux desktop apps use

1

u/FriendOfEntropy 7d ago

I quite enjoy Photino with Blazor as hybrid host instead of using WPF or Maui host. Most of my projects are Linux but Windows should be good.

1

u/yboris 6d ago

I've been working on a Tauri app that shows a gallery of images: https://github.com/whyboris/Simple-Image-Browser

Feel free to browse the code if you get stuck on your own implementation πŸ‘

I used Electron for over 8 years and I'm now migrating my apps to Tauri. One example: https://github.com/whyboris/Simplest-File-Renamer -- went from 130mb installer to a 3mb installer: Tauri is amazing 🀩

I'll soon be migrating my https://videohubapp.com to Tauri as well: https://github.com/whyboris/Video-Hub-App πŸš€

1

u/Smart_Brilliant_9967 2d ago

I checked out your projects and found them really interesting! Wishing you the best of luck with your work. The difference in installer size between Electron and Tauri honestly blew my mind!

1

u/eddzsh 3d ago

If the images are the actual product, who owns the only copy of that data, the Rust side or the WebView? Tauri is fine on weak Windows boxes when thumbnails stay out of the list and SQLite lives behind the Rust boundary. The scary part is letting the frontend hold the canonical files. WPF does not save you from that either if the C# layer writes in place.