You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Send to device: email books to a Kindle, Kobo, or any address straight
from the web UI — single or bulk (max 25 per send). Per-user device list
in Settings, admin Email tab (SMTP status, test email, all devices, send
history). SMTP configured via TOME_SMTP_* env vars; 25 MB attachment
limit; 50/user/day rate limit (TOME_SMTP_DAILY_LIMIT). Members and
admins only.
API token scopes: tokens can now be created with "full" (default) or "readonly" scope. Read-only tokens are blocked from non-GET requests.
Existing tokens default to full access. Settings UI shows a scope dropdown
on creation and a badge on read-only tokens.
Opt-in parallel library scans via TOME_SCAN_WORKERS (default 1 = serial,
in-process). Set it higher (e.g. CPU core count) to fan the CPU-bound
extract/hash phase across worker processes for large imports; database writes
stay single-process (SQLite single-writer). ~60–80 MB per worker.
Wishlist: members and admins can wish for a book or a whole series. The add
dialog has two modes — Book (structured search across Hardcover, Google
Books, and OpenLibrary, plus a free-text fallback) and Series (Hardcover's
series catalogue, so a series is disambiguated by author and carries its true
volume count). Admins get a Wishlist tab; a matcher links wishes to library
books both when a book is added (forward) and when a wish is created against
books already present (reverse), author-aware so same-named series don't
cross-match. Single-book wishes are fulfilled by linking a book; whole-series
wishes are standing wants that stay open, show an "X of N" coverage strip
(present volumes vs. the series total), notify the requester as each volume
arrives, and close via "mark complete". In-app notifications via a new top-bar
bell, plus email on fulfilment when SMTP is configured. The Series tab requires
a Hardcover token (hardcover_token) — without it the dialog falls back to Book
search only. Toggles: TOME_WISHLIST_ENABLED, TOME_WISHLIST_MAX.
Changed
Website: added raster favicons (.ico + .png) for Google search results
and Cloudflare Web Analytics tracking snippet.
Performance: faster library scans — removed per-book ORM lazy-loads, one
directory walk instead of one-per-format, and throughput-oriented SQLite
pragmas (synchronous=NORMAL, larger page cache, mmap). The book-list
endpoint (GET /api/books) is also much faster — relationships are
eager-loaded, eliminating an N+1 of ~3 queries per row.
Fixed
Full-text search now indexes books inline during scan / upload / ingest, so
newly added books are searchable immediately — previously the index was only
rebuilt at startup, leaving them invisible to search until the next restart.
Cover-bearing files are no longer hashed twice during ingest.
Bulk ZIP download now embeds Tome metadata like every other download path
(single, OPDS, TomeSync) — previously it zipped the raw library files, so
downloaded books carried stale/original metadata instead of Tome's. Library
files on disk are still left untouched.