Openreads: A Private Flutter Book Tracker for Android and iOS
A mobile books tracker written in Flutter that respects your privacy.
At a glance
- What is it?
- Openreads organizes books into four reading states, supports tags and statistics, and accepts records from Open Library, barcodes, or manual entry. Its GPL-2.0 codebase and CSV format make it a practical choice for readers who want a mobile catalog without a proprietary data source.
- Who is it for?
- Openreads fits Android and iOS users who want local reading-state tracking, Open Library discovery, barcode entry, and CSV portability without depending on a proprietary catalog. It is less suitable for people who need multiple metadata providers, Open Library uploads, or documented desktop synchronization.
- Can I use it commercially?
- Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 39 days ago.
- What is it written in?
- Mainly Dart, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Openreads Book Tracking and Privacy Model
Openreads solves the problem of keeping a personal reading catalog on a phone without requiring a proprietary book service to supply every record. The app is intended for readers who want to separate finished books, current reading, future reading, and abandoned books, while also adding custom tags and viewing statistics. The README describes it as privacy oriented and open source, but it does not document a full account, synchronization, analytics, or backend architecture. That omission matters: the confirmed privacy claim is tied to the app's source availability and its use of Open Library, not to a detailed data-flow audit in the README.
The four lists give Openreads a simple state model. A title can sit in the list for books currently being read, move to the finished list, remain in the wish list, or be placed among books the user did not finish. Custom tags provide a second classification layer instead of forcing every book into one organizing scheme. Statistics are available, although the documentation does not enumerate the exact metrics or calculation rules.
This is primarily a mobile personal-library tool. The repository contains `android/`, `ios/`, `lib/`, and `assets/` directories, while the documented release channels target Android and iOS. The README does not document a desktop application, browser client, hosted service, or cross-device account. Users who require reading progress synchronized automatically among several devices should verify those needs before assuming that a Flutter codebase supplies them.
Open Library, Barcode, and Manual Book Data Flow
Book acquisition has three documented paths. A user can search Open Library, scan a barcode, or enter the book's details manually. Open Library is the only current data provider, according to the FAQ. The project calls it a FOSS crowdsourced library and explicitly states that proprietary sources are not planned. Other nonproprietary sources, including BookBrainz, are described as possible future considerations rather than shipped integrations.
The documented lookup path therefore moves from an Open Library search into a local book record. Barcode entry offers a different starting point by using the printed identifier on a physical book, while manual entry accommodates editions or works that the catalog does not expose through search. The README does not explain whether barcode results are fetched from Open Library, whether camera access is processed on-device, or whether scanned codes and imported records leave the device. It also does not document edition and work identifier handling, cover caching, or conflict resolution. Those details cannot be inferred solely from the presence of an Open Library integration.
Openreads can also import CSV files from GoodReads and BookWyrm. The repository includes `doc/csv.md`, which defines the expected format, so migration and backup are supported at the file level. Uploading data back to Open Library is explicitly unavailable. The app is therefore designed primarily around reading a catalog and recording local organization rather than acting as a general library contribution client.
Building Openreads from the Flutter Repository
The documented development path begins by cloning the repository and changing into its directory. These commands fetch the source and place the command line in the project root:
git clone https://github.com/mateusz-bak/openreads.git
cd openreadsFlutter then resolves the packages declared by the project:
flutter pub getThe repository includes `.flutter-version`, `pubspec.yaml`, `pubspec.lock`, and `analysis_options.yaml`, but the README does not state which Flutter or Dart versions a user must install. Readers should use the version information in those project files and confirm that a suitable Flutter SDK is available before building. No installation command for the SDK is given in the README, so none should be invented here.
After dependencies are available, the documented command builds and installs a debug version on the connected target device:
flutter runFor the first real use, launch the installed app and add a book through Open Library search, barcode scanning, or manual entry. The README does not provide a screen-by-screen script or sample record, but those three acquisition routes are its documented starting actions. Once a book exists, assign it to one of the four reading lists. Tags can then be used to filter the catalog.
The build warning is unusually important. The README says `flutter run` will uninstall an existing Openreads installation before installing the debug version, and that this deletes all app data. Anyone with a populated library should create a backup first, especially before rebuilding.
Openreads CSV Portability and Export Boundaries
CSV support gives Openreads a practical route away from an app-only catalog and toward a portable text format. The FAQ says CSV import and export are supported, names GoodReads and BookWyrm as import sources, and links the repository's `doc/csv.md` for the expected structure. This is a concrete alternative to treating reading history as a closed property of the mobile interface.
The documentation does not say whether export produces the same schema as the documented import format, whether all fields and tags survive a round trip, or whether attachments such as covers are included. It also does not state whether CSV imports are incremental, how duplicate books are merged, or what happens when an imported edition differs from an existing local record. Users planning a migration should inspect `doc/csv.md` rather than assume that GoodReads or BookWyrm exports can be loaded unchanged.
Compared with a CSV-only workflow based on exports from GoodReads or BookWyrm, Openreads adds a Flutter interface for active reading, barcode scanning, Open Library lookup, tags, and statistics. Those two services are documented as import sources, not as live metadata integrations. Openreads does not depend on their proprietary catalog for new book searches because its only current provider is Open Library.
Openreads Platform Limits and Single-Catalog Constraint
The strongest functional boundary is the single-provider design. Openreads cannot currently combine Open Library with BookBrainz, and the README says proprietary sources will not be added. Readers whose local editions are missing from Open Library will need barcode or manual entry, but the documentation does not promise automatic reconciliation or richer commercial metadata.
The platform story is also narrower than the underlying Flutter framework. The app is written in Flutter, yet the documented releases are for Android and iOS. No Linux, Windows, macOS, or web release is identified. Flutter makes shared Dart code possible, but repository directories alone do not prove that every Flutter target is configured or supported.
Several operational questions remain undocumented. The README does not describe backup scheduling, cloud synchronization, conflict handling across devices, account recovery, barcode support for every symbology, offline behavior, or whether covers are stored locally. CSV export may help with backups, but calling it an automatic backup system would go beyond the available documentation. These omissions do not make the mobile tracker unusable, but they affect anyone who treats it as a multi-device library database rather than a personal phone catalog.
Openreads Maintenance, Translation, and GPL-2.0 Costs
The repository is not archived, and its last push was on 2026-09-14. The latest listed release is `v2.11.0`, dated 2025-09-09, following `v2.10.0` on 2025-02-14 and `v2.9.0` on 2025-02-11. The later push shows repository activity after that release, but the README does not identify which changes are pending or whether the mobile store versions match `master`.
Maintenance work is divided among code, platform builds, and localization. The repository includes Android and iOS directories, Fastlane-related files under `fastlane/`, GitHub workflows, and a Weblate project for translations. Translation status may therefore depend on contributors beyond the Dart codebase. The README does not document release-signing requirements, migration policy, supported operating-system versions, or a long-term support schedule.
Openreads is licensed under `GPL-2.0`. Anyone redistributing or modifying the project must follow the terms in the repository's `LICENSE`; this review does not interpret specific legal obligations. The README also notes that App Store publication requires a paid Apple Developer account, which creates a distribution cost for maintainers even though users can obtain releases through other documented channels. Download links are provided for GitHub Releases, F-Droid, Google Play, and the App Store.
Editorial conclusion
Openreads fits Android and iOS users who want local reading-state tracking, Open Library discovery, barcode entry, and CSV portability without depending on a proprietary catalog. It is less suitable for people who need multiple metadata providers, Open Library uploads, or documented desktop synchronization. Before adopting it, verify CSV compatibility with the intended workflow, review the documented uninstall warning, and inspect the mobile build requirements in the repository. For this project-specific use case, the supported Android and iOS builds plus a documented CSV import path make Openreads a defensible choice for a privacy-oriented personal library.
Frequently asked questions
Which platforms does Openreads support?
Openreads is written in Flutter and has documented Android and iOS versions. The README does not list a desktop or web release.
Can Openreads import books from GoodReads or BookWyrm?
Yes. The FAQ names GoodReads and BookWyrm as supported CSV import sources and links `doc/csv.md` for the expected file format.
Which catalog does Openreads use for book information?
Open Library is the only current data source. BookBrainz is mentioned as a possible future source, while proprietary providers are not planned.
Does rebuilding Openreads delete an existing library?
The README warns that `flutter run` uninstalls an existing Openreads app before installing the debug build and deletes its app data. A backup is advised before rebuilding.
Can Openreads upload book records to Open Library?
No. The FAQ explicitly says uploading book data to Open Library is not currently supported.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/mateusz-bak-openreads)Was this useful?