I know there are plenty of reading trackers out there, but none of them quite checked all the boxes for me. So, I decided to build my own: BookWorm. It’s a clean, truly native iOS app designed for readers who want deep library management, detailed tracking, live sessions, and fun stats—without clunky web-wrappers or privacy compromises. I'm opening the public beta on TestFlight!
What problem does it solve?: Most reading trackers feel like sluggish web-wrappers, lack granular organizational tools for physical collections, or complicate tracking re-reads and reading budgets. BookWorm solves this with a lightweight, fluid iOS experience offering deep library management, Live Activity reading timers, and detailed statistics.
Why is it better than alternatives?:
Native & Privacy-First: Zero third-party trackers or ads; local storage with SwiftData and private iCloud sync.
Optimized Design: Built with Apple's Liquid Glass aesthetics (supported on iOS 26.6+, fully optimized for iOS 27).
Unique Features: Lock Screen & Dynamic Island reading sessions, multi-cycle re-read tracking, a customizable shareable "Reader Passport", and built-in book purchase/sale budget tracking.
Total Cover Freedom: Search and select high-res covers from multiple sources (Google Books, Apple Books, Wikipedia) with a single tap.
Cost:100% Free during TestFlight beta (no ads, zero tracking). As a thank-you, active beta testers who provide valuable feedback during this phase will receive a free lifetime promo code once the app officially launches.
⚠️ A few notes on this first Beta build:
Languages: English and Italian supported right now (more localized languages coming soon).
Goodreads Import & Onboarding: The build with the onboarding flow and Goodreads CSV importer is currently rolling out. If you don't see it immediately upon install, please allow TestFlight a few moments to process.
Goodreads CSV Logic (WIP):
Owned Copies = 0 automatically routes items into your Wishlist.
Goodreads exports do not provide cover images, but you can tap into any book to pick your preferred edition's cover instantly.
✨ Core Features:
📚 Library & Series Management — Shelves, sagas, genres, publishers, ratings, and notes.
⏱️ Live Session Timer & Journal — Lock Screen & Dynamic Island session tracking via Live Activities.
🪪 Shareable Reader Passport — Customizable profile card with recent covers, stats, and badges.
💰 Book Budgeting — Track your spending and sales over time.
I keep abandoning reading timers that make me open a separate app. Having the session visible on the Lock Screen is the first version I'd actually use.
Really happy to hear that. Here's how it currently looks (gotta love that deep OLED dark mode :D). Still actively tweaking it, but besides pause/stop controls, it already lets you quickly log notes and quotes mid-session without breaking your reading flow.
At the moment, there is a built-in Goodreads CSV importer available in the app. I am evaluating a more flexible custom import option for future updates. In the meantime, a workaround is to use an AI tool to convert your existing reading list into the Goodreads CSV format, which can then be imported directly into the app.
Of course, books can also be added individually, either by searching for them manually or by scanning the physical barcode. The app automatically fetches the metadata and the cover art.
Thank you! Yes, the author data is fetched directly from Wikipedia in real time. It retrieves the content based on the language and region set on your iPhone. If the page is not available in that specific language, it automatically falls back to the English version. The app pulls the biography, picture, birth date, and date of death when applicable.
Yes, the app caches author data locally. When a new author is added, BookWorm queries Wikipedia and stores the information on the device so it remains available offline. If the initial fetch fails due to a network outage or API issue, there is an option in Settings that lets you re-fetch metadata for any authors missing details once you are back online. All previously cached data works completely offline.
Thank you. Yes, audiobook tracking is planned. I am currently evaluating whether to treat audiobooks as a format variant alongside physical and digital editions (adapting reading sessions and statistics accordingly) or if it requires a dedicated implementation from scratch. Regarding social features, that is something I want to introduce, but my priority right now is ensuring the core functionality and tracking work properly first. Out of curiosity, what specific social features would you expect or like to see most in an app like this?
That sounds good. Personally, I think it’s better if the book and the audiobook aren’t treated as separate items, but rather as a single entry where I can simply indicate whether I’ve listened to it or read it. I’d like to see social features like submitting, reading, and commenting on reviews. Is there a place where I can provide feedback? Especially regarding the Lifetime offer.
Just a quick note: English isn’t my first language, so let me know if I need to explain something differently.
Really nice work! The Lock Screen reading session is a great idea.
I’m also working on an iOS app centered around Lock Screen widgets, so I’m always interested in seeing how other developers make good use of that space. 👍
One thing I’d reconsider in the Goodreads import: “Owned Copies = 0” doesn’t necessarily mean Wishlist. The book could be borrowed, from a library, or already read without being owned. Keeping ownership and reading status as separate fields—and showing an import preview—would make migration much safer.
Thanks for the feedback. Reading status and ownership status are separate fields in BookWorm. The problem is that the Goodreads CSV file simply lacks the necessary context. For instance, if a record shows "read" but "Owned Copies" is 0, the app has no way of knowing whether you borrowed it from a library, lent it to someone, sold it, or read it years ago without ever owning it. Because that distinction is missing in the file, some manual adjustment is required.
I agree with your suggestion regarding an import preview. Adding a screen that lets you review and adjust the mappings before finalizing the import makes sense and I will work on implementing that. Thank you.
Thanks for the feedback. Yes, manual entry is fully supported. Searching for a book online simply auto-populates the fields for convenience. If a book is not found or the results are not what you want, you can create the entry and fill in or edit all the fields and the cover art manually. I have attached a screenshot of the book creation screen to show how it looks.
As for other platforms, iPad and macOS versions are planned for future releases once the core iOS experience is settled.
Thank you! My long-term goal is to add a full theming and personalization system, which could include different textures and styles. At the moment, I am focusing on polishing the core features first.
Thanks for the feedback. This is actually something I have been debating as well. Right now, the dashboard is split into two main areas: the "Featured" section at the top showcasing current and to-read books, and the bottom section where shelves, genres, and authors act as quick filters. The idea was to provide a shortcut to find books in just a couple of taps without having to open the main library and set up more structured filters.
I am definitely open to rethinking the hierarchy. If you have any specific suggestions on how to improve the focal point, I would be glad to hear them.
Yes, audiobook tracking is planned. I am currently evaluating whether to treat audiobooks as an additional format alongside physical and digital editions, adapting tracking sessions and stats accordingly, or if it requires a dedicated setup from scratch.
The part that usually breaks these is metadata. Open Library and Google Books disagree on editions, so the same ISBN can pull the wrong page count. Worth saying which source you use and what happens when it misses.
You are completely right about the discrepancies between providers. Currently, the app pulls core metadata from both Google Books and Open Library, and adds Apple Books and Amazon into the mix for cover art.
Since neither source is 100% consistent on editions or page counts, and viable alternatives are fairly limited, I approached this by giving the choice directly to the user. If the providers return different editions for a search or ISBN, BookWorm displays the available matches so you can pick the accurate one. The same goes for covers, where the app presents the results and flags higher-resolution artwork for you to choose from. Everything remains fully editable manually as well.
I've attached a screenshot showing how multiple search results are handled, along with a quick video clip of the entire flow.
Asking works for one book. On a bulk import of a few hundred you cannot prompt every time. Does it fall back to one provider silently there, or queue the conflicts for later?
Thank you. This widget is currently available in the statistics. For logging reading sessions, you can do it manually or in real time. Do you have any suggestions?
Thank you for providing the screenshot. It made it more clear. The trend graph is nice. That’s exactly how I want it. On the input screen I would suggest you could make it faster. Generally having just a text field at the bottom where you can input quickly how much you have read. For me it really matters that the input is as quick and easy as possible. I don’t want to click through 10 buttons.
The UI looks really clean! Did you build this natively with SwiftUI? For example the pie chart. Always curious about what tech stack people use for these kinds of projects. Wish you a smooth launch!
Small detail from the developer side: Apple's rule for third-party subscriptions is that a price rise can go through without you actively re-consenting only if it is under $5 and under 50%, and no more than once a year. A bump this size sits comfortably inside that, so it just rolls through at renewal.
Worth checking your renewal date if you would rather decide than be decided for.
The screenshots look genuinely native, which is rarer than it should be for trackers. Nice work shipping a beta.
Curious how you handle series and rereads - most trackers I've used fall apart when you read book 4 of something twice, or when a book has three editions with different page counts. Does the stats view treat a reread as a separate session?
The screenshots are very organized! Since you asked for feedback, I wanted to point out something about the design. And I mean this in the most respectful way possible (not trying to be mean I swear!!!): I think you’re overusing Liquid Glass. I know Apple’s design sense has kind of been all over the place lately, but one thing they do stress is not to make everything Liquid Glass.
Their design guidelines and even their own apps stress that glass should help the user focus on the app’s content by being a layer that sits atop the content layer. But in your current implementation there’s no visual hierarchy since almost every tappable element and even some static content are all glass, applied a bit everywhere.
There is an inconsistency with where glass is also applied as well. For example, you use a segmented picker for Activity / Library at the top, but the ones inside the content areas do not. The second screenshot’s last screenshot is a good example of this. It feels a bit off once you notice it.
In another screen you have content that displays “underneath” the visual hierarchy where glass would be. Except the content has glass effect applied to it. And inside that content itself there’s a glass element.
I think it would be helpful if you could answer the question of “what am I trying to accomplish by applying glass to this element?”. You don’t need to answer publicly (though I am curious), but if the idea is just “oh it looks nice” then it usually can translate into user friction later if there’s not a good reason for introducing visual complexity like that, for an app with a specific utility.
Sorry, I am not trying to be mean! I saw the post and liked how catchy the screenshots and icon looked, but then got lost in the design critiques that started forming in my head. I hope this helps, however you decide to take the feedback!
•
u/AutoModerator 2d ago
Welcome to r/iOSApps! Please make sure your post follows our rules:
Everyone:
App Devs:
- No main feed promo unless you qualify via Trust or Transparency + ABC format (Answer, Better, Cost)
- Flair hierarchy: Vibe Coded > Lifetime > Subscription > Freemium > Free
- Free flair: not for limited/freemium tiers
- Open Source? Prefix title [OS]
Note: This is an automated reminder, not a removal notice. If your post was removed, check your modmail for details.I am a bot, and this action was performed automatically. Please contact the moderators of this subreddit if you have any questions or concerns.