Astra is a couch-first Jellyfin client for Amazon Fire TV devices running Vega OS. It connects directly to a server supplied by the user and brings personal movie, television, and music libraries into a remote-friendly TV interface.
Astra does not include a hosted catalog, subscription service, public channels, or bundled media. It is an independent client and is not affiliated with Jellyfin or Amazon.
Website and install instructions: https://watchastra.com
The current release is Astra 1.6.3, build 20261104.20, for Fire TV
devices running Vega OS 1.2 or later, including Vega OS 2.0. It is available from the Amazon
Appstore.
- Website: https://watchastra.com (screenshots, setup, and the full release history)
- Package ID:
com.astra.tv - Main component:
com.astra.tv.main - Supported backend: Jellyfin
- Supported server connections: local HTTP and remote HTTPS
- Minimum Vega OS:
1.2, as required by Vega SDK 0.24. Devices on an earlier Vega OS stay on 1.1.2. - Contributors: CONTRIBUTORS.md
- Release validation: 857 tests in 87 suites, ESLint, TypeScript, Vega manifest, and Vega ABI. HDR picture quality, playback recovery, resume, track selection, library navigation and music browsing were accepted on the physical Fire TV Stick for 1.3.0. For 1.4.0, an uninterrupted 130-minute film was played start to finish on the same device to confirm the engagement fix. For 1.5.0, SyncPlay was exercised on a Vega OS 2.0 stick alongside Jellyfin Web: joining, hosting, play, pause, seek, rejoining after a restart, and each SyncPlay permission level. For 1.5.1, the crash fixes were exercised on the same stick: fast focus moves on Home and the grids, pressing Home mid-playback, and leaving playback twice in a row. For 1.6.0, quick play, music Stop, per-series track picks, the sleep timer menu, the still-watching setting and music on a Jellyfin 12.0 server were checked on a Fire TV Stick 4K (3rd Gen) running Vega OS 2.0. For 1.6.1, the same stick played converted episodes to their end into the next episode, held Right to the end, and resumed from the sleep timer with one press. For 1.6.2, sign-in across the update, libraries, Settings, the connection test, the player's menus and autoplay into the next episode were rechecked on the same stick. For 1.6.3, crash reports, playback stats and feature counts were received from a Vega OS 2.0 stick, and two sticks stayed open in the background after leaving a playing or paused video and after five minutes of screensaver.
- Future backends: Emby and Kodi are planned but are not supported today
- Browse movie, series, season, and episode libraries.
- Continue watching and resume from saved playback positions.
- Search the connected Jellyfin server.
- View artwork, descriptions, ratings, genres, cast, chapters, and related metadata when supplied by Jellyfin.
- Select audio and subtitle tracks and inspect playback diagnostics.
- Render SRT/WebVTT subtitles in-app and request server burn-in for formats Vega cannot render reliably.
- Choose shadowed text (default) or a dark subtitle background in Settings > Playback > Subtitle appearance. Text subtitles remain visible when the title and controls hide and move above the controls when shown. Subtitles burned into the video keep their original appearance.
- Show unwatched episode badges on series posters, capped at
99+. - Seek with the arrows or fast-forward/rewind: presses add up into one jump by the configured seek step, holding speeds the step up to 60 seconds, and Jellyfin Trickplay thumbnails show while seeking when the server has them.
- Cap streaming bitrate from 4 Mbps to 120 Mbps. On devices that report an HD-only video decoder, Astra asks the server to scale 4K down, and Stats for Nerds shows what the decoder reported.
- Show how many episodes of the season are left on Next Up cards and episode pages.
- Browse artists, albums, genres, playlists, and large collections.
- Switch between remembered poster and list layouts and use an A–Z jump rail.
- Play songs, albums, shuffled albums, and existing Jellyfin playlists.
- Continue automatically through the album or playlist that supplied a song.
- Seek and use remote Play/Pause controls.
- Keep listening while browsing Astra or while Astra is backgrounded.
- Play from plain-HTTP Jellyfin LAN servers through automatic AAC/TS HLS delivery; HTTPS servers retain progressive direct play.
Music intentionally uses a simple, predictable playback model. Astra does not currently expose an editable queue, per-track popup actions, or playlist creation on Vega.
- Join a Jellyfin SyncPlay group started in any Jellyfin app, or start one from Astra (Settings > Playback > SyncPlay).
- Picking a title in a group opens it for every member; play, pause and seek from any member reach the whole group, and Astra waits while a member is still loading.
- Astra rejoins its group after the app is closed or restarted, for the same server and account, while the group still exists.
- The SyncPlay page follows the account's server-side SyncPlay permission.
- Large Movies, TV Shows, and Music cards use collages of the newest posters from each library.
- Multiple Jellyfin users and servers can be saved and switched from Home.
- Quick Connect, local server discovery, and password sign-in are supported.
- Moving in-app idle visuals protect against burn-in during music playback and paused video.
- Starting video cleanly stops music and transfers playback controls and metadata to the video player.
Astra talks directly to the Jellyfin server you add. Your libraries, artwork, playback and watch progress go only between Astra and that server.
Since 1.6.3, Astra also sends crash reports and usage stats to its developer so crashes and playback problems can be found and fixed. This is on by default and can be turned off in Settings > Send crash reports and usage stats. It covers:
- Crash reports, sent after an unexpected exit: the last 40 actions Astra took, and what was playing at a technical level (formats, resolution, transcoding, buffer).
- One summary per playback: formats, why the server transcoded, how long the picture took, buffering and errors.
- Daily counts of the screens and features used.
- The Fire TV model and OS version, the Astra version, the Jellyfin server version, and a random install ID that changes every month.
Titles, artwork, searches, server addresses or names, usernames, account IDs and access tokens are never sent. Web addresses, IP addresses and email addresses are removed before anything is sent. Reports are kept for up to 12 months, are never sold or shared, and are never used for advertising.
The full policy is at https://watchastra.com/privacy/.
Every release below is tagged in the repository as vMAJOR.MINOR.PATCH and
published with notes on the
Releases page. Customer
facing notes for the same releases are at
https://watchastra.com/releases/.
- Fire TV no longer closes Astra when you leave it during a video or the screensaver comes on.
- Astra now sends crash reports and anonymous playback stats to help fix problems, with a switch to turn them off. See Privacy.
- Astra offers Retry instead of hanging on Loading when its saved settings can't be read.
- Returning to a big library is lighter on memory, and the Fire TV Stick HD always gets video it can decode.
- The sign-in token no longer appears in API request addresses.
- Small player fixes around the sleep timer and the "Couldn't start" screen.
- Converted episodes that stopped a second short of the end now finish, so the next episode, the End-of-episode sleep timer and "Continue watching?" work again.
- Holding Right to the end of a video finishes it instead of showing "Couldn't start this episode".
- Play after the sleep timer runs out resumes with one press.
- Astra now speaks German, Spanish, French, Italian and Portuguese, with a language picker on first run (#40).
- Sleep timer in the player's Menu, a second-choice audio language, audio that can follow your Jellyfin account, and track picks remembered per series.
- Play/Pause on a library card starts it straight away. Music gets a Stop button.
- "Ask if still watching" can be set to 3, 5 or 10 episodes, or never (#46).
- Each Fire TV model gets its own H.264 bitrate limit, and About shows the model and OS version.
- A "No connection" notice with Retry, an earlier stop report when Home is pressed, and a fix for Jellyfin 12.0 servers.
- Fixed the most frequent crashes Amazon reported: leaving playback while video was still loading, very large libraries loading in one response (now 100 items at a time), the system closing Astra in the background on 1 GB sticks (caches are freed), the video surface being released late, and the background image swapping after focus had moved on.
- Added season counts to Next Up cards and episode pages (#28).
- Seeking adds taps up into one jump, speeds up when held, and shows Trickplay scene previews (#31).
- Added Settings > Playback > Subtitle appearance and restored control auto-hide after resuming (#32).
- Added 4, 8, 12 and 20 Mbps bitrate caps, a clearer Dolby Vision Profile 5 error (#26), and a decoder width cap so HD-only sticks are not sent 4K (#21, #25). Stats for Nerds shows the decoder the device reported.
- Fixed home library tiles showing posters from other libraries of the same kind.
- Added SyncPlay: join a group from another Jellyfin app, or host one from Astra and pick something to play for the whole group. Play, pause and seek from any member reach everyone, over a live WebSocket connection to the server.
- Added rejoining after the app is closed or restarted mid-session.
- The SyncPlay page follows the account's
SyncPlayAccesspolicy: join-only accounts are not offered "Start a group", and accounts without SyncPlay see why. - Fixed one play/pause press occasionally reaching the group as a pause followed at once by a play.
- Fixed Astra failing to install on the Fire TV Stick 4K (2026). The store package was built for x86_64, the Vega Virtual Device, instead of armv7; Vega OS 2.0 rejects the mismatch, and on Vega OS 1.x the engagement native module could not load. The submission build now targets armv7 and fails if the package carries another architecture's library.
- Fixed a feature-length film being shut down partway through. The system lifecycle manager reclaimed Astra's media resources and took the foreground roughly an hour into an uninterrupted movie; one title died at 61 minutes, 47% of the way in. The platform detects video playback on its own, but that detection is not durable over a two-hour runtime, so Astra now signals viewer engagement explicitly for as long as a video is open and unfinished. The hold covers pause as well, and is released once a video plays out so a finished end screen no longer keeps the device awake.
- Fixed subtitles forcing the server to re-encode the whole video. Astra asked for every subtitle to be burned into the picture, which also told the server it could not copy the video stream, so a file needing no conversion became a full transcode the moment captions were switched on. Astra draws text subtitles itself again; burn-in is reserved for picture-based and styled ASS/SSA tracks it cannot draw.
- Fixed subtitles in MP4 files (
mov_text) always burning in, and made switching or disabling a subtitle track instant instead of reloading the video. - Fixed streams the server returned in a form Astra could not play, seen with some MKV and AVI files, being asked for again properly instead of failing to start.
- Added per-server capability memory: Astra learns what each server can actually do and stops retrying what it has proved it cannot. First run asks two questions per server, with "I don't know" as a real answer, and playback corrects those answers on its own. Settings gains a page to see and override any of it.
- Added Instant / Reloads markers on every subtitle track, so on a release carrying twenty of them it is visible which ones switch without rebuilding the stream.
- Added a per-build "What's new" list shown once after an update.
- Fixed HDR movies arriving as washed-out SDR. Astra used to ask the server for a tone-mapped SDR stream on every HDR source; it now asks for the HDR variant the device has been shown to accept, and the picture reaching the TV is the picture on the disc.
- Reworked playback around a single cancellable session, so videos that used to stall, stick on a spinner or quit partway through recover on their own. A video that ends early is treated as a failure, not as a finished video.
- Fixed resumed playback reporting the wrong position, and gave every installation its own Jellyfin device identity so two Fire TVs no longer collide in the server's session list.
- Library grids load roughly forty times faster, and backing out of a movie returns to the exact card you opened it from instead of the top of the grid.
- Added opt-in playback telemetry, off by default and inert unless an operator explicitly arms it at build time.
- Added a subtitle preference in Settings > Playback: leave each video's own default, turn subtitles all on, all off, or show only forced tracks. Applies before a video's stream is built, for movies and episodes alike.
- Added Skip Credits, sourced from Jellyfin media segments or a chapter named "Credits", with Ask / Auto-skip / Ignore in Settings > Playback.
- Added Next Episode with an optional autoplay countdown. Movies never auto-advance; unattended autoplay stops after three episodes in a row to confirm you're still watching.
- Fixed playback getting stuck on "Buffering" with nothing decoding when a video with burned-in subtitles resumed, jumped a long distance, or switched tracks partway through.
- Fixed resume from a saved position, audio track switching, and burned-in subtitle selection, all of which exited to Home on Vega OS 1.2. The cause was the platform, not the app: the previously published 1.1.2 package reproduces every failure on an updated device.
- Release builds no longer route logging through the native bridge, which was blocking the JS thread until the Fire TV thread monitor killed the app.
- The HLS resume trim copies the untouched playlist suffix instead of rebuilding it character by character, cutting 5 seconds of synchronous work per load. Stream load fell from about 8 seconds to 2.8, a five-minute seek from roughly a minute to seconds, and short D-pad skips are close to instant.
- Moved to Vega SDK 0.24, declared Vega OS 1.2 in the manifest, and updated the Amazon device libraries. React Native remains 0.72.
- Added an optional "Stats for Nerds with logs" view showing playback timings, off by default.
- Playback settings offer optional four-, three-, and two-second Jellyfin HLS segments for intermittent MP4/MOV stutter. Auto remains the default.
- Stats for Nerds shows HLS segment settings, app/build identity, and playback waiting, stalled, and error counters, plus discontinuous buffered ranges.
- HEVC uses HLS/MPEG-TS segments to avoid fMP4 open-GOP timestamp collisions; when the device reports AC3 support, this route also requests AC3 audio to isolate Vega's accumulating AAC/TS drift. H.264/fMP4 retains its established container and audio policy.
- Fixed keyboard teardown races when leaving Search or Setup.
- Serialized Shaka MSE buffer operations with seeks and teardown.
- Added defensive timer snapshots and native-reference cleanup on Player and Library unmount.
- Added Jellyfin artist, album, genre, and playlist browsing.
- Added background music playback, seeking, remote controls, automatic track advancement, and a simplified Now Playing screen.
- Added plain-HTTP music compatibility using HLS without requiring users to configure TLS or a reverse proxy.
- Added moving burn-in protection for audio and paused video.
- Added unwatched series badges and large server-artwork collage cards.
- Fixed duplicate Vega remote events, Play/Pause double delivery, stale music metadata when starting video, and auto-capitalized server URL failures.
- Added quick profile switching and multiple users per server.
- Grouped saved accounts by server in Settings.
- Fixed library loading for non-admin Jellyfin users by replacing the admin-only media-folders request with per-user views.
- Added current Jellyfin authorization headers for newer server releases.
- Added Jellyfin Quick Connect, guided setup, and local server discovery.
- Added detailed playback diagnostics and runtime audio-capability probing.
- Added in-app SRT/WebVTT rendering and server burn-in negotiation for unsupported subtitle formats.
- Fixed audio/subtitle track switching, DTS-HD fallback, unnecessary 4K bitrate reduction, and several stream diagnostic errors.
- Added the Astra Source-Available License and third-party notices.
- Corrected About-page release information, project links, and support links.
- Finalized the first Amazon update package metadata.
- Added Jellyfin server connection, saved profiles, movie and television browsing, search, detail pages, resume playback, watch-progress reporting, and Vega media playback with Jellyfin transcoding fallback.
- Established the remote-first Fire TV interface and Amazon submission assets.
The detailed engineering changelog is in CHANGELOG.md, whose
topmost section always covers the current version. Every release above is
tagged in the repository as vMAJOR.MINOR.PATCH.
- Setup, settings, and troubleshooting: https://watchastra.com/help/
- Report a problem or request a feature: open an issue
A playback report is far easier to act on with the following, and most reports that get fixed quickly include them:
- The Astra version and build number, from Settings > About.
- The Jellyfin server version, and whether it transcodes on a graphics card.
- The container, video codec, audio codec, and resolution of the file.
- Whether the same file plays on another Jellyfin client, and on the same network or over the internet.
- Anything the Jellyfin server log says about the failed session.
Astra has no crash reporting that phones home, so a report is the only way a problem on your hardware becomes visible.
Install the Vega SDK, then run:
npm install
npm run build:debugRun the automated checks with:
npm run lint
npx tsc --noEmit
npm test -- --runInBandBuild the store package with:
PATH=/path/to/vega/bin:$PATH npm run build:submissionFire TV sticks are armv7, so that is the package to install on a device and
the one to upload to the Appstore: build/armv7-release/astra_armv7.vpkg.
npm run build:vvd builds the x86_64 package for the Vega Virtual Device
only. A stick on Vega OS 2.0 refuses the x86_64 package, and on Vega OS 1.x it
installs but Astra's native modules cannot load.
Install a VPKG on a Vega device with:
vega device install-app \
--device <deviceId> --packagePath <packageFile>
vega device launch-app \
--device <deviceId> --appName com.astra.tv.mainNever use vega run-app for an upgrade: it uninstalls the existing package and
deletes app data before installing. Build 1.2.1 passed physical acceptance and
its Amazon upload package is prepared.
- Changelog
- Astra 1.2.1 release notes
- Astra 1.2.0 release notes
- Astra 1.1.2 release notes
- Astra 1.1.1 release notes
- Astra 1.1.0 release notes
- Astra 1.0.2 release notes
Reusable engineering references:
- Implementation status and playback findings
- Vega audio and music playback
- Music playback research
- Crash and ANR analysis
- Emby compatibility analysis
- Deferred engineering work
- Jellyfin Android TV reference inventory
Reference repositories are kept outside this project, on the development machine only. They are for study and are not incorporated into this codebase.
Astra is developed by AmbientFlare. Code from outside contributors ships in Astra, and every one of them is thanked by name, with their pull requests and commits, in CONTRIBUTORS.md:
- @gerritsa: faster seeking with Trickplay previews, and subtitle appearance (1.5.1)
- @toomanybyt3s: decoder width ceiling for HD-only devices (1.5.1)
- @brontodev: Skip Credits and Next Episode (1.2.1)
Thanks also to everyone who reported problems and tested builds on their own hardware; the detailed reports are credited there too.
Astra is source-available under the Astra Source-Available License (Reference-Only) v1.0. See LICENSE.md and NOTICES.md.