Openshelf

org.ftena.openshelf
by Zapstore _@zapstore.dev

Free, open-source personal library manager and book tracker.

Republished from GitHub / F-Droid by the Zapstore main account.

Openshelf is a free, open-source personal library manager. It functions as a comprehensive reading tracker, organizer (by category, collection, imprint, or any combination), and book archival tool. Everything stays on your device—no account required, and no data ever leaves your phone. Features: - Dynamic Views: Instant toggle between List and Grid layouts. - Reading Status: Track Want to read, Reading, Read, Abandoned, and Paused states. - Powerful Search: Full-text search across Title, Author, ISBN, and personal notes. - Custom Covers: Search via Open Library, Inventaire, or use custom photos. - Smart Shelves: Save filter combinations as self-updating shelves. - Hybrid FLOSS Scanner: High-speed barcode detection and ISBN OCR recognition. - Detailed Statistics: Reorganizable widgets for tracking reading streaks, page goals, and reading history. Openshelf is designed for book lovers who care about the craftsmanship of managing a personal collection. 100% on-device and privacy-focused.

First release: Jul 29, 2026, 7 total releases.

Most recent release: Oct 21, 2026.

Repo

Appears in 0 app stacks.

0 sats / 0 zaps received in the past year.

Sats Received

Underlying data available via MCP: app_zaps, app_releases.

Zap Count

Underlying data available via MCP: app_zaps, app_releases.

