Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ReadEra PC

A browser-based desktop ebook reader — inspired by ReadEra, built for your own PDF/EPUB collection. Runs locally on your machine. No account, no cloud, your books stay on your disk.

Requirements

  • Node.js 22.5.0 or newer (check with node -v) — this app uses Node's built-in SQLite module, so there's nothing extra to compile or install for the database.

Setup

cd readera-pc
npm run setup

This installs both the backend and frontend dependencies. No native build tools (Visual Studio, Xcode, etc.) are required — everything here is pure JavaScript plus Node's built-in SQLite.

Run it.

npm run dev

Then open http://localhost:5173 in your browser. Leave the terminal running — this is your server. You'll see a one-line "SQLite is an experimental feature" warning on startup — that's expected and harmless.

A heads-up on library folders

The folder scanner picks up any file matching a supported extension (.pdf, .epub, .txt, etc.) in the folder you point it at, recursively through subfolders. If you point it at your whole Desktop or Documents folder, it'll also pick up things like exported 2FA backup codes, ID scans, or other personal PDFs that just happen to live there — not just books. Worth pointing it at a dedicated folder (e.g. Documents\Books) instead, and using the trash icon in the Library to remove anything that got swept in by accident.

First-time use

  1. Go to Settings
  2. Either:
    • Click "Choose files to import" to upload individual PDF/EPUB files, or
    • Click "Browse for folder" to add a folder that gets watched automatically
  3. Go to Library and hit Scan if books don't appear immediately
  4. Double-click any book to start reading

Feature status

Feature Status
Homepage (continue reading, favourites, recent)
Sidebar navigation
Library grid/list view, search, filters
Import PDF
Import EPUB
Next/previous page ✅ (buttons + arrow keys)
Zoom (PDF)
Dark / light / sepia / console themes
Remember last page
Search inside book
Highlight text ✅ (both EPUB and PDF now — select text and it's auto-saved)
Notes on highlights ✅ — click the note icon next to any highlight in the sidebar
Bookmarks
Reading progress
Book covers ✅ Real covers — first page rendered (PDF) or embedded cover extracted (EPUB) and cached, generated automatically in the background the first time your library loads
Categories / tags ✅ (basic — click the tag icon on a book)
Favourites
Settings
Multiple libraries ✅ — switcher at the top of the Library page, per-folder and per-import library assignment in Settings, "move to library" action on each book
Sync reading progress ⚠️ Not implemented as cloud sync. The server binds to 0.0.0.0, so if you run it on one machine, other devices on the same Wi-Fi/LAN can reach it at http://<your-computer-ip>:5173 and share the same library/progress. True multi-device sync (e.g. via a hosted database) is a bigger architecture decision — happy to scope it if you want it.
Dictionary ✅ (double-click a word)
AI summary / chat with book ✅ Defaults to Groq (free, no credit card — get a key at console.groq.com/keys). Anthropic is also selectable in Settings for anyone who has a key.
Text-to-speech ✅ (uses your browser's built-in voices via Web Speech API)
OCR for scanned PDFs ✅ (basic — button runs Tesseract.js on the current page, shows extracted text in a popup; doesn't yet inject text back into the PDF for searching)
Export notes ✅ (Markdown download, from the Bookmarks/Highlights sidebar)
Keyboard shortcuts ✅ — ← / → page nav, +/- zoom, b bookmark, Ctrl/Cmd+F search, Esc close panels
PDF highlighting ✅ Select text in a PDF and it's saved automatically, same as EPUB
Highlight notes & color ✅ — click the note icon on a highlight to add/edit a note, click the color bar to cycle colors

Known limitations to be upfront about

  • MOBI: routed through the EPUB renderer (epub.js). Classic .mobi files are a different binary format and will likely fail to open — AZW3/newer MOBI variants may partially work. True MOBI support needs a dedicated parser.
  • CBZ/CBR/DOCX/RTF/FB2/DJVU: detected and catalogued in the library, but the reader shows an honest "not supported yet" screen rather than trying to render them.
  • PDF highlight positions: stored as percentages of the page, so they stay aligned at any zoom level — but if the underlying PDF's text layout is unusual (multi-column, rotated pages), rect capture can occasionally be imprecise.
  • Cover generation: happens once per book, the first time your library loads with that book missing a cover. It runs in the browser (rendering PDF page 1 / reading the EPUB's embedded cover), so a very large library will take a few seconds per book the first time.

Project structure

readera-pc/
├── server/           # Express backend + SQLite
├── client/           # React + Vite frontend
│   └── src/
│       ├── components/
│       │   ├── Home/       # Dashboard
│       │   ├── Library/    # Grid/list, book cards
│       │   ├── Reader/     # PDF/EPUB viewers, AI, search, dictionary
│       │   ├── Settings/
│       │   └── Stats/
│       └── store/          # Zustand global state
└── data/             # SQLite DB lives here (auto-created)

About

A browser-based desktop ebook reader — inspired by ReadEra, built for your own PDF/EPUB collection. Runs locally on your machine. No account, no cloud, your books stay on your disk.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages