Extreme InfiniTV v1.6.0
Extreme InfiniTV v1.6.0 ships a docs site, customizable home-page sections, radio mode for M3U playlists, a multi-step connection diagnostic wizard, TV-overscan compensation for Android TV, close-to-tray with first-launch notification, and an in-app Android external-player picker.
Changelog v1.6.0
New
- Docs site at https://infinitel8p.github.io/Extreme-InfiniTV/ with a Pagefind command palette (
Ctrl/Cmd + K), light/dark theme, mobile drawer, page-to-page view transitions, and a scroll-driven reading-progress meter. The app embeds the site in-app at/docs(theme synced viapostMessage); Settings > Help & feedback gains a Read the docs card with an "Open documentation" + "Quick start" deep link. - Customizable home-page sections. Reorder, add, or remove the Continue watching / Favorites / Watch later / Recently added strips from a new Settings card, with per-kind variants like "Favorite channels" or "Recently added series". Drag handle for mouse, up/down arrow buttons for keyboard, D-pad, and touch (44 px on coarse pointers).
- Radio mode for M3U playlists. Entries marked
tvg-type="radio"orradio="true"surface a Radio toggle on/livetvand play through an audio-only surface with poster art as the visual anchor. - Multi-step connection diagnostic wizard. A "Run full diagnostic" affordance below every Test result streams a 4-step (Xtream: authenticate + live + movies + series, with the catalogue probes parallelised) or 2-step (M3U) inline wizard, with pass / warn / fail and latency per step. Surfaced both at Login and per-playlist in Settings. Closes #56.
- Poster context menus on movies and series. Right-click (long-press on touch) opens Open / Favorite / Watch later / Download / Copy stream URL for movies; Open / Favorite / Watch later for series. 44 px touch targets with focus rings so D-pad lands cleanly.
- TV overscan compensation. A 5-step preset (Off / 2% / 4% / 6% / 8%) under Settings > Display > TV safe area insets the whole UI so content stays inside the visible rectangle on TVs. Auto-defaults to 4% on Android TV first launch; opt-out persists. Closes #74.
- Close-to-tray setting on desktop, with a one-shot native notification on first close so users don't think the app quit. Pick "Minimize to tray" (default) or "Quit" from Settings.
- In-app Android external-player picker. Replaces
Intent.createChooser()with a small dialog listing every installed video-handling app, fixing the long-standing VLC "notification fires but the activity never foregrounds" issue. Sends both MX-Player-style and VLC-style header extras so each app uses whichever it understands. - Account connection-limit banner in Downloads. Shows whether a parallel download will fail mid-stream for the active Xtream provider (warn at >=70%, crit at >=100%).
Improved
- Scheme-less Server / Playlist URLs. Both Xtream and M3U entries now accept input without
http://orhttps://; the app probes both schemes and saves whichever answers, including silent HTTPS -> HTTP fallback. Mirrors get the same treatment. (Originally for Android TV onboarding where typinghttp://on a D-pad keyboard is the most painful part of adding a playlist.) - Reason-aware Test connection copy. Errors now classify into
unreachable/timeout/cors/auth_rejected/not_found/rate_limited/server_error/http_error/bad_response, so you get "Server is reachable, but the username or password was rejected" instead of a raw fetch error. - Live TV channel rows scale with font size. Row height derives from the current root font-size and recomputes on resize, so channel text no longer clips when the window is maximised on hi-DPI displays (closes #73).
- Frameless-window resize edges (desktop). Six invisible hit-zones around the perimeter call Tauri's
startResizeDraggingonmousedown, so the resize cursor is reliable regardless of DPI, GPU driver, or third-party shell hooks (FancyZones, GeForce overlay, ExplorerPatcher). - Stable scrollbar gutter across pages so the layout doesn't jump when a page gains or loses a scrollbar (#68).
- Full 16-locale translation pass for every new string in this release.
Fixed
- Arrow keys swallowed in text inputs on TV / D-pad builds (#72). The spatial-navigation polyfill now lets Left / Right keydown reach the caret inside
<input>,<textarea>, andcontenteditablefields. Up / Down still leave the field through spatial-nav. - Downloads pause button "ticking" with progress. The row no longer drifts vertically per progress tick, and the per-tick
appendChildreorder is now position-aware so clicks no longer split between two DOM instances and get dropped. - Category picker toggle landing on the wrong row (#68). Click handler now derives the next state from
aria-checkedon the row that actually received the click instead of stale model state. Focus ring on the rightmost item is no longer clipped.
Under the hood
- Security pass (CodeQL). XMLTV parsers in
epg-data.jsandepg-worker.tsreject input containing<!DOCTYPE>or<!ENTITY>declarations to defuse XXE-style payloads from a hostile EPG URL. Playlist IDs now usecrypto.randomUUID()(or acrypto.getRandomValues()-built UUIDv4 fallback) instead ofMath.random(). The EPG worker also drops cross-originpostMessage. - New scan + housekeeping workflows. CodeQL and OSV-Scanner run on every PR; greetings / stale / summarize-issue automation added alongside.
- Workflow hardening. Third-party GitHub Actions SHA-pinned (
pnpm/action-setup,dtolnay/rust-toolchain,Swatinem/rust-cache,tauri-apps/tauri-action,android-actions/setup-android,google/osv-scanner-action). Test workflow now declares a least-privilegepermissions: contents: read. - Settings refactor. The TV overscan card, Close-to-tray card, and Downloads connection-limit banner now live as dedicated Svelte components (
TvOverscanCard.svelte/CloseToTrayCard.svelte/ConnectionLimitBanner.svelte), trimmingsettings.astroby ~230 lines. No behaviour change. - Locale-cache key bumped
xt_locale_messages_v2->_v3so users with an existing cache pick up the new diagnostic wizard, scheme-swap toasts, connection-limit, poster menu, and hub-strip strings on first launch. Stalev1+v2entries are cleaned up automatically. mainBinaryName: "extreme-infinitv"added totauri.conf.jsonso the Tauri 2.x bundle picks up a stable artifact name across platforms regardless ofproductNamecasing.- Dependency refresh (Astro, Tailwind, Tabler icons, typescript-eslint, and friends).
Mentions
Thanks to @esbnetworking (#72, #73, #74) and @InvisibleRasta (#68) for reporting and testing the fixes for these issues.
Downloads
Pick the file that matches your device. Click a filename to download it directly. The Microsoft Store and Google Play buttons below are the easiest path on Windows and Android.
| Platform | File |
|---|---|
| Windows 10/11 (recommended installer) | Extreme InfiniTV_1.6.0_x64-setup.exe |
| Windows (MSI alternative) | Extreme InfiniTV_1.6.0_x64_en-US.msi |
| macOS (Apple Silicon + Intel) | Extreme InfiniTV_1.6.0_universal.dmg |
| Linux Debian / Ubuntu / Mint | extreme-infinitv_1.6.0_amd64.deb |
| Linux Fedora / openSUSE / RHEL | extreme-infinitv-1.6.0-1.x86_64.rpm |
| Linux portable (any distro) | extreme-infinitv_1.6.0_amd64.AppImage |
| Android sideload (APK) | Extreme InfiniTV_1.6.0.apk |
What about the .sig files, latest.json and the macOS .app.tar.gz?
You can ignore them.
*.sigandlatest.jsonare used by the built-in auto-updater to verify each download is genuinely signed. The app downloads them on its own when checking for updates.Extreme InfiniTV_universal.app.tar.gzis the macOS update bundle consumed by the same updater. For a fresh install on macOS, use the.dmginstead.- The
.aabfile is uploaded to Google Play and is not meant for sideloading. Use the.apkto install manually.
macOS: "Extreme InfiniTV.app" cannot be opened / "Apple could not verify..."
The macOS build is not yet notarized by Apple, so Gatekeeper blocks it on first launch. After dragging the app from the .dmg into /Applications, remove the quarantine flag from a Terminal:
xattr -dr com.apple.quarantine "/Applications/Extreme InfiniTV.app"Then open the app normally. You only need to do this once per install.