Releases

  • Oct 21, 2026 1.4.1
    **Full Changelog**: https://github.com/Swappppy/Openshelf/compare/v1.4.0...v1.4.1
  • Oct 20, 2026 1.4.0
    ## Openshelf v1.4.0 This release is centered on a ground-up rework of book search: structured multi-field queries, work/edition browsing, progressive results, and a much sturdier metadata pipeline across all three providers. It also adds Russian and German, and swaps out the stats grid. ### Book search, rebuilt Search is no longer a single text box. You can now query by **title, author, publisher and ISBN** at once; ISBN and publisher fields are toggled on demand, with clear buttons and barcode-scanner integration. When a valid ISBN is entered, the title and author inputs are visually dimmed, since the ISBN takes precedence. Results go through a two-phase pipeline (eligibility filtering, then ranking) which noticeably improves precision, and publisher constraints now prune candidates that don't match. Results **stream in progressively** as each source answers, with a linear progress indicator while the rest load, instead of waiting for the slowest server. Searches can be cancelled mid-flight.
    More…
    ### Work and edition browsing Works with multiple editions now open into a dedicated **editions view**, so you can pick the specific edition you own rather than the first one a provider returns. Editions are sorted by your preferred language, cover availability and year. This is wired up for Open Library, Google Books and Inventaire, with fallbacks to alternate work keys when a provider's primary results are thin. The book form also prefills more from a selected result: description, translation toggles and physical format (#27). ### Provider improvements - **Google Books:** progressive fallback strategies and retry logic for transient API errors; ISBN-13 preferred and ISBN inputs sanitized; four-digit publish-year extraction; `edge=curl` stripped from cover URLs. - **Open Library:** automatic edition resolution, better language parsing that favors your locale, cleaner work-key handling, and language mappings for some languages. - **Inventaire:** work-edition and edition-count resolution, Wikidata title claims and publishers in metadata extraction, better language detection and sorting, and shared HTTP clients across requests. - Fixed branching logic when fetching work editions. ### Translations Added **Russian** and **German**, both selectable in Appearance settings. French, Italian, Catalan and Portuguese (pt_BR / pt_PT) receive substantial updates, and Estonian, Japanese, Romanian and Turkish are underway on Weblate. Missing keys were filled across the ARB files, and invalid placeholder translations were cleaned out. Thanks to everyone contributing on Weblate! ### Stats The reorderable stats grid now uses [`span_grid`](https://github.com/Swappppy/span_grid) in place of `reorderable_staggered_grid_view`, laying the groundwork for smoother drag-and-drop, animated reflow and live preview. This is a custom library created for Openshelf use case, but it can fit other projects too, check it out if you want! The average-completion tile's parameter type was also corrected. ### Removed The experimental **Anna's Archive** integration and the `annas_archive_client` dependency have been removed from search, cover search and settings. The anti bot features of Cloudflare made the provider almost useless. ### Housekeeping Updated roadmap screenshot, minor dependency updates (`file_selector_macos`, `shared_preferences_android`), and new unit tests covering search eligibility and ranking, Open Library edition fetching, Google Books, and the search controller. --- The founder of [XERJ](https://github.com/xerj-org/xerj) has also reached out to me and asked for the commit [Enhance Google Books search, work edition fetching, and API resilience](https://github.com/Swappppy/Openshelf/commit/8eb0d1bd2bfbb5b9fd1acea88057ef94537cbb55) to be indexed in their hub. I am glad this project is turning out to be something people in the FOSS community can use ㋡ **Full Changelog:** https://github.com/Swappppy/Openshelf/compare/v1.3.1...v1.4.0
  • Sep 27, 2026 1.3.1
    ## New - Added Anna's Archive as an optional search source: a new AnnasArchiveService (via the annas_archive_client dependency) handles book search and ISBN lookups, and it's now integrated into BookSearchService, the search view, and the cover picker. - Search servers can now be individually enabled, disabled, and reordered from Settings (AppSettings/AppSettingsController extended to track active vs. disabled servers). ## Improved - Long-press quick actions on book cards/tiles in shelf views (grid, list, and container layouts): delete the book, or remove it from the current collection, imprint, or category — backed by a new removeTagFromBook transaction in TagDao. (#35) - Cover/image processing moved off the main thread: CoverService now decodes, resizes, and encodes images on background isolates, with a LoadingOverlay on the book/tag forms so processing is no longer silent. Android 13+ gallery permission handling was simplified for the native Photo Picker, with small stability delays added for Android 14+ compatibility. (#31) - Back-navigation and shelf performance: PopScope now returns to the primary tab (and dismisses search/filters) before actually exiting the Library view; tab state is preserved via IndexedStack instead of raw list indexing. ShelfAutomationController got a debounce delay and better concurrency guards to stop microtask saturation during bulk updates. (#34) **Full Changelog**: https://github.com/Swappppy/Openshelf/compare/v1.3.0...v1.3.1
  • Sep 7, 2026 1.3.0
    ## v1.3.0 - Boolean search ### New features - Expanded the filter sheet to cover every book property, not just the previous quick-filter subset: title, author, ISBN, publisher, language, original title/language, page count, publication year, reading status, ownership, notes, and every category/imprint/collection tag among others. - New boolean search mode: chain any number of conditions with AND/OR, tap a connector pill to flip it. - Tap the new search tips to hide the search menu for a clearer view of the search results. - Operators adapt to field type: tag fields (category, imprint, collection) get includes / excludes / includes all; numeric fields (year, pages) get equals / greater than / less than / between; text fields get contains / exact match / starts with. - Quick filters and boolean search share one underlying query: an active quick-filter search can be continued in boolean mode instead of starting over, and any boolean query can be saved as a self-updating smart shelf, same as before. ### Minor changes
    More…
    - Database location setting doing nothing on Android 11+ (#24): added the "All files access" permission flow, so moving the database folder in Storage settings now actually relocates the files instead of silently staying in the default location. - When searching a book, ISBNs now are added to the selected book if the result metadata does not have it. - When a book is not found, a button to add manually is implemented, passing the ISBN to the book form. - Book search now has a "Recommended book" option, which uses a relevance algorithm to select and merge metadata into a more complete book. - Extended test coverage in the source code to the main components. - Added exclusion of pruning for certain or all categories in settings (#28) ### Fixed - Backup import failing on the first launch after upgrading from 1.1.1 (#21): target subdirectories weren't being created before migration tried to write into them. - Reading language not saving in a few places: scanned search results, batch tagging from the barcode scanner, and the cover URL when saving a book. - Book appearing in shelves after deletion and general shelf reactivity (#29) - Fixed issue where books already started cramped all the progress in the first section if the advanced pagination was used
  • Aug 22, 2026 1.2.2
    **Full Changelog**: https://github.com/Swappppy/Openshelf/compare/v1.2.1...v1.2.2
  • Aug 15, 2026 1.2.0
    ## v1.2.0 - Translation Metadata, Ownership Tracking & New Languages ### New features **Translation & ownership tracking** (https://github.com/Swappppy/Openshelf/issues/12) Added support for tracking translated editions and provenance of your books. - New `originalTitle` and `originalLanguage` fields for translated books. - New ownership status tracking (bought, gifted, borrowed, etc.) with a dedicated `OwnershipLog` table and a full history view, so you can always see how a book entered your collection. **New languages**
    More…
    Openshelf is now available in French, Italian, Catalan, and Portuguese (with separate `pt_BR` and `pt_PT` variants). > **Note:** Many strings have been translated using AI to speed up localization and improve the app's reach. If you're a native speaker and notice anything that sounds a bit "off," please let me know or fix it directly on Weblate. I speak Catalan myself and can confirm those strings are accurate, if this approach works well for you, I'll keep adding more languages this way. ### Minor changes - Refactored book management logic and UI: centralized labels, icons, and colors via extensions for `ReadingStatus`, `BookFormat`, and `OwnershipStatus`. - Extracted reusable widgets (`SectionHeader`, `ReadOnlyField`, `BookRatingBar`, `CoverPlaceholder`, `DatePickerField`) to reduce duplication across book detail and form views. - Simplified state management and data loading in the book form. - The grid view can now disable the info tab to show the full cover (https://github.com/Swappppy/Openshelf/issues/16). - Collections now are not unique, a book can have as many collections as the user wants (https://github.com/Swappppy/Openshelf/issues/15). - Rework of the form view of collections and imprints - Rework of the detail view UI of the different states (read state, physical format, wherabouts). They are also interactuable now, as the tags. **Full Changelog**: https://github.com/Swappppy/Openshelf/compare/v1.1.2...v1.2.0
  • Jul 29, 2026 1.0.0
    ## New features ### Pagination system Now each book can have multiple independent sections, with support for both roman and arabic numerals. Each section has each own progress and can be read independently. Also, markers can be added. Both of these features can be color coded and show in a custom tab under the progress bar. <img width="270" height="495" alt="IMG_20260729_200601" src="https://github.com/user-attachments/assets/6b58acf8-b93c-45b1-a8ab-233e9c759b9d" /> <img width="270" height="533" alt="IMG_20260729_200421" src="https://github.com/user-attachments/assets/686bdd50-137d-43de-ac1f-fd00ba0f8185" /> <img width="270" height="290" alt="IMG_20260729_200522" src="https://github.com/user-attachments/assets/39b45c7b-cc6b-4013-952c-f3c0bfcfa884" /> <img width="270" height="181" alt="IMG_20260729_200500" src="https://github.com/user-attachments/assets/6b71bc8f-f665-48ce-879d-d1d525ac7196" />
    More…
    ### Read history and rereads A new log system for each book has been implemended. When a book is started a new read is automatically started. When completed (each section of the book finished), the read is closed. This wraps the old dates in a new UI. <img width="270" height="178" alt="IMG_20260729_200838" src="https://github.com/user-attachments/assets/c93a6e92-f44c-47d5-a255-453af165339d" /> When a book is finished, you can add a reread. These can be complete (all the sections of the book) or by section. This will reset the selected sections and add a new log in the reading history, opening another entry for the sections or the book. <img width="270" height="568" alt="IMG_20260729_200759" src="https://github.com/user-attachments/assets/ed108089-c3a2-4c5b-950b-a1920e90d4ca" /> ### LibraryThing Added import and export logic for LibraryThing. ## Minor changes - Added better local export flow and added the option to share the export zip. - Refined import and export logic from Goodreads to avoid obsolete files when Amazon changes the format again, it now uses property names to parse the data. ## Bug fixes - Fixed a bug where the add book button did not show for really small screens. - Fixed a bug where the pages count in the pages widget would only show the all time biggest page counter instead of the correct read pages. - Fixed a bug where multiple widgets failed to update when the page number changed. - Fixed a bug that produced an app crash when the user tried to add a progressive jpeg as the cover.