Vega SDK Release Notes
Rate your experience with the Vega SDK
Vega SDK version 0.22
We’re excited to bring you the 0.22 release, which introduces an MCP server and prompt library for AI-assisted performance diagnostics, and platform improvements for media resource management. Media playback and streaming, UI rendering, and performance are updated with 60 bug fixes. Also, “Project Kepler” is now officially Vega!
- Manage SDK versions for your projects through the command-line.
- Vega MCP server and prompt library for performance.
- New micro-KPIs break down app launch metrics.
- Debug crashes faster with one-click symbolication.
Announcements
Kepler is now Vega
The Kepler codename has changed to Vega across all platforms. Support for the kepler alias will be discontinued in v0.23.
Action required: Update any scripts and workflows to use vega commands instead of kepler commands before upgrading to v0.23.
Vega SDK Manager
The new SDK Manager makes it easier to update and maintain Vega SDK versions. As a result, we are deprecating the use of the KEPLER_SDK_PATH path, and the SDK Manager will help with this environment variable transition. For backwards compatibility, the Vega SDK Manager creates a kepler alias in this release.
Action required: Invoke all SDK tooling using vega from the binary path of your main installation directory, instead of relying on the environment variable. Backwards support is provided in this release, but will be discontinued in v0.23.
New features
Easier version upgrades with SDK Manager
The Vega SDK Manager manages SDK versions for your projects through the command-line with capabilities similar to nvm for Node.js or pyenv for Python. You can now manage multiple SDK versions and make project-specific configurations, and integrate with CI/CD pipelines. For more information, see Vega SDK Manager.
Streamline performance and crash diagnostics
MCP Server for Vega-specific context
The new Model Context Protocol (MCP) server brings Vega context to your AI coding assistant with curated prompts for diagnosing performance issues: Time to First Frame and Time to Fully Drawn. For more information, see Set Up Vega DevTools MCP Server.
Performance analysis
Developers can now measure micro-KPIs that break down Time to First Video Frame (TTFVF) into "press of play to player initiation" and "player initiation to first frame," helping developers optimize their media player implementations. AI-powered performance diagnostics help developers identify and resolve performance issues with natural language prompts. For more information, see Measure App KPIs.
One-click crash debugging
Vega Studio now automatically displays an aggregated crash report (ACR) summary. The report contains the symbolicated stack trace and key debugging information from the ACR file. For more information, see Debug App Crash Using Vega Studio.
Device logging in Vega Studio
Better device logging includes log access through Device Files view, source-level log filtering, and more concise log formats. Automatic device detection was improved by mapping the Vega Virtual Device to Simulator in trackDevices and updating simulator node to loading on click.
Reconnecting with Chrome DevTools
Chrome DevTools now automatically reconnects to Vega apps after they are relaunched, enabling seamless reconnection within 3 seconds without manual intervention or configuration. The Vega TV app simplifies debugging so developers can configure and debug within 5-10 minutes.
Improved memory leak detection
We've improved the memory leak detection documentation for Vega apps with new steps to prevent Application Not Responding (ANR) crashes during debugging and trigger garbage collection for accurate memory analysis. For more information, see Detect Memory Leaks.
Improvements
Developer mode detection enabled
Developer mode is now enabled by default in the Vega Virtual Device, streamlining the development workflow.
The CLI and Vega Studio now detect when developer mode is inactive on devices, providing clear error messages and guidance instead of generic failures. Developer mode support for input injection through inputd-cli enables quick automation testing without Appium, and the Developer Mode received UI improvements including alert dialogs.
Ensure fluid apps with micro-KPIs
New performance KPIs further define how fluidity is measured, ensuring apps that pass certification accurately reflect the user-perceived fluidity of being responsive and smooth. This update includes Input Key Latency for playback scenarios, which detects and fixes issues such as sluggish behavior on start/stop. The Activity Monitor performance algorithm now allows trace files to avoid timeout by running in parallel, and displays a progress indicator with clear error messaging if failures occur.
For more information, see the Developer Forum: Vega App Performance Series
- Part 1 - Understanding Fluidity and Responsiveness Metrics.
- Part 2 - Investigate Performance Issues.
- Part 3 - Optimizing for Fluidity and Responsiveness.
Build and CI/CD infrastructure
UI automation includes Appium and image comparison libraries for in-system testing.
Media and audio
Prevent playback failures with resource management
Media resource management now addresses memory for resource-constrained devices. The media server provides video session information to lifecycle management, so background apps can clean up media resources. This prevents playback failures when switching between apps that require secure video decoders.
React Native for Vega and third-party libraries
React Native core component support
TextInputnow includes essential props such asautoFocus,multiline,selection, andonChangeText.- The
Textcomponent addedaria-label,selectable, andadjustsFontSizeToFit. ScrollViewadded highly-requested features likemaintainVisibleContentPosition, scroll indicators, andcontentOffset.- The
Imagecomponent addedprogressiveRenderingEnabled, andresizeMethodfor better rendering control.
React Native APIs and libraries
- Apps can request access to sensitive features like camera and Bluetooth with user consent.
- The
ToastKeplerAPI added native toast notifications. - Turbo modules now replace slow URL polyfills, significantly improving performance for
URLandURLSearchParamsoperations. - With the new Vega System Info API, developers can run queries about system uptime, OS details, build information, and hardware characteristics. For more information, see @amazon-devices/kepler-system-info.
Resolved issues
Media playback and streaming
- Fixed issues affecting video start times: Can't start playback when
startTimeis set and Mp3 doesn't start playing until fully downloaded. - Fixed issue regarding progressive audio playback for large files: Player freezes on content 10~ seconds into stream.
- Fixed caption rendering issue during pause: Closed Captions disappear when pausing video.
- Fixed network throttling behavior to properly synchronize audio and video streams during bandwidth limitations: Audio doesn't stop when video stops during network throttling and video plays in fast forward when throttling is removed.
- Improved HLS AES-128 handling during ad transitions.
- Improved DASH DRM multi-period manifest parsing: Closed captions not showing with DASH DRM livestreams and app crash on release with DASH DRM multi-period.
- Improved subtitle timing synchronization: Subtitle timing drift after 30 seconds of playback.
- Improved audio processing for encrypted HLS streams: Poor audio quality with AES-encrypted HLS content and app crashes when playing live TV with
nativeParseFromString.
Application framework and performance
- Fixed Fetch API handling disparities affecting content playback: Player freezes on content 10~ seconds into stream.
- Fixed focus loss during navigation when using React Navigation libraries: Loss of focus during app navigation.
- Fixed animation rendering with
MaskViewcomponents:Reanimatedanimation not applied when usingMaskView. - Improved
TextInputdisplay for number-pad inputs: Extra dot shown on number-padTextInput. - Improved scroll performance by optimizing React-Navigation/Drawer re-rendering behavior: React-Navigation/Drawer causes unnecessary heavy re-render.
- Improved Sentry symbol mapping support for better debugging.
- Relaxed the ANR timeout in Dev Mode: Splash screen dismissed immediately in debug builds.
User interface (UI) and rendering
- Fixed Lottie animation cleanup issues to prevent memory leaks: Looping Lottie animation leaves garbage after unmounting.
- Fixed video layer compositing issues affecting ad playback by correcting compositor handling with proper v-sync delay management: Main video flashes through videos playing in webview and Opacity issues when using animations in modals.
- Fixed text rendering on simulator with improved shader code execution on Mac OS: Text may disappear and reappear on different renders.
- Improved thumbnail image quality when using Fast Image component: Thumbnail image quality reduced when using Fast Image.
- Improved Charles proxy by adding traffic visibility for image requests: Cannot see images traffic in Charles proxy.
Platform services
- Fixed race condition occurring when components are rapidly started, stopped, and restarted within the same process to improve deep linking reliability for Content Launcher: Content Launcher DeepLink not working and Content Launcher - Login status is not reflected.
- Fixed Account Login Integration Guide with corrected implementation details: Correct Account Login Integration Guide.
- Improved Login with Amazon response structure consistency: Strange structure on responses from
identity-lwa-lib. - Clarified manifest validation requirements regarding module ID case sensitivity to prevent build failures: Manifest validation failed because of offer module.
Developer tools
- Fixed screenshot functionality to provide correct image formatting: Screenshot - incorrect format, black screen.
- Improved device registration flow for developers using two-factor authentication with updated documentation guidance: Virtual Device registration fails with 2FA.
- Clarified app launch commands and deprecation notices for improved developer experience: Launch app -
vlcmvsvmsgrandError: Command failed: vda -s emulator-5554 andFailed to install .vpkg on device Simulator.
Known Issues
MediaSourceobjects do not fire thesourcecloseevent when they are detached fromVideoPlayerobjects, causing the player to freeze when waiting for the event.- No known workaround.
- Subtitles are not shown when taken from Dash.js player on Amazon port dash.js using Amazon Reference. Resolution includes updates to dash.js player.
- Workaround: ShakaPlayer port takes vtt file and can show closed caption.
- Performing multiple Forward Seek operations without waiting for a response causes a deadlock condition. When fast forward is pressed as quickly as possible for about 2-3 minutes, the
seekwithRateAPI takes too long to execute and leads to an ANR.- No known workaround.
- "Error: Cannot create URL for blob!" when the same video is replayed. Root cause is
react-native-url-polyfillcannot be used currently since it does not supportcreateObjectURL.- No known workaround.
- For regions like Republic Dominicana, the API response for a single day takes 10–15 seconds due to large data volume. Showing that it’s continually loading during this time is a poor UX.
- No known workarounds.
- SVG images with display: 'none' are displayed. Not supported by RN72.
- Workaround: Remove components when they don't need to be displayed.
- Focusable trait is not being seen in
ucc. Should be in same hierarchy or linked in some way to be retrieved by Appium selectors.- No known workaround.
- Splash screens loaded with 100 images takes 5-6 sections to load. This issue resolves the performance degradation for splash screens that include a high number of image files.
- Workaround is to use fewer than 8 images for the splash screen.
- When
LazilyComponentis created withlazy(), it's wrappingTargetComponent, but the lazy component itself doesn't have the styling. Root cause is that thelazy()function creates a new component that suspends, and when it resolves, it's not properly preserving the original component's styling.The issue is thatLazilyComponentis a lazy-wrapped version ofTargetComponent, but the lazy wrapper might not be preserving the styling correctly. While this functions on Android, it requires a workaround with React Native for Vega.- Workaround: duplicating styles in lazy loaded component resolves the styling issue but requires style duplication for each lazy loaded component.
- Metadata events are intended to emerge at the PTS of a given ID3 Emsg, such that ID3 Emsg events may be ignored and only metadata need be listened to. However, due to a flaw in Shaka versions prior to 4.14.1, these emerge with incorrect times (using the start time of the segment within with the metadata was found, rather than the actual PTS of the metadata). Additionally, on attempting to manually add metadata cues to the metadata TextTrack (obtained from
video.textTracks, wherekind=metadata), an exception is thrown intermittently.- Workaround: Don’t use ID3. This is not ideal and can sometimes send incorrect beacons.
- When navigating, the previously focused element is read out again, followed by the new one. Root Cause: When a web page loads without any explicitly focused elements, the
rootWebAreareceives focus by default. In this scenario, a subsequent focus transfer to any component (like a button or input field) creates an unexpected dual-focus state - both therootWebAreaand the newly focused component remain focused simultaneously. This bug will also affectVoiceViewexperience. If therootWebAreaelement doesn't defocus,VoiceViewwill speak the whole content of the web page even though the focus is on a button.- Workaround: Don’t use temporary augmentations to nodes in order to read section titles.
- Playback doesn’t start automatically when
mediaElement.autoplayis set to true.- Workaround: If
mediaElement.autoplayistrue, then callmediaElement.play()to start playback.
- Workaround: If
- End user may observe an infinite red spinner 3 seconds after video playback. The low level Webplay (MSE/EME) stops playback with "pipeline error decode." Issue happens only when the same decoder is first configured for SDR and then during playback gets a request to be reconfigured for HDR.
- Workaround: Do not change profile from SDR -> HDR at runtime.
- For the working video, pipeline is buffering both audio and video whereas for non-working video, pipeline buffers video but not audio and mp4 playing doesn't work with some content because of issues with the video's metadata. In the case of the non-working video, the audio queue never reaches 100% while video queue does.
- Workaround: Correct metadata for non-working video and set start time to 0.
- When using Shaka Player,
originalVideoIdis missing from Shaka’svariantTrackon some HLS streams. This has been updated as part of the external Shaka 4.13.2 release whereas the Vega fork of Shaka Player is running 4.8.5.- Workaround: Recommend apps maintain a local patch until update is released.
- When switching between the audio tracks, apps observe a video pause/stutter during the transition. It seems that Vega is not honoring flushing a
MediaSourcebuffer.- No known workaround.
- FlatList with
numColumnsrecalculates the entire grid layout when new data is added throughonEndReached, resulting in component unmounting and remounting, which consequently causes focus loss.- Workaround: To address this issue, implement a solution utilizing two nested FlatLists as an alternative to the
numColumnsapproach. In this architecture, the outer FlatList is responsible for managing vertical scrolling and pagination, while the inner FlatList handles the horizontal row layout. When new data is appended, the existing rows maintain identical references, allowing existing row components to be preserved and focus to be retained within the currently focused row.
- Workaround: To address this issue, implement a solution utilizing two nested FlatLists as an alternative to the
- When implementing Headless JS Playback in combination with Shaka Player, logs may show
ERROR Required Lookup Map not populated!Root cause: compatibility checks don't seem to work in headless services and/or they are not creating the map appropriately.- Workaround: Playback does work fine with the error.
- Focus not restored to prev screen with "Transparent Modals" when app uses separate navigation screens, each containing their own modal. Root cause analysis reveals that
navigation.goBack()correctly navigates fromExitScreenback toLeftNavScreen, but focus is being restored to the underlyingLeftNavScreencomponent instead of its transparent modal window that should be in the foreground.- Workaround: Use Native Stack Navigator with detach inactive screens false.
- Multiple buttons on the screen show the focused state when navigating quickly after transitioning to a new screen. JS code is properly blurring and focusing the correct components and the style updates are set correctly, but the native PMI mutation to re-draw the component never happens.
- Workaround: When commenting out their
enableFreeze()call, the bug no longer occurs.
- Workaround: When commenting out their
getLocales()returns locales alphabetically instead of user preference order.- Workaround: You can try using JavaScript’s
IntlAPI to detect and correct the locale ordering.
- Workaround: You can try using JavaScript’s
Last updated: Jan 05, 2026

