A local-first personal book library for Windows. Rafaki is a calm, collectible digital bookshelf: track the books you own, organize them, record your reading status, search and filter your collection, see personal statistics, import and export your data, and choose the visual personality of the app from a set of built-in themes.
Everything is stored privately on your own computer. No account, no cloud, no server, no subscription. The only time Rafaki uses the internet is to look up book details by ISBN.
Download Rafaki for Windows (Rafaki-Setup-1.0.0.exe, 93 MB)
Windows 10 and 11, 64-bit. Every build is published on the releases page.
Install Rafaki with the standard Windows installer:
- Run
Rafaki-Setup-<version>.exe. - Choose an install location (or accept the default) and finish the wizard.
- Open Rafaki from the Start Menu or the desktop shortcut.
The installer is not code-signed, so Windows SmartScreen may show
"Windows protected your PC" the first time you run it. Choose
More info -> Run anyway, or build the installer yourself from source with
npm run electron:build.
That's it. You do not need Node.js, npm, a terminal, a database server, or any developer tools. On first launch Rafaki automatically creates its local database and you can immediately start adding books. Your library persists between launches and survives app updates. Uninstall it like any normal Windows program from Settings or Control Panel.
Your data lives in your Windows user-data folder:
%APPDATA%\rafaki\rafaki.db
- Library view with grid and list layouts, covers, and quick browsing
- Add books by ISBN (Google Books, with Open Library as a fallback) or by hand
- Reading status: Read, Reading, Unread, with an optional finished date
- Categories you create, edit, delete, and filter by
- Language tracking with badges and filters (English, Greek, Spanish, Italian, Chinese, Japanese, and easily extendable)
- Search by title, author, or ISBN; filter by status, category, and language; sort several ways
- Duplicate detection by ISBN (and by title/author when no ISBN is present)
- Dashboard with totals, reading progress, books by category and language, books read per year, and recent additions
- Import and export as JSON (full, lossless) or CSV, plus backup and restore
- Six selectable themes with a design-token system, saved locally
- Fully usable offline; ISBN lookup degrades gracefully when there is no network
Modern Minimal (default), Classic Library, Vintage Comics, Dark Academia, Japanese Reading Room, and Retro Computer Catalog. The information architecture and behavior stay consistent across themes; only the visual skin changes. Your choice is saved locally and restored on the next launch.
- Desktop shell: Electron (
electron/). The window loads a static Next.js export over a customapp://protocol, so there is no dev server, no open port, and no terminal window in production. - Local database: SQLite via
better-sqlite3, created and migrated automatically on first launch in the user-data folder. - UI: Next.js (static export) + React + TypeScript + Tailwind CSS v4.
- Data access: typed IPC exposed to the renderer as
window.rafaki(electron/preload.js), handled inelectron/ipc.js. - ISBN lookup runs in the main process (
electron/services/isbn.js) to avoid CORS and keep the renderer offline-safe; results are cached in SQLite.
Rafaki v3/
electron/ Electron main, preload, IPC, SQLite layer, services
db/ database, books, categories, settings, stats, import/export
services/ isbn lookup, cover caching
src/
app/ Next.js entry, global styles + theme tokens
components/ UI primitives, providers, app shell
features/ dashboard, library, add, book, categories, data, settings
lib/ rafaki bridge client, themes, isbn utils, helpers
build/ installer icon
scripts/ icon generator, dev launcher, smoke test
Prerequisites: Node.js 18+ (developed on Node 24) and, on Windows, the Visual
Studio Build Tools + Python that better-sqlite3 needs (only for the initial
native build; npm install handles the rest).
npm install # installs deps and rebuilds better-sqlite3 for Electron
npm run electron:dev # runs Next dev + Electron with hot reloadnpm run electron:buildThe installer is written to dist/Rafaki-Setup-<version>.exe.
| Command | Description |
|---|---|
npm run electron:dev |
Development app with hot reload |
npm run build:web |
Build the static Next.js export into out/ |
npm run electron:pack |
Build an unpacked app in dist/win-unpacked/ |
npm run electron:build |
Build the Windows installer in dist/ |
node scripts/make-icon.js |
Regenerate the placeholder app icon |
The placeholder icon in build/ is generated and brand-neutral; replace
build/icon.ico (and build/icon.png) with a final icon whenever ready.
MIT. See LICENSE.txt.