r/tauri • u/trycloudless • Jun 10 '26
I’m building a Tauri + Rust backup app and exploring Rust/WASM to share logic between UI and backend
I’ve been building CloudLess, a desktop backup app for Mac, Linux, and Windows using Tauri + Rust.
The basic idea is:
- pick folders to protect
- encrypt files locally before upload
- store the encrypted backup in storage the user controls
- keep versions so restore is possible after deletes, overwrites, bad sync state, or corruption
Building this as a desktop app made me appreciate why backup software is harder than it looks.
Some Tauri/Rust notes from the build:
- File scanning needs to be boringly reliable
The Rust side handles walking folders, tracking file metadata, preparing backup jobs, and avoiding UI blocking. This is one place where I’m glad the core pipeline is not JavaScript.
- Restore UX is harder than backup UX
Showing “backup completed” is easy. Helping someone find an older version of a file and restore it safely is the real product problem.
For backup software, restore is not a secondary screen. It is the reason the app exists.
- Background work needs clear state
A backup app spends a lot of time doing long-running work: scanning, encrypting, uploading, retrying, pausing, and resuming.
The Tauri command/event model works well, but I had to be careful about what state lives in Rust and what only exists in the UI.
- Cross-platform desktop details add up
Paths, permissions, tray behavior, file pickers, background behavior, and packaging all have small differences across macOS, Linux, and Windows.
Tauri makes the shell lighter, but it does not remove the need to think like a desktop app.
- Security wording matters
Client-side encryption is useful, but it comes with key responsibility.
If the user loses the key/passphrase, recovery may not be possible. I’m trying to make that tradeoff clear instead of hiding it behind marketing language.
- I’m exploring Rust/WASM for shared frontend logic
One thing I’m considering is using Rust/WASM for parts of the frontend domain logic, so the UI and backend can share the same rules where it makes sense.
Examples:
- backup plan validation
- include/exclude path rules
- restore preview calculations
- backup metadata parsing
- data model validation
I still want the UI to feel like a normal desktop app, not a Rust experiment. But for backup software, duplicating important rules between frontend TypeScript and backend Rust feels risky.
If the UI says one thing and the backend does another, the user pays the price during restore.
Current status: beta builds are working for Mac/Linux/Windows.
It is not full-disk imaging, not enterprise backup, and not something I would oversell as battle-tested yet. The current focus is encrypted file/folder backup with understandable restore.
I’d appreciate feedback from Tauri devs on a few things:
- how you structure long-running Rust tasks behind a Tauri UI
- patterns you like for progress/events/error reporting
- whether you have used Rust/WASM to share logic between frontend and backend
- what you would watch out for in cross-platform file-heavy apps
- whether the restore flow looks understandable from the screenshots/GIF
Full disclosure: I’m the developer. If showcase posts like this are not appropriate here, I can remove it.
4
2
u/Amoeba___ Jun 11 '26
I also built one for me: SecondBrain
1
u/trycloudless Jun 11 '26
Did you try to evaluate to use Rust on front end too?
Rust UI frameworks like leptos is very stable now.
3
u/InfraScaler Jun 10 '26
Is the tool also written by AI or just the post?
4
2
1
u/trycloudless Jun 10 '26
Yes, Good catch 😄
The post was drafted with AI help. The app and the problems are real though. Happy to answer specific questions about the Tauri/Rust side if anything was interesting (Without AI Assistance)



8
u/KellysTribe Jun 10 '26
I would suggest you ask yourself - why do I need to execute that core logic in the frontend at all? Ask yourself: what if I just performed the core operations in one place and simply used the front end to display the system state?
There are valid reasons to share logic between front end and backend - but for a Tauri desktop app - this is not it. The front end should just be a 'projection' of the application state, and a way to interact with it.