Papyrus is an open-source, cross-platform application for managing and reading books. It supports both physical and digital book collections across Android, iOS, Web, Windows and Linux. The application features an integrated book reader, flexible organization tools, reading statistics, progress tracking, supports various file storage back-ends and cross-device synchronization via a self-hostable server.
Many reading applications offer partial solutions but fall short on essential features, platform availability or user experience. Papyrus aims to deliver a comprehensive, privacy oriented solution that:
- Works offline-first with optional cloud synchronization
- Supports self-hosting for complete data ownership
- Provides a unified experience across all popular platforms
- Offers extensive customization for different reading preferences
| Category | Features |
|---|---|
| Reading | Integrated viewer for EPUB, PDF, MOBI, AZW3, TXT, CBR, CBZ |
| Organization | Shelves, tags, topics, custom filters, advanced search |
| Annotations | Highlights, bookmarks, notes with export capabilities |
| Progress | Reading time tracking, page/percentage progress, statistics |
| Goals | Reading goals (books, pages, time) with streak tracking |
| Sync | Cross-device synchronization via self-hostable server |
| Storage | Multiple backends: Seff-hosted, Google Drive, WebDAV, MinIO, S3 |
| Accessibility | E-ink optimization, dark/light themes, customizable fonts |
| Platform | Status | Notes |
|---|---|---|
| Android | Supported | Primary mobile target |
| iOS | Supported | Requires Xcode for building |
| Web | Supported | PWA with offline support |
| Windows | Supported | Native desktop experience |
| macOS | Supported | Requires Xcode for building |
| Linux | Supported | AppImage/Snap distribution |
- Flutter SDK 3.x: Installation guide
- Dart SDK 3.x: Included with Flutter
-
Clone the repository
git clone git@github.com:Eoic/Papyrus.git cd Papyrus -
Install dependencies
cd client flutter pub get -
Run the application
# Android/iOS (with connected device or emulator) flutter run # Web flutter run -d chrome # Desktop flutter run -d windows # or: macos, linux
Project documentation is available in the /spec/ directory and can be built into a browsable static site using MkDocs.
# Install documentation dependencies
pip install -r docs-requirements.txt
# Serve documentation locally (http://127.0.0.1:8000)
mkdocs serve
# Build static site
mkdocs build| Layer | Technology | Purpose |
|---|---|---|
| Frontend | Flutter / Dart | Cross-platform UI |
| Backend | FastAPI / Python | REST API server |
| Database | PostgreSQL | Primary data store |
| Cache | Redis | Sessions, caching |
| Storage | Multiple backends | Book file storage |
-
Fork and clone the repository
-
Install git hooks for code quality checks:
./scripts/setup-hooks.sh
This installs a pre-commit hook that runs
dart formatanddart analyzebefore each commit.
-
Create a feature branch:
git checkout -b feature/your-feature-name
-
Make your changes and ensure quality checks pass:
cd client dart format . dart analyze flutter test
-
Commit your changes and push:
git commit -m "Add: description of your changes" git push origin feature/your-feature-name -
Open a pull request
- Run
dart format .before committing - Ensure
dart analyzepasses with no issues - Use sentence case for UI text (e.g., "Apply filters" not "Apply Filters")
Releases are automated via GitHub Actions. To create a new release:
-
Ensure all changes are merged to
master -
Create and push a version tag:
git tag v1.2.3 git push origin v1.2.3
-
GitHub Actions will automatically:
- Build all platforms (Android, Web, Linux, Windows)
- Create a GitHub Release with auto-generated release notes
- Attach versioned artifacts to the release
| Resource | Description |
|---|---|
| Documentation | Full project specification |
| API specification | OpenAPI/Swagger definition |
| Figma prototype | UI/UX design |
| Trello board | Project management |
This project is licensed under the GNU Affero General Public License v3.0 - see the LICENSE file for details.
