A lightweight, local-first desktop app for managing your personal book library. Think Calibre, but modern and focused.
- Library management -- add books manually or by ISBN lookup, browse in a responsive cover grid or list view
- Ratings & reviews -- rate books 1-5 stars and write personal reviews
- Reading diary -- keep a reading journal with per-book diary entries
- Reading status -- track books as Want to Read, Reading, Finished, or Abandoned
- Shelves -- organize books into custom collections
- ISBN metadata lookup -- auto-populate title, author, cover, and details from Open Library and Google Books
- Kindle integration -- detect a USB-connected Kindle, scan for books, and import them with highlights and clippings
- Command palette -- keyboard-driven navigation and search
- Local-first -- all data stored in a local SQLite database. No cloud, no accounts, no tracking. You own your data.
| Layer | Technology |
|---|---|
| Framework | Dioxus 0.7 (desktop) |
| Language | Rust |
| Styling | Tailwind CSS |
| Database | SQLite (via rusqlite, bundled) |
| Build tooling | Dioxus CLI |
Fully Rust-native -- no JavaScript, no Node.js, no web server.
- Rust (stable)
- Dioxus CLI:
cargo install dioxus-cli
# Clone the repo
git clone git@github.com:jfmyers9/blurb.git
cd blurb
# Run in development mode (hot reload)
dx serveThe app will open in a native desktop window.
dx build --releaseBlurb writes structured logs to a daily rolling file:
| OS | Log Location |
|---|---|
| macOS | ~/Library/Logs/com.blurb.app/blurb.log.YYYY-MM-DD |
Viewing logs:
# Tail the current log file
tail -f ~/Library/Logs/com.blurb.app/blurb.log.$(date +%Y-%m-%d)
# Or open in Console.app
open -a Console ~/Library/Logs/com.blurb.app/Changing log level:
Set the RUST_LOG environment variable before launching:
RUST_LOG=debug dx serve # verbose output for development
RUST_LOG=trace dx serve # maximum detailDefault levels: info in release builds, debug in development.
Blurb stores all data in a single SQLite file in your OS app data directory:
| OS | Location |
|---|---|
| macOS | ~/Library/Application Support/com.blurb.app/ |
| Linux | ~/.local/share/com.blurb.app/ |
| Windows | %APPDATA%\com.blurb.app\ |
The database is a standard SQLite file -- you can inspect it directly with any SQLite client.
Use an isolated development profile when testing imports, reviews, cover uploads, or migrations without touching your personal library:
BLURB_PROFILE=dev dx serve
# or
scripts/dev-db.sh runDevelopment mode uses a separate app namespace and shows a visible Dev badge in the window:
| Profile | Data Location | Log Location |
|---|---|---|
| Production | ~/Library/Application Support/com.blurb.app/ |
~/Library/Logs/com.blurb.app/ |
| Development | ~/Library/Application Support/com.blurb.app.dev/ |
~/Library/Logs/com.blurb.app.dev/ |
| Custom | BLURB_DATA_DIR=/path/to/sandbox |
/path/to/sandbox/logs/ |
Useful commands:
scripts/dev-db.sh path # print dev DB, covers, and log paths
scripts/dev-db.sh seed # create a small deterministic fixture library
scripts/dev-db.sh clone-prod # clone production DB + covers into dev (asks first)
scripts/dev-db.sh reset # delete dev DB/covers/logs (asks first)clone-prod uses SQLite backup semantics and rewrites cloned cover paths from the production covers directory to the development covers directory. reset and clone-prod refuse to target the production namespace and require confirmation unless --yes is passed.
Development imports are isolated from production data, but metadata enrichment can still call external book metadata services when enabled.
- Connect your Kindle via USB
- Click the device icon in the top bar
- Click Check Connection to detect the Kindle
- Click Scan Books to list books on the device
- Select the books you want and click Import Selected
Imported books are added to your library with reading status set to "want to read". The scanner parses MOBI files for metadata and can import highlights from the Kindle clippings file.
MIT