A private, offline-first PDF reader for people who move between devices.
Pidom imports your PDFs, keeps your library usable without a connection, syncs the documents you choose, and resumes your reading place wherever you sign in.
- Import PDFs from the system picker or Android's "Open with" sheet.
- Read offline from an encrypted on-device SQLite library.
- Sync selected documents up to 100 MB through Cloudflare R2 and signed URLs.
- Keep reading position, collections, favourites, notes, and bookmarks in sync.
- Search synced PDFs online or from the device's local FTS index.
- Share documents, manage access, and receive privacy-safe notifications.
- Read in continuous, single-page, or two-page spread layouts.
| Area | Technology |
|---|---|
| App | Expo SDK 57, React Native 0.86, Expo Router |
| UI | gluestack-ui v5, NativeWind v5, Tailwind v4 tokens |
| Backend | Convex with Workflow, Workpool, Rate Limiter, Presence, and Expo Push |
| Auth | Google Sign-In with Convex OIDC verification |
| Storage | Cloudflare R2 for synced PDFs, expo-file-system for device-local copies |
| PDF/Text | react-native-pdf, unpdf, and expo-sqlite FTS5 |
Pidom uses native Google Sign-In and notification modules, so Expo Go is not enough. Use a development build.
npm install
npx convex dev
npx expo prebuild --clean
npx expo run:androidFor OAuth clients, Firebase files, Cloudflare R2, Convex env vars, and release credentials, follow docs/setup.md.
The core reader, library, import flow, offline storage, sync, sharing, search, collections, notes, bookmarks, push registration, and Android release pipeline are in place. Highlights and OCR for scanned documents are not built yet.
Issues and pull requests are welcome. Please read CONTRIBUTING.md and keep changes focused, tested, and small enough to review.
Security reports should follow SECURITY.md.
MIT © Telvin Teum