A small, modern TODO app written in Rust, WebView and SQLite for local use, in less than 4mb!
No need to install 50gb of tools, and can be ported everywhere
- UI:
wrywebview inside awinitwindow - Storage: SQLite via
rusqlite(bundled — no system dependency) - Theme: light and dark, auto-detected from the OS, manually toggleable (persisted)
- Icons: inline SVG only — no external fonts, icons, or network requests
cargo run # debug
cargo build --release # optimized, self-contained binaryThe UI is embedded into the binary, so the executable is fully self-contained.
The database file (todo.db) lives outside the app, next to it, so the
app and the db are the only two files you need to move:
# plain binary — db next to the executable
cp target/release/todo-rust ~/Desktop/Todo/
~/Desktop/Todo/todo-rust # creates ~/Desktop/Todo/todo.db
# macOS app bundle — db next to the .app
cp -R Todo.app ~/Desktop/Todo/
open ~/Desktop/Todo/Todo.app # creates ~/Desktop/Todo/todo.dbIn debug builds the binary lives in
target/debug/, so the db lands there too. Use a release build for a portable copy.For a bundle installed somewhere not writable (e.g.
/Applications), the app falls back to~/Library/Application Support/Todo/todo.db. Packaging the bundle is covered inmake-app.md.
| Action | How |
|---|---|
| Add task | Type and press Enter, or click the + button |
| Complete / undo | Click the circle on the left of a task |
| Delete | Click the trash icon (appears on hover) |
| Filter | All / Active / Done tabs |
| Clear completed | Footer button |
| Theme | Sun/moon button in the header |
| Focus input | Press / |
Built with
