Hey everyone! π
Just shipped my first real Tauri 2 project and wanted to share it here.
Sortd watches your folders and automatically organizes files using
a local AI model via Ollama. Everything runs on your machine ,
no cloud, no API keys, no subscriptions.
How it works:
- Known extensions β instant classification (no AI call needed)
- Unknown files β Ollama + llama3.2 reads the filename and content
-
90% confidence β auto-moved silently in the background
- 70-90% β staging queue for your approval
- Every correction teaches it via SQLite rules cache
Some Tauri 2 things I used:
- #[tauri::command] with Arc<Mutex<T>> state for thread safe DB access
- rfd crate for native Windows folder picker dialogs
- Tauri events to push "file-staged" notifications from Rust β React
- app.handle() to emit events from inside a spawned tokio task
Learned a ton about the Rust/async boundary the watcher runs on
a sync thread but the AI classifier is async, solved it with
Handle::current().block_on() inside spawn_blocking.
GitHub: https://github.com/mussussu/sortd
Would love feedback from experienced Tauri devs β especially on
state management patterns and whether there's a cleaner way to
handle the sync/async boundary in the agent loop. PRs welcome! π¦