Skip to content

prashkup/libre-reader

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

Libre Reader

A mobile-first, open source e-book reader built with React Native — format-agnostic, cloud-agnostic, and free forever.


The Problem

Every mainstream e-reader locks you into something:

  • Kindle locks you into Amazon's ecosystem and DRM
  • Adobe Digital Editions is desktop-only and format-restrictive
  • Calibre is powerful but not built for mobile reading
  • Every cloud-sync reader charges a monthly subscription for storage you already pay for elsewhere

You own your books. You already pay for Google Drive, Dropbox, or S3. You shouldn't need a middleman charging you monthly to read them on your phone.


The Solution

Libre Reader connects directly to whatever cloud storage you already use. No accounts beyond what you already have. No subscription. No lock-in.

Bring your own cloud:

  • Google Drive
  • Dropbox
  • AWS S3 / compatible (Cloudflare R2, Backblaze B2)
  • Local device storage

Read what you own:

  • EPUB
  • PDF
  • MOBI / AZW3
  • Plain text, Markdown

Tech Stack

Framework React Native (Expo)
State management Redux Toolkit
Local storage SQLite via expo-sqlite
Cloud abstraction Pluggable provider interface
Navigation React Navigation

Architecture

The core design principle is a pluggable storage interface. Each cloud provider implements the same interface:

interface StorageProvider {
  listFiles(path: string): Promise<FileEntry[]>
  readFile(id: string): Promise<ArrayBuffer>
  writeMetadata(id: string, meta: BookMetadata): Promise<void>
}

This means adding a new provider is isolated — it doesn't touch the reader, the library, or the sync logic.

SQLite is used locally for:

  • Reading position persistence (per book, per device)
  • Bookmark storage
  • Library metadata cache (so the app works offline)
  • Reading history and statistics

Project Structure

libre-reader/
├── app/
│   ├── providers/         # Cloud provider implementations
│   │   ├── gdrive.ts
│   │   ├── dropbox.ts
│   │   └── s3.ts
│   ├── reader/            # Format-specific rendering
│   │   ├── epub.tsx
│   │   └── pdf.tsx
│   ├── store/             # Redux state
│   ├── db/                # SQLite schema and queries
│   └── navigation/
├── app.json
└── tsScript: TypeScript throughout

Status

Early development. Current focus:

  • Expo project scaffold with TypeScript
  • SQLite schema for books, positions, bookmarks
  • Google Drive provider (first implementation)
  • EPUB rendering (react-native-epub-creator / custom)
  • Basic library UI

Why Open Source

E-reader software should be a utility, not a subscription product. This project is built in the open so anyone can audit it, self-host, add providers, or fork it for their own needs.


Contributing

Early stage — architecture decisions are still being made. Open an issue if you have thoughts on the provider interface design, format support priorities, or the SQLite schema.


Licence

MIT

About

Open source React Native e-reader — format-agnostic, bring your own cloud storage, no subscriptions.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors