2.0.0 (2026-04-29)
⚠ BREAKING CHANGES
- major version bump to 2.0.0
Features
- add "This Season" filter and dynamic genres for anime discover (68382d0)
- add certification range filters and fix MAL airing cache TTL (26f3b7e)
- add discover catalog duplicate button and rename DiscoverBuilderDialog (47a3c55)
- add heap profile to dashboard operations tab (34a8572)
- add META_CONCURRENCY env to cap getMeta fan-out and HEAP_LOG_INTERVAL_MIN for periodic heap logging (17c900d)
- add original language poster fallback toggle in art providers settings (68d40bf)
- add poster cache management to admin dashboard (d74ab9c)
- add PublicMetaDB integration (up next, lists, watch tracking) (ae0c2f3)
- add unified import option for MDBList dynamic mixed lists (5d6e9d3), closes #415
- AIOMetadata 2.0.0 (5c1d102)
- cursor-based pagination for custom catalogs (c1ec9f3)
- custom-art: add raw {id} placeholder support (0a95fe6)
- extend usePosterProxy fallback to logo and backdrop (c1ec9f3)
- show recent dev commits for testing channel in changelog (caf7675)
- streaming top 10 catalogs integration (59de923)
- support FANART_API_PROJECT_KEY with user keys as clientKey (4e93312)
- support FANART_API_PROJECT_KEY with user keys as clientKey (6101409)
- update Top Posters API domain and add user-agent support (4ef0187)
- update Top Posters API domain and add user-agent support (1995e86)
- warm custom poster pattern URLs during comprehensive catalog warming (bf441f9)
Bug Fixes
- add experimental TMDB/IMDB fallback episode matching logic (3559037)
- anime movie ID resolution fallbacks in getMeta (bd494c3)
- avoid duplicate Cinemeta fetch for TMDB series (309fa68)
- avoid full metadata fanout in tvmaze schedule catalog (7dd840e)
- cache auth tokens by api key instead of user UUID (f545971)
- clear ONA type cache on reindex (7179dca)
- correct TVDB language code mapping for Portuguese regional variants (1a1c6d1)
- crash when config.language is undefined in selectTmdbImageByLang (3bae00e)
- crash when config.language is undefined in selectTmdbImageByLang (4ca72f6)
- eliminate OOM from OAuth handlers loading all configs into memory (cebff85)
- exclude videos array when unnecessary (1049ce3)
- guard simkl check-in against stale tokens (881f329)
- ignore Vary header in poster-cache and add concurrent warming (9205bb9)
- mdblist upnext cache key, skip caching empty mdblist results, lightweight healthcheck (db6fc70)
- mobile: polish mobile UI across settings, modals, and bulk actions (9032b04)
- move active user tracking to response phase where req.params exists (c3ee1a4)
- move age rating filter to post-cache processing and convert files to TypeScript (d80dfa6)
- ONA type detection in Kitsu search (e286f6a)
- only run scheduled tasks if e-tag has changed (3b69ac3)
- optimize catalog cache hit logging (845ef8e)
- pagination logic by using Math.ceil for page-based catalogs (21d675e)
- preserve season objects for imdb series episode mapping (cf4db3d)
- prevent logo crush on mobile with long testing version tags (1b57773)
- reduce redis RDB snapshot frequency to hourly (4ebf84e)
- reduce redis RDB snapshot frequency to prevent excessive disk writes (c6684c6)
- release dates: use air date + country of origin to determine release date format. (5fa60ce)
- restore poster proxy URL passthrough mode in meta handler (e55523d)
- retry TVDB requests on HTTP/2 GOAWAY frames (da13382)
- reuse loaded config in catalog and search wrappers (e766f0d)
- route poster warming through poster-cache proxy (2866304)
- short-circuit MDBList requests when quota exhausted (cace872)
- stack Input+Button pairs vertically on mobile across integration modals (4852511)
- stop extras cache from overwriting cast and crew (0ae730e)
- stream expiring-key cleanup (42d1d18)
- tighten up redis initialization sequence (e341620)
- trakt 401 token refresh and custom poster pattern preservation (f4a201b)
- unresponsive UI after closing find & replace type modal (b0c1b53)
- use Math.floor for skip→page conversion and simplify search URL parsing (c1ec9f3)
- user-scoped discover links in cache (2c87840)
- user-scoped discover links in cache (c3d6f54)
- warm poster proxy URLs with fallback params to match live requests (c779eff)
Performance Improvements
- add heap snapshot endpoint for testing (a72fb80)
- add heap snapshot endpoint for testing (25d3d62)
- apply PR optimizations to ConfigCache (b8bb898)
- batch redis writes for meta components (6389498)
- broaden cache key sharing across MDBList, Trakt, AniList, and catalog-level caches (659e5ac)
- cache MAX_CATALOGS env var and remove narrative comments (cf5b85c)
- deduplicate concurrent cache misses with in-flight locks (f4dc3ac)
- deduplicate concurrent cache misses with in-flight locks (7409729)
- implement batch TMDB episode resolver for kitsu (16a1f9e)
- lazily load TMDB languages for language catalog (9cfecee)
- migrate sqlite3 to better-sqlite3 (088d62b)
- optimize meta cache config reuse in fanout paths (e1b852f)
- optimize release timestamp handling in metadata builders (9f9934e)
- reduce content metadata writes on component cache hits (9fe914d)
- reduce frontend bundle size (d46e210)
- remove unbounded requestTimestamps array in pmdb utils (f69515d)
- replace checkIfExists (head+get) with single piped get (2241200)
- scope providers/artProviders per content type in catalog cache keys (2f0cb1c)
- short circuit request tracker (031ea46)