Skip to content

Repository files navigation

Rafaki

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

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.

For end users

Install Rafaki with the standard Windows installer:

  1. Run Rafaki-Setup-<version>.exe.
  2. Choose an install location (or accept the default) and finish the wizard.
  3. 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

Features

  • 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

Themes

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.

Architecture

  • Desktop shell: Electron (electron/). The window loads a static Next.js export over a custom app:// 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 in electron/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

For developers

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 reload

Build the Windows installer

npm run electron:build

The installer is written to dist/Rafaki-Setup-<version>.exe.

Scripts

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.

License

MIT. See LICENSE.txt.

About

A local-first personal book library for Windows. Track the books you own, no account, no cloud, no subscription.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages