New
- Siri & Voice Control — Pause, resume, skip, set a sleep timer (with a duration or end-of-chapter), cancel the timer, jump to the next chapter, ask for upcoming books in a series, or play any book in your library — all hands-free with Siri or Shortcuts. Built on Apple's modern App Intents framework and indexed by Siri, Spotlight, and Shortcuts at install time. A new Voice Shortcuts screen in Settings shows every supported phrase with copy-able examples
- Bulk Series Follow / Unfollow — A new Manage Followed Series page (reachable from the Upcoming Releases 3-dot menu) lists every series in your current library alphabetically with single-tap follow toggles, alpha-scroll, cross-field search across title, author, narrator, and contained book titles, and a header summary of your most recent follows
- Split Genres Tool (Premium Server Admin) — A new Server Admin tool that walks every book on your server, splits comma-separated genre strings on a configurable delimiter, dedupes case-insensitively, and writes the cleaned arrays back. Scan → Preview every per-book diff → exclude any book with a tap → Apply with progress and per-failure retry. Lossless guarantee: every non-empty atom from the original maps to a canonical entry in the result
- Diagnostic Logs — Settings now keeps a redaction-aware rolling 48-hour log of auth, session, and playback events. Export a single NDJSON file via the share sheet to send to support when something goes sideways, then clear the store with a tap. Tokens and bearer values are scrubbed before they ever hit disk
- Home Screen Quick Actions — Long-press the FableFrog app icon on your home screen for two shortcuts: Search (jumps straight to the Library tab with the search field active) and Now Playing (opens the player for your current book and resumes if it's paused). Now Playing shows the live book title and author
- Add to Calendar on Upcoming Books — A new Add to Calendar button on every upcoming book detail sheet drops the release date into your calendar so you'll never miss a drop in your favorite series
- Streaming Label on Covers — Books that aren't downloaded show a small "Streaming" label on their cover so you always know whether a tap will play from the network or from local storage
Improved
- Cover Art Cache — A new on-disk cover cache pre-populates at every standard grid width, so library scrolling paints from local storage instead of refetching covers on every appearance
- Stale-While-Revalidate Book Detail — Book detail and stats pages render instantly from the SwiftData cache and refresh in the background, the same pattern that already powers Library and Home
- Cached Covers Don't Re-Spin — Refreshing your auth token no longer forces every visible cover to reload — cached art stays put across token refreshes
- Smarter Library Refresh — When only a client-side filter changes, the library skips the network round-trip entirely. The list updates immediately
- Download Badge Color — The download badge now uses your accent color so it's distinct from the finished-book indicator at a glance
Fixed
- Self-Healing Player — The player now auto-recovers from AVPlayer wedged-stalls during local playback, instead of getting stuck mid-chapter
- Session Sync Circuit Breaker — A circuit breaker stops repeated session sync failures from cascading and burning battery
- Server-Evicted Sessions — When the server returns a 404 for a missing session, the player automatically opens a new one and resumes
- Token Refresh Failure Recovery — Token refresh failures now sign you out cleanly instead of leaving the app stuck in a half-authenticated state. The token manager actor also clears on session expiry to prevent stale auth state
- Series Auto-Advance — Series auto-advance now re-fetches the full item before playing the next book, so chapter metadata is always correct
- Sleep Timer Across Re-Presentation — Sleep timer expiry state is preserved when the player is dismissed and re-presented
- Stats Tab Side-Scroll — The Stats tab no longer drifts horizontally when you scroll vertically
- Stats Genre Breakdown — The genre breakdown in stats now splits comma-separated genre strings correctly, matching what the new Split Genres tool produces
- External Book Covers — External book covers (upcoming releases, etc.) render square to match the source aspect, no more letterboxing
- Player Menu Flashing — The player menu and book settings menu no longer flash during playback ticks
- Last-Chapter Skip — Tapping next-chapter on the very last chapter now skips to the end of the book instead of doing nothing
- Skip Icon Rendering — Skip icons render correctly for all configured interval values, including custom durations
- CarPlay Progress on Connect — CarPlay refreshes progress from the server when you connect, so you don't see stale positions
- Download Label on Ebooks — The Download label is hidden on books that have an ebook present (no audiobook to download)