{
  "versionName": "0.6.0",
  "versionCode": 2095,
  "baseVersionCode": 95,
  "apkUrl": "https://updater.javp.app/javp-0.6.0+95.apk",
  "changelog": "## 0.6.0+95 (2026-08-23)\n\n\ufeff### Fixes\n- Proxy test failures no longer look like the saved host is example.com (NordVPN and other SOCKS presets).\n\n\ufeff### Fixes\n- Proxy test failures no longer look like the saved host is example.com (NordVPN and other SOCKS presets).\n\n- Windows cinema / fullscreen no longer leaves the native title bar and window buttons on screen.\n\n\ufeff### Fixes\n\n- Windows cinema / fullscreen no longer leaves the native title bar and window buttons on screen.\n\n### CI\n\n- Vendored `prebuilt/android/*/librqbit_engine.so` so Play and sideload Android jobs skip cargo-ndk (~hour saved on AAB builds).\n\n## 0.6.0+94 (2026-08-23)\n\n### Fixes\n\n- Search stays responsive while typing: local results debounce, short queries stay local-only, and catalog FTS no longer freezes the window on large libraries.\n- Series and detail pages no longer freeze when Search enriches a title into an empty category rail.\n- Catalog Films and Series shelves keep showing posters while Synchroniser refreshes instead of flashing Loading.\n- Home Films and Series previews keep a fair mix across catalogs after a large sync replace (small catalogs no longer fill the whole rail).\n- Settings no longer jumps when the on-screen keyboard opens; Catalog and Live TV app bars stay opaque while scrolling.\n\n- Catalog and Live SQLite open again on Android after SyncEngine (busy_timeout and related PRAGMAs).\n\n- Custom catalog next/previous episode buttons stay available while the next\n  row is still resolving (no more grayed-out skip when the fill is slow or\n  fails).\n- Watching several versions of the same episode keeps one playtime on the\n  episodes list, and the list updates without needing a pull-to-refresh.\n\n- Resuming with the player play button no longer pauses again when you lift\n  your finger (one press was firing play then pause).\n\n- Catalog/Home/TV shelves keep loading from SQLite during Synchroniser instead of empty spinners or Plex-only Home previews\n- Catalog category titles keep region tags like `[FR] \u2026`\n- Search keeps showing local hits while sources are still syncing (no longer restarts remote search on every ingest pack)\n- Series pages label unaired episodes and show aired vs upcoming counts when air dates are known\n- Guide short programs no longer overlap the next slot\n- Jumping to live from Xtream DVR keeps username/password on the live URL\n- DVR no longer treats buffering underruns as \u201ccaught up\u201d and skips ahead to live\n- Live zap falls back to the next quality sibling when the preferred/Auto feed fails to open\n\n- Windows stays usable while a large first sync runs \u2014 you can still move, focus, and close the window. Catalog and Live TV keep filling in the background.\n\n- Live sync now downloads the full channel list once and merges it into the existing library, instead of walking every TV group one by one. Opening a group on Live TV still talks to the server immediately while that dump runs.\n- A VOD refresh that did not change titles skips rewriting the whole catalog. Movie packing overlaps the series download so Saving VOD starts sooner.\n\n- SIMKL Watching / Plan-to-Watch matching also searches SQLite Catalog titles and custom catalog `/search`, and retries while an Xtream (or other) source is still syncing so titles link without a manual Search.\n\n- Sources keeps showing background work after the first playlist pass \u2014 Saving VOD and Filling live channels stay on the source row instead of only on Live TV.\n- Filling live channels is quicker: two groups at a time, without a pause after every group.\n\n- Checking whether a VOD catalog already matches no longer freezes the app on a large refresh before Saving VOD starts.\n\n- Opening Catalog on a phone with an existing library no longer stays on Loading while that catalog is already saved on disk.\n- Tapping See all no longer crashes when the app refreshes the current route.\n\n- Keep Catalog shelves, See-all pages, and search usable while a freshly rebuilt library is still syncing in the background.\n- Search keeps the current query live as new catalog rows become searchable during a source sync.\n- Opening a category while that source is still ingesting no longer drops titles that were already saved for the same shelf.\n- Catalog and search hide leftover titles from the previous catalog as soon as that shelf has newer rows, and a failed sync rolls back the partial ingest instead of leaving mixed generations.\n\n- Keep Catalog smoother when a freshly rebuilt library is still syncing in the background.\n\n- Web Google Drive: connecting (and listing / syncing profiles) no longer fails with `Unsupported operation: new RawReceivePort` \u2014 profile sync JSON work uses the web-safe compute helper instead of isolates.\n\n- Keep very large on-demand catalog syncs responsive while building Versions groups.\n\n- Android 15: stop declaring an unused media-playback foreground-service permission so Play Console no longer treats boot + restricted FGS as a crash risk (downloads still use dataSync only while active; EPG reminders only reschedule alarms after reboot).\n\n### Features\n\n- Windows: Xtream Synchroniser (VOD, live, and guide) runs in a separate SyncEngine process so the main window stays clickable during catalog work\n\n- Home explains when a newly added source is still on its first sync and that it can take a while. Catalog and Live TV stay usable while that finishes.\n\n- Search shows which catalogs are still being checked, and which sources are mid-sync, so results do not look final while they are still growing.\n- My List posters show the Catalog source(s) that can play a linked title (including \u201cN sources\u201d), not only the tracker list name.\n\n### Player\n\n- Fullscreen live now-playing overlay matches the playbar width and keeps the programme description collapsed until you expand it.",
  "force": false,
  "channel": "stable",
  "publishedAt": "2026-08-23T19:07:53+00:00",
  "releases": [
    {
      "versionName": "0.6.0",
      "title": "0.6.0+95 (2026-08-23)",
      "notes": "\ufeff### Fixes\n- Proxy test failures no longer look like the saved host is example.com (NordVPN and other SOCKS presets).\n\n\ufeff### Fixes\n- Proxy test failures no longer look like the saved host is example.com (NordVPN and other SOCKS presets).\n\n- Windows cinema / fullscreen no longer leaves the native title bar and window buttons on screen.\n\n\ufeff### Fixes\n\n- Windows cinema / fullscreen no longer leaves the native title bar and window buttons on screen.\n\n### CI\n\n- Vendored `prebuilt/android/*/librqbit_engine.so` so Play and sideload Android jobs skip cargo-ndk (~hour saved on AAB builds).",
      "versionCode": 95
    },
    {
      "versionName": "0.6.0",
      "title": "0.6.0+94 (2026-08-23)",
      "notes": "### Fixes\n\n- Search stays responsive while typing: local results debounce, short queries stay local-only, and catalog FTS no longer freezes the window on large libraries.\n- Series and detail pages no longer freeze when Search enriches a title into an empty category rail.\n- Catalog Films and Series shelves keep showing posters while Synchroniser refreshes instead of flashing Loading.\n- Home Films and Series previews keep a fair mix across catalogs after a large sync replace (small catalogs no longer fill the whole rail).\n- Settings no longer jumps when the on-screen keyboard opens; Catalog and Live TV app bars stay opaque while scrolling.\n\n- Catalog and Live SQLite open again on Android after SyncEngine (busy_timeout and related PRAGMAs).\n\n- Custom catalog next/previous episode buttons stay available while the next\n  row is still resolving (no more grayed-out skip when the fill is slow or\n  fails).\n- Watching several versions of the same episode keeps one playtime on the\n  episodes list, and the list updates without needing a pull-to-refresh.\n\n- Resuming with the player play button no longer pauses again when you lift\n  your finger (one press was firing play then pause).\n\n- Catalog/Home/TV shelves keep loading from SQLite during Synchroniser instead of empty spinners or Plex-only Home previews\n- Catalog category titles keep region tags like `[FR] \u2026`\n- Search keeps showing local hits while sources are still syncing (no longer restarts remote search on every ingest pack)\n- Series pages label unaired episodes and show aired vs upcoming counts when air dates are known\n- Guide short programs no longer overlap the next slot\n- Jumping to live from Xtream DVR keeps username/password on the live URL\n- DVR no longer treats buffering underruns as \u201ccaught up\u201d and skips ahead to live\n- Live zap falls back to the next quality sibling when the preferred/Auto feed fails to open\n\n- Windows stays usable while a large first sync runs \u2014 you can still move, focus, and close the window. Catalog and Live TV keep filling in the background.\n\n- Live sync now downloads the full channel list once and merges it into the existing library, instead of walking every TV group one by one. Opening a group on Live TV still talks to the server immediately while that dump runs.\n- A VOD refresh that did not change titles skips rewriting the whole catalog. Movie packing overlaps the series download so Saving VOD starts sooner.\n\n- SIMKL Watching / Plan-to-Watch matching also searches SQLite Catalog titles and custom catalog `/search`, and retries while an Xtream (or other) source is still syncing so titles link without a manual Search.\n\n- Sources keeps showing background work after the first playlist pass \u2014 Saving VOD and Filling live channels stay on the source row instead of only on Live TV.\n- Filling live channels is quicker: two groups at a time, without a pause after every group.\n\n- Checking whether a VOD catalog already matches no longer freezes the app on a large refresh before Saving VOD starts.\n\n- Opening Catalog on a phone with an existing library no longer stays on Loading while that catalog is already saved on disk.\n- Tapping See all no longer crashes when the app refreshes the current route.\n\n- Keep Catalog shelves, See-all pages, and search usable while a freshly rebuilt library is still syncing in the background.\n- Search keeps the current query live as new catalog rows become searchable during a source sync.\n- Opening a category while that source is still ingesting no longer drops titles that were already saved for the same shelf.\n- Catalog and search hide leftover titles from the previous catalog as soon as that shelf has newer rows, and a failed sync rolls back the partial ingest instead of leaving mixed generations.\n\n- Keep Catalog smoother when a freshly rebuilt library is still syncing in the background.\n\n- Web Google Drive: connecting (and listing / syncing profiles) no longer fails with `Unsupported operation: new RawReceivePort` \u2014 profile sync JSON work uses the web-safe compute helper instead of isolates.\n\n- Keep very large on-demand catalog syncs responsive while building Versions groups.\n\n- Android 15: stop declaring an unused media-playback foreground-service permission so Play Console no longer treats boot + restricted FGS as a crash risk (downloads still use dataSync only while active; EPG reminders only reschedule alarms after reboot).\n\n### Features\n\n- Windows: Xtream Synchroniser (VOD, live, and guide) runs in a separate SyncEngine process so the main window stays clickable during catalog work\n\n- Home explains when a newly added source is still on its first sync and that it can take a while. Catalog and Live TV stay usable while that finishes.\n\n- Search shows which catalogs are still being checked, and which sources are mid-sync, so results do not look final while they are still growing.\n- My List posters show the Catalog source(s) that can play a linked title (including \u201cN sources\u201d), not only the tracker list name.\n\n### Player\n\n- Fullscreen live now-playing overlay matches the playbar width and keeps the programme description collapsed until you expand it.",
      "versionCode": 94
    },
    {
      "versionName": "0.5.4",
      "title": "0.5.4+85 (2026-08-19)",
      "notes": "### Fixes\n\n- Home no longer keeps posters from a catalog after that catalog is removed or turned off, including when other catalogs still fill Movies and Series.\n\n- IPTV live groups sync again on existing installs \u2014 opening a live category no longer fails while movies and series still load.\n\n- Android Picture-in-Picture: a player button starts it, Home / recents auto-enter works on more phones, and leaving the app no longer pauses the video before the system PiP window appears.\n\n- JSON catalogs added in Sources show up in the Catalog tab again, including lists that omit category names.\n\n- Series episode download icons update as a download queues, runs, or finishes, without leaving the page.\n\n- Web Google Drive: connecting (and listing / syncing profiles) no longer fails with `Unsupported operation: new RawReceivePort` \u2014 profile sync JSON work uses the web-safe compute helper instead of isolates.",
      "versionCode": 85
    },
    {
      "versionName": "0.5.3",
      "title": "0.5.3+82 (2026-08-18)",
      "notes": "### Features\n\n- Magnet and `.torrent` playback now uses an Apache-licensed engine, so the\n  app binary is no longer tied to the old GPL torrent plugin.\n\n- JSON catalogs can send an XMLTV programme guide (`epgUrl` or an `epg` capability) so live channels from that catalog show in TV Guide.\n\n### Fixes\n\n- Custom JSON catalogs that advertise an XMLTV `epgUrl` now load that guide for live channels.\n\n- Custom catalog XMLTV guides now ingest programmes instead of reporting an empty guide after a silent parse failure.\n- Downloading a programme guide during Sync no longer freezes the window \u2014 clicks and scrolling stay responsive while the feed imports.\n\n- Torrent catalog episodes play on Windows again. The app now tells the catalog it can stream magnets, so play no longer dies with \u201cunable to create url for the episode\u201d.\n\n- HLS quality picks stay on the same stream and change at the next segment instead of reloading the video.\n\n- Changing stream quality no longer freezes the picture while the player rebuilds the video surface.\n\n- Desktop catalog databases, offline downloads, and other app files now live in a `JAVP` folder inside Documents instead of sitting in the Documents root. Existing files are moved on first launch.\n\n- Opening large live or catalog groups, reloading a guide, and syncing a source stay clickable instead of freezing or crashing the app.\n\n- Fetching an M3U playlist no longer freezes the window (404s included) \u2014 you can switch apps and click while the status strip updates.\n- Opening a large live category stays clickable instead of locking focus for several seconds.\n- Profile sync no longer re-downloads a custom catalog dump and freeze the window.\n\n- Expanding the mini player (or opening a channel while it is up) no longer flashes a full-bleed in-between layout before the real player chrome.\n\n- Dropped source types (Twitch/Kick after the revert) no longer stay in Live TV cache. Opening a leftover channel used to freeze the player (`Failed to recognize file format` after remapping to Xtream).\n\n- Torrent playback waits until the engine is live before picking a file, so opening a magnet no longer fails with \u201ccan't update initializing torrent\u201d.\n\n- Snackbar notices no longer queue behind each other with no way to skip them \u2014 only the latest stays on screen, and you can dismiss it with the close control or Escape.\n\n- Opening Sources (and Search / History / My list) during a library sync no longer freezes the window \u2014 the page appears immediately and status updates stay on the source rows.\n\n- After Sync finishes the live playlist, the Sources row no longer stays on \u201csyncing\u201d while the guide or VOD cache warms in the background \u2014 and that follow-on work no longer freezes the window when those caches are already on disk.\n\n- Manual Sync no longer parks forever when Windows never delivers window-focus after a hang \u2014 the taskbar can take the window again.\n\n- Large live, catalog, and TV guide lists stay on disk instead of loading the whole listing into memory, so opening them stays smooth.\n- Catalog still shows a source\u2019s movie and series groups after the library moves to disk.\n- Home Films and Series rails fill from the on-disk library instead of staying empty after a restart.\n- The TV guide \u201cOn now\u201d row and channel sheets pick up the attached guide after a reload, without leftover programmes from the previous feed.\n- After a profile restore, Live and Catalog fill from the on-device library instead of treating Drive sync stamps as \u201calready downloaded.\u201d\n- Opening Live after a sync no longer rebuilds the whole channel list just because category chips arrived.\n\n- After a hitch, background catalog jobs no longer pile on and freeze the window again.\n- Opening a stream no longer rebuilds the shell mid-frame.\n\n- Pausing on-demand playback no longer shows a loading spinner.\n\n- Windows no longer blocks its own window during library sync \u2014 you can bring JAVP to the front instead of clicking a frozen copy of itself.\n\n- Catalog Movies and Series list groups from the on-disk library after Try demo (and other custom catalogs), instead of staying empty until titles were also held in memory.\n\n- The Windows portable zip keeps library, downloads, and settings in a `data` folder next to `javp.exe`, instead of sharing AppData with the installed app.\n\n### Player\n\n- \u221210 / +10 skip jumps immediately on each tap; the +10 / +20 / +30 badge still accumulates.\n- The skip badge stays up only while another tap still stacks (same 300ms window as the opening double-tap).",
      "versionCode": 82
    },
    {
      "versionName": "0.5.2",
      "title": "0.5.2+80 (2026-08-16)",
      "notes": "### Fixes\n\n- Live HLS quality picks apply for real: if the in-place switch does not change the picture, the player opens that rendition instead of staying on Auto.\n- Profile sync still runs while you watch (other devices get progress) without freezing the player: the merge is pushed in the background, and this device applies it when playback ends.\n\n- My List bookmarks the show when a catalog files an episode under a streaming-house shelf, instead of saving that shelf as the title.\n\n- Large live playlists stay responsive while syncing \u2014 the app no longer builds a full in-memory channel list just to refresh TV.\n- Large VOD libraries stay on disk the same way \u2014 custom catalogs, Xtream/Stalker, and media-server pages no longer keep the whole movie list in memory just to refresh Catalog.\n\n- Live HLS Adaptive Quality (same stream, several rungs) switches the picture in place instead of reloading the channel.\n\n- Live HLS quality from catalog play URLs switches in place instead of reloading the stream.\n\n- The app no longer rotates into upside-down portrait.\n\n- Switching quality or version keeps the captions you picked instead of falling back to the stream default.\n\n- Opening a series you already started scrolls the season chips to the season in progress.\n\n- Playing an episode that exists in two catalogs now uses another source when the first has no stream URL.\n\n- A torrent stall no longer jumps to the next episode as if the current one had finished.\n\n- Plex Movies only lists titles Plex actually has video for, instead of filling Catalog with posters you cannot play.\n\n- On desktop, Add source and other pickers (Settings, Live/Catalog filters, quality, EPG) open as centred dialogs instead of phone-style bottom sheets.\n\n- Catalog versions that list their own audio and caption languages now show those languages on the title page (instead of copying the parent row).\n\n- Windows stays clickable while a large library or TV guide finishes saving in the background.\n\n- Continue watching keeps one card (and shared resume) when switching movie versions instead of listing each encode.\n\n- DRM-protected streams show a clear error instead of a generic playback failure, with a shortcut to open in an external player.\n\n- Open in external player shows the system app picker instead of always launching VLC.\n\n- Home \"N sources\" chips fill in from sqlite while Accueil is idle \u2014 you don't have to open a title first. Shelves are not rematerialized.\n\n- Home On now: tap the card to watch live. Start-over appears when a catchup sibling exists (even if the live stream itself has no archive), and that button is clickable on desktop.\n\n- Live TV filter chips, channel sort labels, and guide now / ended / upcoming status follow the app language.\n- Live For you / All / In your language chips, See all, and the empty language list follow the app language.\n- TV source reorder arrows announce Move up and Move down.\n\n- Live Search / Catchup filter / Guide treat a channel as catchup when any quality or source sibling has archive, not only the Auto/HD stream.\n- Guide and Search programme rows show the date, start\u2013end time, and whether catchup can play; start-over and archive record resolve the catchup sibling instead of the HD listing.\n\n- Hovering the mini player no longer brings up the fullscreen playback controls.\n\n- Collapsing the player back to the mini bar no longer rebuilds the page behind it, so Home / Catalog come back without a stutter.\n- Closing the mini player hides the bar immediately instead of waiting for playback teardown.\n\n- Collapsing or restoring the player no longer flashes a black screen or freezes the UI.\n\n- Collapsing the full player back to the mini bar is smooth again \u2014 the picture stays up, and Home does not rebuild in the same moment.\n\n- The full player shows one minimize chevron while a stream is opening, instead of two stacked on the same corner.\n\n- Pause / play and stream stats respond immediately instead of waiting on the decoder or rebuilding the video surface.\n- Windows no longer pauses video after 45 seconds in the background, or when you minimize / switch windows.\n- Android Picture-in-Picture keeps playing when you leave the app (Home / lock); it no longer pauses on the way into the bubble.\n- Home / Catalog \"N sources\" chips update as soon as extra editions are known, without rematerializing Accueil.\n\n- Streams that fail to open show an error with retry, instead of spinning forever with a hidden mouse cursor.\n- Back and Escape still leave a failed or never-started stream and return to the menu, instead of trapping you on a spinner.\n\n- Pause stops the picture as soon as you press the button, instead of waiting for the player\u2019s command queue.\n\n- Clicking the picture pauses right away, like the pause button.\n\n- Audio and subtitle menus only list tracks in the current stream, with a real language name per row (keep \u201cJapanese\u201d; show \u65e5\u672c\u8a9e instead of `jpn`). Other versions stay in Version / Quality, so switching encode no longer piles extra fake choices into the list.\n\n- Plex added via account sign-in stays reachable on other devices with Google Drive / folder sync \u2014 remote and relay addresses travel with the source, not only the LAN URL from the first device.\n\n- Sync no longer freezes the Windows window (clicks / focus) until it finishes.\n\n- Movie and series pages list every available audio and caption language, not only the ones that match your preferred locale.\n\n- Title prefixes that are not real language tags (comedy acronyms, show names) are no longer shown as audio languages.\n\n- Home shows last-close shelves on the first frame instead of a spinner, and startup no longer freezes the window while catalogs and live listings finish loading.\n\n- Web Google Drive: after the GIS identity button, show **Allow Drive access** for a direct click (browsers block the permission popup from an async callback); clearer popup-blocked guidance.\n\n- Web companion shows a clear Home / Sources banner when sources use HTTP, stating it\u2019s a **browser limit** (not a JAVP bug), with Download the app and dismiss.\n\n- Windows stays clickable and can take focus while the library loads or syncs in the background. The window was not marked Not Responding \u2014 clicks and focus just stopped working.\n\n- Windows: returning to the app from the taskbar or Alt+Tab no longer freezes the window or eats clicks while a background source refresh is running.\n\n- Opening a channel in the full player now remembers whether the side panel was open or closed, instead of always showing it (Windows and other watch-and-browse layouts).\n\n- On Windows, Escape, clicking outside, and the close control can dismiss the Cast picker and other in-player side menus.\n\n- Try demo loads much faster \u2014 swapped dead Archive.org HD hosts for short trailers/clips and lighter posters\n\n- Windows / desktop Picture-in-Picture is a video-only floating window again (always-on-top, bottom-right), instead of shrinking the main window into the watch+browse layout with the sidebar open.\n\n- Player skip previous / next stay paired: if one adjacent episode is missing (for example a download gap), the other button still shows and is greyed out instead of disappearing.\n\n- On Windows, Live channel rows no longer slide over the search field or category chips when you scroll the list.\n\n- Clicking the player controls (title, timeline, empty space on the bar) no longer pauses or resumes. Only a click on the picture toggles playback.\n\n- Sources no longer shows **Updating guide\u2026** after syncing a catalog (or any list) that has no XMLTV guide, and the row updates again when background paging continues.\n\n- Player error chrome (including HTTP-only / mixed-content on the HTTPS site) includes a **Back** control so you are not stuck.\n- HTTP-only playlists explain the browser limit and how to allow insecure content on Chrome/Edge for `web.javp.app`, or download the native app.\n\n- The Cast sheet now always shows a close button, so it can be dismissed even while a sync is running.\n- Saving a large Xtream/Stalker VOD catalog no longer freezes the app while the cast menu is open.\n\n- \"Watched recently\" and \"For you\" now count a channel once even when you watch or favorite different quality versions of it.\n\n- Adding a source from a JAVP link right after launch no longer reports \"Source already added\" when parental controls were still loading.\n\n- Adding or editing a source now pushes to your sync target within a few seconds, and a pending push is sent when you quit or leave the app, so the other device can pick it up without a manual profile sync first.\n\n- Restoring the Windows app from a minimized window now refreshes the layout, so it can be maximized again instead of staying stuck at the minimized size.\n\n- The \"Download queued\" notification now disappears on its own instead of staying on screen until dismissed.\n\n- Versions on a title no longer lists editions of a different movie that only shares a cleaned name and year.\n- Opening a title after browsing many Search results still shows the IPTV language editions that live only on disk.\n\n- Windows: music and radio keep playing when you switch to another window (no more pause after 45 seconds).\n\n- Saving an M3U playlist opened from a share or add link now keeps the shared EPG / XMLTV URL instead of dropping it.\n\n- Editing a live source with Guide set to None no longer drops a stored XMLTV URL or attached guide.\n\n- Turning on a network proxy now routes **torrents only** by default. IPTV, catalogs, metadata, and media servers stay on your normal connection until you tick them.\n\n- Clearing followed sports leagues and teams no longer brings the old list back on the next launch.\n\n- Unified EPG options in Sources: one picker (None, this list / server guide, URL or file, or an XMLTV source) instead of a Plex \u201cuse programme guide\u201d toggle and an M3U menu that only listed None.\n\n- Search lists one cleaned title per movie, instead of duplicate `FR|` / `US|` rows or a single row that hides other editions.\n- Search hints at multiple catalogs with compact source-color dots \u2014 not version chips or both \"N versions\" and \"N sources\".\n- Opening a catalog copy of a movie still lists IPTV language/quality editions on the title page (Search and Home).\n- Picking a version on the title page, Search, or Home no longer makes the other editions disappear.\n- Switching a version on the title page updates the selected stream without flashing artwork or reloading the page.\n- Opening a catalog movie from Search no longer shows Title not found.\n\n- Custom catalog Add/Edit source no longer shows a VAST ad URL field \u2014 ads still come from the catalog JSON (`vastUrl`).\n\n- Plex sign-in and ticked proxy categories report a proxy handshake failure instead of a fake auth error. Retrying without the proxy stays an opt-in Network setting.\n\n- Android: dismissing the system APK installer no longer leaves the updater stuck on Installing\u2026 \u2014 Install stays available without re-downloading.\n\n- Search and Catalog collapse language editions of the same movie more reliably after you open a title or search, so localized copies join one card instead of staying separate.\n\n- Android downloads keep running when you leave the app \u2014 the notification stays in sync instead of freezing in the background.\n- Long category names stay on one line and scroll sideways instead of wrapping.\n- Continue watching on Home keeps the same titles after startup and when you return to Home.\n- Fire TV / Android TV: Back from the fullscreen player returns to the app (mini player docked) instead of exiting to the Fire TV home screen.\n- Live channel lists no longer show HD/FHD/4K next to the name; version count stays on the artwork only.\n- Live TV keeps cached channel lists after a restart and only refreshes groups that are missing or older than a day.\n- Android: Stable and Dev can install side by side again.\n- Android TV: Back behavior for live (hide menu / leave to mini player / leave app) and VOD (stop and return) is consistent; text fields no longer open the keyboard until you press OK.\n- Live TV no longer shows \u201cadd a source\u201d while Xtream categories are still filling; Direct loads channels and category chips reliably.\n- The in-app update button shows Downloading / Installing\u2026 instead of freezing on a blank screen after download.\n\n### Player\n\n- Changing aspect ratio, turning stream stats on or off, or switching quality no longer hitches the picture. Quality changes that have to reload the stream show the loading badge until the new rendition starts.\n\n- HLS quality actually switches in place when libmpv exposes several video tracks (`vid`). Setting a bitrate cap no longer pretends to work \u2014 that option only applies on open, so the picture used to stay the same. If the demuxer only has one video stream, the fallback reopens the master quietly instead of a media playlist.\n\n- Double-tap skip, then more taps on the same side, skips again instead of pausing or showing chrome. Picture-click pause stays desktop-only; phones no longer flash a giant pause icon over the existing center button.\n\n- Switching HLS quality no longer restarts the stream. Auto and locked renditions stay on the same master playlist. Live URL quality and media-server presets retune without the opening spinner freeze.\n\n- Hiding or showing the player side panel no longer hitchs playback or reloads the details list.\n\n- Opening stream stats, the side panel, or leaving fullscreen no longer freezes clicks for a beat.\n\n- Fullscreen, restoring from the mini player, and turning on stream stats no longer hitch the picture.\n\n- Minimizing while a stream is still loading no longer leaves the spinner up after playback starts.\n\n- Switching live channels while fullscreen no longer hitches the picture the way maximize used to.\n\n- Turning stream stats on or off no longer freezes the picture.\n\n- Live multi-view (two channels at once) is hidden until it is reliable.\n- DVR / timeshift no longer jumps back to live and skips what aired while you were behind; catchup requests a long window past the live edge.\n- Fire TV / Android TV: faster VOD rendering, hybrid live player with OK menu transport, programme-mode scrub cursor, and corner mini player (OK restore, hold OK close).\n- After a double-tap \u00b110s skip, more skips on the same side are single taps.\n- JSON catalogs can attach a VAST/VMAP ad tag for linear VOD ads (preroll / mid-roll / post-roll); live, catch-up, offline, and local files are unchanged.\n\n### Features\n\n- Sign in with a Plex account to add Plex Live TV (FAST channels) without a tuner or DVR \u2014 channels and guide show up in Live.\n- The same Plex cloud source also syncs free movies and shows from Plex. Some titles may not play if they need extra copy protection.\n\n- My List can pull your Plex watchlist after you add a Plex source. Titles you already have play from your library; others stay on the shelf until you have them.\n\n- Catalog `playUrl` streams can send a custom User-Agent and HTTP headers (item, variant, episode, or catalog-wide defaults).\n\n- Player settings: Fit / Fill / Zoom / 16:9 / 4:3 aspect, remembered across sessions.\n- Optional stream-stats overlay (resolution, codec, fps, bitrate, buffer).\n- Phone player: drag the left edge for brightness and the right edge for volume; hold-to-2x is unchanged.\n- Decorative IPTV category wrappers (`### FRANCE ###`) are cleaned up in the UI.\n\n- Player can deinterlace interlaced live channels (1080i / 576i). Default is Auto; switch to Always in player settings if a channel still looks jagged.\n\n- Sources list is compact by default: type and live/VOD counts on each row, no playlist or server URL.\n- Reorder sources from a toggle in the list (drag handles on phone, up/down on TV). Color lives in Edit, not the overflow menu.\n\n- Title pages no longer ask you to pick a source or version. Play auto-picks the encode that matches the languages you care about; a short line shows audio / subs / ceiling quality. Switch audio, subtitles, and quality in the player (including across catalogs). Download still asks when more than one file remains.\n- Catalog HLS: the same `playUrl` is one encode. Adaptive rungs stay in the player quality picker \u2014 do not list them as `playVariants`.\n\n- The download site at updater.javp.app now starts with your system (Android, Windows, Linux, or macOS) and only shows that platform\u2019s installer, with other builds a click away. Picking a system and downloading still works if JavaScript is off.\n\n- Download / updater pages can offer **Windows ARM64** and **Linux ARM64** packages alongside x64 (when those builds are published).\n\n- Desktop Settings \u2192 Appearance \u2192 **Layout** (Auto / Desktop / TV): use the leanback TV shell on Steam Deck, HTPC, or any Windows/Linux/macOS box; Auto picks TV under Steam Deck / Game Mode.\n- SteamOS Game Mode shortcut launches with TV layout (`JAVP_UI=tv`); Desktop Mode stays on Auto.\n\n- Series episode lists show the episode count at the bottom so you can tell when you\u2019ve reached the end.\n\n- Pausing or playing now flashes a play or pause icon in the middle of the screen, then fades it out.\n\n- Browser companion at **web.javp.app** is **alpha**: sources and library work for trying the UI; playback and remote media are limited by the browser (HTTPS/CORS), and many native features are unavailable \u2014 prefer the Android/desktop apps for day-to-day use.\n- On web, unavailable features (Cast, torrents, downloads, and similar) point you to **Download the app** instead of failing silently.\n- Google Drive sync works in the browser via the GIS sign-in button (same Web OAuth client as native).\n- `javp.app/add` offers **Open in web app** as well as the native deep link.\n\n- Music stays under Library by default. Turn on Show Music tab in Settings \u2192 Appearance if you want it in the bottom menu.\n\n- On Windows, `javp.exe --version` (or `-V`) prints the build version and exits without opening the app.\n\n- New Music tab for live radio: paste stream URLs (.mp3 / .aac) and browse Radio or Music groups from your playlists. Hide the tab in Settings \u2192 Appearance if you want to keep five items in the menu; Library still has a Music shortcut.\n\n- Search now groups Live, Movies, Series, and Guide (EPG) with counts, and can match programme titles that are on now or coming up.\n- Live and Search treat accents and punctuation as the same letters (`B\u00e9in` = `BeIN`), and typing a channel number jumps to that channel first.\n- Live paints the cached list immediately, refreshes it in the background when it is older than a day, and shows how stale the cache is.\n\n- Live and Search results now match as you type and put the obvious channel or title first, instead of whatever appeared earliest in the playlist.\n\n- Search and Catalog now collapse the same movie\u2019s language editions into one card when they share a TMDB (or IMDb) id, including IPTV/custom catalogs that only embed the id in the title (`{tmdb-123}`) or `ids.tmdb`. Pick the language on the title page before play.\n\n- Cast to **Chromecast, DLNA, and AirPlay** from one sheet: discovery, session controls (play/pause, skip, volume, stop), a dedicated remote, intro/credits skip, speed on Chromecast, and next episode. Chromecast uses a fallback ladder (direct \u2192 phone proxy \u2192 optional Jellyfin/Emby/Plex H.264 transcode) with clearer errors when the TV cannot play the stream.\n- Settings \u2192 Playback: opt-in to ask Jellyfin / Emby / Plex to transcode when Chromecast cannot play the original (off by default).\n\n- Catalog can sort by Popular (default), title, year, or rating; hide finished titles; pin or hide genres. Custom catalogs can send a popularity score (normalized per source).\n\n- On a computer, hold Space for temporary 2x (movies/episodes or timeshifted live); tap still plays/pauses. At the live edge, Space stays play/pause.\n\n- Home puts Movies, Series, and Watch live in the order you actually watch.\n\n- SIMKL and Trakt fill more of the title page (trailers, cast, tracker ids, episode stills/titles/plots) without a TMDB key; with a TMDB key, collections and full cast still fill in.\n\n- The in-app update prompt lists what\u2019s new since the build you already have (including skipped versions).\n\n- Live HLS with a rewind window of about a minute or more can be scrubbed in the playlist itself (pause, skip back, jump to live) without needing a catchup archive.\n\n### Changes\n\n- Hide watched stays on by default and lives in the Filters sheet instead of a chip on the Catalog bar. The filter icon badges when it is turned off.",
      "versionCode": 80
    },
    {
      "versionName": "0.5.1",
      "title": "0.5.1+79 (2026-08-16)",
      "notes": "### Features\n\n- Live HLS with a rewind window of about a minute or more can be scrubbed in the playlist itself (pause, skip back, jump to live) without needing a catchup archive.",
      "versionCode": 79
    },
    {
      "versionName": "0.5.0",
      "title": "0.5.0+58 (2026-08-13)",
      "notes": "### Desktop\n\n- macOS: the download page lists a separate **Intel (x86_64)** zip next to Apple Silicon, so Intel Macs can install without the Apple Silicon build.\n\n### Fixes\n\n- Plex sign-in no longer shows \u201cAuthentication failed\u201d when the SOCKS5 proxy rejects the handshake. The error now says the proxy failed (check username/password in Settings \u2192 Network).\n- Ticked proxy categories (including TMDB / artwork) stay on the proxy. Direct retry after a handshake failure is an opt-in Network setting, off by default.\n\n- HTTP CONNECT and other SOCKS errors no longer tell you to fix a SOCKS5 username/password. The \u201cretry without proxy\u201d option only runs after the proxy rejects credentials.\n\n- Diagnostics logs now keep only the last 24 hours (and still rotate by size), so Copy/Share attachments stay small enough to review.\n\n- Syncing an M3U playlist from Sources on Android no longer fails with an isolate \u201cunsendable object\u201d error.\n\n- Changing a source\u2019s color updates the Sources list (and badges / filter chips) right away, instead of waiting until you leave and come back.\n\n- Anime JSON catalogs attach TMDB episode stills and titles when the catalog sends a TMDB id, including when every episode reused the series poster.\n\n- Adding a source from a javp.app/add link (or the add-source sheet) shows an Adding\u2026 spinner instead of going blank until \u201csyncing in background\u201d.\n\n- Episode rows on phones line up with the thumbnail again, and the episode you left off shows a Resume button.\n- Continue watching opens the episode list so you can Resume, instead of jumping straight into the player.\n\n- Windows: Install & restart no longer keeps offering the same Dev update after the app restarts.\n- Windows: reopening a maximized window (including after Task Manager) no longer leaves the Home UI stuck at the old size inside the frame.\n- Source sync progress on Sources and the Live TV strip follows the app language instead of staying in English.\n- Home: long-press **Remove from Continue watching** on a Continue watching card actually drops that title from the shelf (and no longer leaves a stale last card after History remove).\n- TMDB test/search no longer crashes when SOCKS5 auth fails; metadata retries without the proxy.\n- Anime catalogs keep series poster/plot and pick up TMDB episode stills and titles instead of repeating the AniList cover.\n- Series detail shows a star before the rating again.\n- Catalog ids such as `national` or `seasonal` are no longer treated as anime just because they contain `ona` / `ova`, so TMDB/SIMKL can attach the right title.\n\n- Opening a javp.app/add link adds the source again instead of crashing on the confirmation snackbar.\n\n- Android Cast: device discovery lists Chromecast receivers again (use `RouteInfo.matchesSelector`).\n\n- Opening a category, title, Live group, or search during a source sync jumps the queue so browsing stays responsive.\n\n- More of the UI follows the app language: pairing, profiles, parental hidden sources, download notifications, origin badges, Live/Series chips, and For you \u201cfrom favorite categories\u201d.\n\n- macOS: Finder, Dock, and the app switcher show the JAVP icon instead of the default Flutter logo.\n\n- Saving a proxy now tests the connection and shows authentication failures in Network settings. Catalogs and metadata no longer silently retry over a direct connection when the proxy rejects them.\n\n- Android TV: leaving the fullscreen player (Back) docks a mini player instead of stopping playback.\n- Android TV live DVR: OK menu focuses the playhead (then \u2193 to chips); rewind/forward no longer steal focus back to Browse.\n- Android TV Catalog / Home: Down still reaches the next shelf when that row is loading (See all is the fallback), and Up from the last poster in a row reaches See all.\n- Catalog poster hover / TV focus is a modest lift from the poster center (not a full-screen zoom). Titles stay put.\n- Android TV: D-pad focus on settings rows, buttons, and other in-place chrome scales the outline and fill with the text.\n- Fire TV pairing: PIN / URL column scrolls instead of overflowing the screen.\n- Fire TV catalog refresh no longer fails when the device SQLite build has no FTS5.\n\n- Android TV Home: **Watch live** is already on screen from last close, then refreshes from sources \u2014 no more VOD rails first with the button appearing later.\n\n- Android TV source lists (Live/Catalog filter, Sources, add-source types), Home Watch live, and the side rail: remote starts at the top copy, and Up from the first button scrolls the header back into view instead of pinning that control to the top of the viewport.\n- Android TV Catalog / Home shelves: D-pad Up/Down skips Favorite and See all unless the focused poster is next to them (Up from a nearby tile still reaches them).\n- Android TV Catalog / Home shelves: D-pad Left/Right reveals the next poster before the focused tile hits the edge, so upcoming movies/series stay in view.\n- Android TV / Fire TV For you, Catalog, Live categories, and the fullscreen player: Fire OS **Fran\u00e7ais** matches **FR** in Europe; a negative UTC offset (Canada / Qu\u00e9bec) keeps **CA**.\n- Closing the keyboard no longer leaves a stuck gap under the page or the mini-player.\n- Android TV pairing: after sources land, show a clear Continue screen and auto-finish Welcome onboarding (no stuck \u201cImported\u2026\u201d / re-pair loop); the same panel is not duplicated.\n- Android TV onboarding: pairing no longer starts full source sync on the QR screen \u2014 Continue hands off to Home first.\n- Android TV: update prompt captures the remote (D-pad no longer drives Home/rail behind the sheet); action buttons use the same zoom/ring as menus.\n- Android TV: Right from the side rail lands on Watch live / a tile in one press.\n- Android TV live / VOD: OK menu chips (Browse channels, Guide, Settings, \u2026) take D-pad focus; G / M / P stay keyboard extras.\n- Android TV: Back closes the open player menu / overlay instead of jumping to Home.\n- Opening a pairing link still works when a platform strips `javp://` and leaves a `/pair?\u2026` path.\n- Android TV Live browse: search no longer traps the D-pad (OK to edit, Down/Left/Enter to leave); returning from categories restores and scrolls to the focused channel; M3U categories appear in the left column even with no pinned favorites.\n- Android TV Home: \u201cWatch live\u201d opens the fullscreen player without switching the rail to Direct first; Accueil no longer steals focus from that button.\n- Android TV live overlay: opening a category that is not cached yet loads it (same as main Live TV) instead of flashing \u201cNo channels in this list\u201d while video keeps playing.\n- Catalog \u2192 Movies scrolls without hitching the whole page.\n- M3U playlist sync no longer hangs forever on a stalled download; Sources stays busy through guide reload with feed progress (`Updating guide\u2026`) so EPG no longer looks like a stuck sync.\n- Windows cinema / fullscreen no longer keeps an empty mini-player dock band under the video.\n- **DIRECT** / jump-to-live seeks back to live after leaving timeshift (no more restart at the oldest live segment).\n- Background IPTV warm no longer freezes Settings/browse on large panels.\n- Phone player: larger centered touch transport with glyph shadow; tighter gaps on narrow phones.\n\n- Catalog poster hover / TV focus is a modest lift from the poster center (not a full-screen zoom that covered the rail and made shelves unusable). Titles stay put.\n\n### Features\n\n- SIMKL and Trakt metadata now fill more of the title page: trailers, cast (SIMKL director, Trakt people), tracker ids on the catalog row, and episode stills/titles/plots on series pages \u2014 no TMDB key required for those.\n- When a TMDB API key is also set, collections and full cast still fill in even if SIMKL or Trakt is the selected metadata provider.\n\n- Home Watching now has See all, which opens My List already filtered to Watching.\n\n- Player settings now include a volume boost (100\u2013300%) for quiet movies and shows. It applies only to the title you are watching and resets when playback ends.\n\n- Update notes in the in-app update prompt render as formatted markdown (headings, bold, and lists) instead of showing the markup as plain text.\n\n- Custom JSON catalogs can limit the whole catalog, named sources, or individual titles/versions to certain JAVP versions, devices, or features (such as torrents). Unsupported rows stay hidden instead of failing playback.\n\n- Settings splits General into focused pages: Appearance for movie posters, and Parental controls for the PIN and hidden Live groups.\n\n- History search filters titles you\u2019ve already watched, instead of opening app-wide search.\n- Update prompt: **Ignore this version** hides that build until a newer one ships. **Later** (or **Close** from Settings) only dismisses for now.\n\n- Cast button now picks **Google Cast, DLNA, and AirPlay** from one sheet (one session at a time). Desktop can send to DLNA / AirPlay TVs on the LAN.\n\n- Custom JSON catalogs can set an optional `min_version` so older JAVP builds refuse to sync until you update.\n\n- Android TV Catalog / Home / My List posters grow Netflix-style on D-pad focus, lifted so neighbors do not cover the card. Buttons and dense rows keep a small in-place ring.\n\n- Each profile can sync through its own folder, WebDAV, or Google account (legacy device-wide sync is copied onto existing profiles). Lock a profile with a PIN (device-local, not synced); opening a locked last-used profile shows a picker. Removing a **synced** profile from this device does not need the PIN (the copy on Drive / WebDAV / the folder stays). A phone can add a new profile on the TV over pairing instead of mixing into whoever is open.\n- Custom profile photos, synced with the profile.\n- Parental lock can hide **entire sources**.\n- Android TV / desktop tracker connect (SIMKL, Trakt, BetaSeries): show a QR for the sign-in page next to the device code so a phone can open it without typing the URL. File-based profile sync still omits tokens (re-link on the TV).\n- Sources can be color-coded and reordered; colors show on tile badges and in the Live / Catalog source filter.\n- New sources (and colorless imports) get an automatic unused badge color from the preset palette.\n- Live / Catalog source filter uses All sources vs Custom (no checkmarks); Custom lists sources as tappable rows.\n- Device pairing can optionally include profile sync settings (WebDAV / Google Drive applied over LAN; folder backend prompts for a local path). USB exports stay free of sync secrets.\n- Android TV Sources / Welcome: pair with phone **or** enter a source on the TV (manual add is no longer pairing-only).\n- LAN pairing browser: visiting the TV address asks for the pairing code (or pasted QR link) instead of \u201csession expired\u201d; unlocked page lists sources and can download JSON.\n- Device pairing QR uses `https://javp.app/pair` so phones without JAVP open a browser landing (install / continue on LAN); App Link still opens the app when installed.\n- Device pairing: choose Send vs Get first, then pick sources; merge/replace dialog previews adds/updates/removes before transfer.\n- Device pairing: choose which sources to push or pull (checklists + select all/none).\n- Source sync shows live phase + counts on Sources (and Live TV strip): parsed items, indexing, cache fill, live categories, media-server paging \u2014 soft sync no longer hides progress.\n- Desktop shelf hover lifts the tile above neighbors and grows it Netflix-style so overflow is visible; truncated titles marquee. Dense list rows stay 1:1.\n\n### Player\n\n- Hold or right-click the speed chip to tick which rates a tap cycles through, so unused speeds like 0.5x stay out of the rotation. Tap a row to use that speed now.\n- Tap the elapsed time on the VOD player to switch it to time remaining (`-m:ss`). Tap again to go back to elapsed. The clocks are a bit larger.\n\n- In-player settings (gear) open as a compact side panel so more of the video stays visible. Quality stays in that menu; pick a specific speed with a hold or right-click on the existing speed chip. \u201cExternal player\u201d is shortened so the row no longer truncates.\n- Live loading spinner sits around the channel logo instead of covering it (one mark on TV Live).\n\n### Settings\n\n- Network proxy presets are a provider list (not chips), with a link to each dashboard for credentials.\n- Dropped the Mullvad preset (SOCKS5 is a local VPN bridge \u2014 just turn the VPN on). Added TorGuard and PrivateVPN remote SOCKS5 presets.\n\n### Live player\n\n- Android TV channel up/down shows the next channel on the info bar and waits a beat before retuning, so skipping a few channels does not load each stream.\n- Side panel Channels tab lists same-category peers (and collapses HD/SD siblings instead of listing each quality).\n- Android TV / Big Picture live DVR shows a playhead, delay label, and D-pad scrub on the info bar (same timeline as phone).\n\n### Live\n\n- Live / catchup channels show their official names in the player, guides, tiles, search, and mini player (quality picker rows still show the raw stream title).",
      "versionCode": 58
    },
    {
      "versionName": "0.4.3",
      "title": "0.4.3+57 (2026-08-13)",
      "notes": "### Fixes\n- Catalog poster hover / TV focus is a modest lift from the poster center (not a full-screen zoom that covered the rail and made shelves unusable). Titles stay put.\n- TMDB test/search no longer crashes when SOCKS5 auth fails; metadata retries without the proxy.\n- Anime catalogs keep series poster/plot and pick up TMDB episode stills and titles instead of repeating the AniList cover.\n- Series detail shows a star before the rating again.",
      "versionCode": 57
    },
    {
      "versionName": "0.4.2",
      "title": "0.4.2+56 (2026-08-13)",
      "notes": "Stable release from `main` (`0.4.2+56`).",
      "versionCode": 56
    },
    {
      "versionName": "0.4.1",
      "title": "0.4.1+45 (2026-08-12)",
      "notes": "### Integrations\n- Simkl scrobble: one Watching ping per show (status only), then mark watched at \u226590% \u2014 no mid-episode history spam.\n\n### Home & performance\n- Auto profile sync runs in the background after local changes that need an update (non-blocking); merge apply skips rewriting history when playheads are unchanged.\n- Stop periodic auto-sync from hitching Home.\n\n### Series\n- Mobile show page: episode previews use a compact thumb + text row instead of full-width 16:9 cards.",
      "versionCode": 45
    },
    {
      "versionName": "0.4.0",
      "title": "0.4.0+44 (2026-08-12)",
      "notes": "Stable release from `main` (`0.4.0+44`).\n\n### Accueil / Home\n- Cold start persists a lean **Home shelf snapshot** (continue / watching / movies / series / for-you + rails); await restore before first notify; **per-shelf** merge so a lone live series cannot drop snap Continue Watching.\n- **Plex-like trickle reveal**: CW-first rails (0\u21924) with ~220ms idle gaps; each rail paints **5 posters** first then expands +4 on idle; tight `cacheExtent` / horizontal prefetch until settle; `markHomeRevealSettled` gates heavier background work. Incomplete Accueil OK.\n- Stagger live rails across frames (CW first, then movies \u2192 series \u2192 for-you/groups) \u2014 no one-frame mega rematerialize; don\u2019t overwrite a richer last-close snap with a thinner mid-hydrate paint.\n- After ~200k VOD disk hydrate, Accueil no longer wipes shelf caches or rematerializes on `vodCacheRevision` \u2014 Films/Series wait for ranked group-index (`homeVodShelfRevision`). Soft sync no longer latches hydrate as Catalog \u201cLoading\u2026\u201d forever.\n- Continue Watching **dedupes** series shell vs episode-attached sibling and hides overlap with Simkl Watching; history-fed **Episode N** ghosts promote to series cards (title from details / magnet `dn=`).\n\n### Sync & profiles\n- Source sync defaults to `blockUi: false` (never flips global `loading` / wait cursor). Drive/WebDAV apply uses a **no-local-drift fast path**; phases yield ~24ms after banner updates; `reloadAfterSync` reloads only changed sections and waits for Home reveal settle.\n- Soft source syncs: **1 concurrent until Accueil settle, then 2**; idle-source-sync waves of 2; Drive/rebuild/live-category prefetch wait for `markHomeRevealSettled`.\n- Settings \u2192 Profiles \u2192 Sync: **Show activity status bar** toggle (**default off**); banner is `IgnorePointer` so it never steals clicks/scroll.\n- Cloud profile snapshots are leaner: history drops plot/genres/tracks/tags/headers/segments (keep playhead + CW identity + poster; Retirer tombstones still sync); tracker statuses omit bulk completed; IPTV categories are no longer written (rebuild on source sync).\n- Soft sync no longer force-hydrates ~200k VOD rows on cold start (idle delay); `rebuildCatalogFromSources` no longer treats warm live-only M3U/Xtream as empty.\n\n### Performance & live SQLite\n- **VOD catalog on SQLite** (`vod_catalog.db` + FTS5); Catalog/Search page against the DB; one-shot migrate from `vod_stream_cache.json`.\n- TV Live: Xtream category switches page from the **SQLite live DB** immediately (`pageLiveChannels`); atomic clear+swap; `ensureLiveCategoryAvailable` only when empty.\n- Soft sync / live SQLite: Xtream per-category upsert rebuilds **group listings only** (no N\u00d7 full-source load of ~27k channels); idle live prefetch stays quiet and coalesces one `liveDbRevision` + idle notify.\n- EPG: debounce across back-to-back source syncs; reuse parses on HTTP 304 / session hits; gzip + conditional GET; packed isolate transfer. Desktop blur/AFK **pauses Xtream live category prefetch** (resume ~8s after focus).\n- Catalog shelves: virtualize vertical category list (`SliverList`), bound shelf sample cache, defer rematerialize until scroll settles. Empty shelves show spinner + Loading\u2026 while hydrate/prefetch runs (no flash of \u201cNo titles cached yet\u201d).\n- Memory: tier image-cache by TV / Android `memoryClass`; clear art + EPG scratch on memory pressure. Large Versions index builds off the UI isolate; deferred on desktop blur/AFK.\n\n### Library, trackers & CW\n- Library **Retirer** (right-click / long-press): confirm no longer runs on dead desktop popover context; clears matching history/watchlist and writes `url:<playUrl>` tombstones so Films/Drive cannot resurrect pasted-URL ghosts (azeaze / bac \u00b7 URL); soft-persist cannot rewrite a pre-remove snapshot.\n- Tracker inbound Simkl / Trakt / BetaSeries / Serializd / Letterboxd progress marks **local episodes watched** via `TrackerProgressMerger` (next-to-watch / counts over crude %; never regresses higher local progress).\n- Simkl Watching: when `watched_episodes_count` and `next_to_watch` disagree, treat next-up as unwatched; no more \u201c5/12\u201d while ep 5 stays unmarked. Match ignores custom-catalog Episode N rows that beat the series shell; Anyaa/Nyaa magnets no longer fake **Custom catalog** chips.\n- My List: adding an episode bookmarks the **parent series**; History shows `Show \u00b7 SxxExx`. Live/catchup CW titles remap via `officialLiveTitle` at shelf build time.\n\n### Player & desktop\n- **Sleep timer** (15 / 20 / 30 / 45 / 60 min or Off); pauses in place; survives minimize / PiP.\n- **Open in external player** from player settings and item menus (prefers VLC when installed; progress not tracked outside JAVP).\n- Single continuous open badge (Resolving\u2026 \u2192 Loading\u2026) \u2014 no stacked anonymous spinners; torrent open keeps the same badge through metadata resolve.\n- Stream reload / same-session `open()` keeps the **mini-player dock** (no orphan media_kit audio).\n- Windows: after **~45s window blur**, pause playback (and multi-view secondary) to mitigate `flutter_windows.dll` Fast-Fail / BEX64 on long restore; soft-resume if blur-pause was under ~90s. Close-to-tray defaults **off**.\n\n### Catalog, live UX & discovery\n- Live quality: global **Auto** by default (FHD unless display is UHD/4K-capable); optional Ask each time; session picker + **Remember for this channel**.\n- Catalog / TV **multi-select source filter**; per-Xtream **Include movies & series** (`vodEnabled`); Xtream detection on M3U **save** (hard/soft suggest).\n- Live lists: responsive multi-column grid on desktop / tablet / Android TV; shared `LiveChannelList`.\n- Android TV Home: **Watch live** CTA + Recent live; clearer D-pad focus rings; My List in primary rail.\n- **LAN device pairing (QR / PIN)** for full sources export over Wi\u2011Fi (`javp://pair`).\n- TMDB Popular/Trending \u2229 local shelves; episode stills; enrich polish (certification, studio, directors); movie cover **Auto**; Integrations **?** help on the TMDB card.\n- Demo catalog HD samples; episode preview thumbnails on the series page.\n- Compact `I/sources:` / `I/tracker:` diagnostic lines (no secrets).",
      "versionCode": 44
    },
    {
      "versionName": "0.3.3",
      "title": "0.3.3+43 (2026-08-11)",
      "notes": "Stable release from `main` (`0.3.3+43`).\n\n### Sources & Live\n- **Stalker / Ministra** IPTV portal sources (portal client, library sync, playback, deep links).\n- Phone **LAN remote** for TV search, channel zap, and paste.\n- Live **multi-view** (2\u20134 panes) on Android and desktop.\n- **Sports fixtures** matched to Live channels (TheSportsDB + Settings \u2192 Sports).\n- TV source picker: scroll, live filter, and content counts.\n- Sources **export/import** and Android **Stable \u2194 Dev** sharing.\n\n### Parental controls\n- Per-profile parental **PIN** and hidden Live groups.\n- Hide source-marked **adult** content when the parental lock is on.\n\n### Stability\n- Search on huge IPTV VOD caches: haystack cache + off-UI-isolate filters for large libraries.\n- Catalog \u2192 Movies no longer freezes on very large IPTV libraries (sliced Versions index, capped shelf previews).\n- Verbose hitch diagnostics (light profiler) for lag journals; skip expensive window sizing when profiling is off.\n\n### Desktop\n- Windows system tray (Open, Pause, Settings, Quit).\n\n### Other\n- Updater HTTP requests identify as JAVP (User-Agent).\n- Discord Rich Presence posters use allowlisted public CDN URLs only.",
      "versionCode": 43
    },
    {
      "versionName": "0.3.2",
      "title": "0.3.2+36 (2026-08-11)",
      "notes": "Stable release from `main` (`0.3.2+36`).\n\n### Integrations\n- **Letterboxd** CSV export import: map watchlist / watched / ratings into My List and shared tracker status store.\n- **Serializd** tracker: email/token link in Settings \u2192 Integrations; Currently Watching + Watchlist in My List; dropped/paused/completed into shared tracker status store; optional finished-episode log.\n- **BetaSeries** tracker (device OAuth): link/unlink in Settings \u2192 Integrations; Watching + Plan-to-Watch into My List; dropped/completed into shared tracker status store (Continue Watching exclusion). Tokens stay device-local. Episode scrobble deferred.\n- Shared inbound tracker sync runner + progress merge for SIMKL / Trakt / Letterboxd / Serializd / BetaSeries; statuses travel in profile snapshots (tokens stay device-local).\n\n### Playback\n- Auto captions prefer content / UI / device language when audio is still the original (e.g. original + local captions); English track fallback no longer suppresses captions.\n\n### Stability\n- Tracker Sync Now / list match: one shared chunked match index over catalog+VOD (no per-row rebuild); playback merge batched; light Sync Now stage labels. Profile Drive/WebDAV banner path unchanged.\n- Reduce My List / library UI lag during large tracker and source syncs.\n- Large IPTV VOD caches: build the Versions / multi-source index off the Home paint path (yielded) so catalog hydrate no longer freezes the UI for several seconds after update.\n- Picture-in-Picture / AFK resume: keep playback warm in PiP, pause the background job queue while truly AFK, and skip wake Drive/tracker syncs when returning mid-watch so deferred idle work cannot stampede the UI.",
      "versionCode": 36
    },
    {
      "versionName": "0.3.2",
      "title": "0.3.2 (2026-08-11)",
      "notes": "Stable release from `main` (`0.3.2+34`).\n\n### Settings & Home\n- Settings toggles feel snappier (optimistic switch + idle notify).\n- Preferred content languages with Home locale ranking.\n- Discord Rich Presence toggles sit under General integrations (not About).\n\n### For You & My List\n- For You: VOD family dedupe plus TMDB / SIMKL / Trakt remote enrich.\n- My List redesign with search/filters; SIMKL Watching & Plan-to-Watch; Trakt watchlist.\n\n### Browse & detail\n- Series detail layout closer to the movie page.\n- Versions badge/list fixes; stricter VOD matching (\u201cif unsure, don\u2019t group\u201d); Belle false-merge fix.\n- VOD search / see-all no longer silently caps at ~6k; big-catalog indexing improvements.\n\n### Live / Guide / EPG\n- Guide shows the full channel list (not favorites / 60-cap); playlist order by default.\n- Standalone EPG / XMLTV source; attach to M3U, Xtream, Plex, Jellyfin, Emby.\n- Fuzzy channel matching; per-list guide on/off.\n\n### Sources & shell\n- Sources UI: Plex-first groups; EPG lower in the list; URL|File selector; catalog API docs link.\n- Mini player / AppLayout gutter polish.\n- Library URL delete; Movies reappear fixes (hydrate prune, family watchlist).\n\n### Stability & desktop\n- IPTV VOD hydrate race fix; non-blocking disk hydrate (avoids Not Responding on large caches).\n- M3U / source sync keeps the UI smoother (`blockUi=false` path: live DB + saves off the hot path).\n- Profile sync (Drive / WebDAV / folder): heavy parse/merge/apply off the UI isolate; stage progress in Profiles and a thin top banner.\n- Discord Rich Presence harden (pause timing, privacy, UI locale).\n\n### Updater\n- Versioned artifact URLs in `latest.json` for **all platforms** (Android APKs, Windows zip/setup `.exe`, Linux, macOS) on stable and Dev \u2014 CDN cache-bust. Short aliases remain for the download page."
    }
  ],
  "gitCommit": "4e40e2b30e1c596bbbc5730f1ce862e31ed964f2",
  "apkSha256": "bdf20baa60d4f36fa1a1cceb2c6c0fee6d47af9ce0aae551ef77f6149e2d3e04",
  "apks": {
    "arm64-v8a": {
      "url": "https://updater.javp.app/javp-arm64-v8a-0.6.0+95.apk",
      "sha256": "ed1bfc3093dbdc790f5a42324e4dcb382f6cb310b4f6b3f17a14aa5edf604acf",
      "versionCode": "2095"
    },
    "armeabi-v7a": {
      "url": "https://updater.javp.app/javp-armeabi-v7a-0.6.0+95.apk",
      "sha256": "fa20a5723d22a15486432e49d9d0f21677adcf563ece503cbf4eb78f89bfa6ee",
      "versionCode": "1095"
    },
    "universal": {
      "url": "https://updater.javp.app/javp-0.6.0+95.apk",
      "sha256": "bdf20baa60d4f36fa1a1cceb2c6c0fee6d47af9ce0aae551ef77f6149e2d3e04",
      "versionCode": "95"
    }
  },
  "packages": {
    "windows-x64": {
      "url": "https://updater.javp.app/javp-0.6.0+95-windows-x64.zip",
      "sha256": "f3c1569a0f199edc17172fef9b83d80aa29852a02d6526ec14cb1f54d31f8050",
      "kind": "zip"
    },
    "windows-x64-setup": {
      "url": "https://updater.javp.app/javp-0.6.0+95-setup.exe",
      "sha256": "1e1a291ddae62bad326f253b34588f6e56884bc685f37a59fa1d323b0873c19f",
      "kind": "exe"
    },
    "linux-x64": {
      "url": "https://updater.javp.app/javp-0.6.0+95-linux-x64.zip",
      "sha256": "996549345b0f1df98cc69c46e48ae46c5fd20ae919e1e1b3b1badc58ca3a6c1a",
      "kind": "zip"
    }
  }
}
