Static Analysis Tool

Analyze your app's source code and detect issues before certification

Apps must pass Static Analysis with no Errors before they can be published to the Streaming Store.

Overview

The app publishing flow includes a Static Analysis Tool used to analyze the app's BrightScript source code and detect common issues without having to submit for certification. This arms developers with the information they need to optimize their apps and ensure the app passes certification quickly. These common issues include, but are not limited to, simple app runtime issues, such as crashes on launch, and media playback errors (automated testing).

Developer Dashboard

The Static Analysis Tool is available from the Developer Dashboard.

  1. From the Developer Dashboard > Manage My Apps tool, upload a package file.

  2. Select Static Analysis from the drop-down menu. This option is only available after a package file has been uploaded.

    roku815px - static-analysis-dropdown

  3. Click Analyze to begin the Static Analysis testing of your app. Click Refresh to check whether the Static Analysis test results are ready and display them.

    roku815px - static-analysis-analyze-button

  4. The Static Analysis Results table lists error, warning, and info messages returned by the test. For each message, the following information is provided:

    roku815px - static-analysis-test-results

ColumnDescription
MessageA description of the issue related to the app.
SeverityThe type of message: error, warning, or info.

  • Error. Errors block the app from passing certification. All errors must be resolved to pass static analysis testing and schedule the app for publishing.

  • Warning. Warnings do not currently block the app from passing certification; however, they should be resolved to ensure the app can pass static analysis testing in the future. In addition, resolving warnings helps optimize app performance.

  • Info. Info messages provide tips that may be helpful in the development of the app.
CategoryThe type of issue (for example, package, performance, billing, manifest, and so on).
Certification RequirementProvides a link to any related certification requirements in the Certification Criteria document.

You can filter the test results based on the Severity or Category.

  1. Alternatively, you can wait to receive the test results via an email notification. The test results are sent to the email address associated with the developer account. This email contains a link to the Static Analysis test results for the app (you can also download the test results as a plain text JSON file).

Static Analysis test details

Following are the tests that Static Analysis performs on the package file. More tests will be added on a monthly basis.

Tests are grouped by category. Each test reports its severity, a message, the related certification requirement, and the date the message in its current form was added to the Static Analysis tool.

Analytics

SeverityMessageCertification requirementDate added
ErrorRED constructor call is present but manifest entry is missing.4.3, RP 4.4Jan 24, 2022
ErrorRED constructor call is present but library import is missing.4.3, RP 4.4Jan 24, 2022
ErrorRoku Analytics Library usage found in BrightScript code but manifest entry 'sg_component_libs_required=Roku_Analytics' not found.4.3, RP 4.4Feb 27, 2020
WarningLibrary "roku_analytics" is present in "sg_component_libs_required" manifest attribute but not used2.1, 4.3Nov 27, 2018
Warning"Roku_Authenticated" event must be dispatched using "trackEvent" field of roku analytics node. Use https://sdkdocs.roku.com/display/sdkdoc/Prioritizing+authenticated+channels+in+Roku+Search for reference.4.3, RP 4.4Nov 21, 2018
WarningRED must be activated as a provider using "init" field of roku analytics node. Use https://sdkdocs.roku.com/display/sdkdoc/Prioritizing+authenticated+channels+in+Roku+Search for reference.4.3, RP 4.4Nov 21, 2018
Warning"Roku_Authenticated" event must be dispatched using DispatchEvent() method of roku event dispatcher interface which is returned by Roku_Event_Dispatcher() function. Use https://sdkdocs.roku.com/display/sdkdoc/Prioritizing+authenticated+channels+in+Roku+Search for reference.4.3, RP 4.4Nov 21, 2018
WarningRED library import is present but constructor call is missing4.3, RP 4.4Nov 27, 2018
WarningRED library import is present but manifest entry is missing4.3, RP 4.4Nov 27, 2018
WarningThe channel could implement RED or RAF "fireRokuMarketingPixel()" for "Roku_Authenticated"4.3Jul 10, 2024
InfoRED is integrated properly4.3, RP 4.4Nov 21, 2018

Authentication

SeverityMessageCertification requirementDate added
ErrorProper Automatic Account Link implementation requires verifying user sign-in status using "json.channel_data" from ChannelStore "getChannelCred". This step is missing. Please use "channelCred" field of "ChannelStore" node or in case of using "roChannelStore" component, handle "roChannelStoreEvent".4.2Nov 13, 2024
ErrorChannelStore "getChannelCred" required for Automatic Account Link is missing4.2Nov 4, 2024
ErrorChannelStore "storeChannelCredData" required for Automatic Account Link is missing. For "ChannelStore" node, "channelCredData" field must be set with user account access token.4.2Nov 4, 2024
ErrorTo enable Automatic Account Link, On-Device Authentication needs to be correctly implemented. Please review the On-Device Authentication Warnings in the Static Analysis report for more details.4.2Nov 13, 2024
ErrorWe have found a proper integration of an On-Device Authentication in your channel code, but you have not selected Customer Account Requirement in channel submission properties via Developer Portal.2.2Oct 13, 2023
ErrorVoice keyboards are required for entering email addresses, PIN codes and passwords.4.12Sep 9, 2022
ErrorAll authenticated channels must use the Request for Information (getUserData) API call to obtain a user's email address during the sign-up or sign-in flow.RP 2.1, RP 4.1Jan 24, 2022
WarningWe have found that you have selected Customer Account Requirement in channel submission properties via Developer Portal but have not enrolled in Roku Partner Payouts Program via Developer Portal.2.2May 30, 2023
WarningWe have found a proper integration of an On-Device Authentication in your channel code, but you have not enrolled in Roku Partner Payouts Program via Developer Portal.2.2Oct 13, 2023
WarningUser account access token is not saved using "roRegistrySection" which is required for On-Device Authentication2.2Nov 4, 2024
WarningChannelStore "getUserData" required for On-Device Authentication is missing2.2Nov 4, 2024
WarningWe have found a proper integration of an Automatic Account Link in your channel code, but you have not selected Customer Account Requirement in channel submission properties via Developer Portal.4.2May 6, 2023
InfoAutomatic Account Link usage is found4.2Apr 16, 2019

Billing

SeverityMessageCertification requirementDate added
ErrorChannels with subscriptions must implement Roku's Enhanced Subscription Recovery feature to pass certification. ChannelStore "doRecovery" is missing.RP 4.5Nov 13, 2024
ErrorChannels with subscriptions must implement Roku's Enhanced Subscription Recovery feature to pass certification. Enhanced Subscription Recovery was not specified on the Subscription Recovery page.RP 4.5Nov 13, 2024
ErrorAccording to the Monetization channel properties page, your channel is offering in-channel purchases, but no Roku Pay API usage was found in your channel.2.1Jan 24, 2022
ErrorChannels with subscriptions must implement Roku's Enhanced Subscription Recovery feature to pass certification. ChannelStore "getAllPurchases" is missing.RP 4.5Nov 13, 2024
WarningEnhanced Subscription Recovery setting is enabled in your Subscription Recovery page, but ChannelStore "getAllPurchases" is missing in your channel codeRP 4.5Feb 25, 2025
WarningChannels with subscriptions must implement Roku's Enhanced Subscription Recovery feature to pass certification. ChannelStore "getAllPurchases" is missing.RP 4.5Nov 13, 2024
WarningEnhanced Subscription Recovery was found in BrightScript code but was not specified on the Subscription Recovery pageRP 4.5Oct 25, 2024
WarningEnhanced Subscription Recovery setting is enabled in your Subscription Recovery page, but ChannelStore "doRecovery" is missing in your channel codeRP 4.5Feb 25, 2025
WarningChannelStore "doRecovery" is found but "getAllPurchases" is missingRP 4.5Oct 25, 2024
WarningChannels with multiple subscription products must organize the products appropriately in groups to support upgrade / downgrade functionality.RP 4.2, RP 4.4Jan 18, 2021
WarningStarting after September 30, 2020, authenticated transactional channels (SVOD, TVOD, and other subscription services) must support on-device upgrades and downgrades to pass certification.RP 4.2, RP 4.4May 6, 2020
WarningBilling usage was found in BrightScript code but was not specified on the Monetization channel properties page.2.1Feb 27, 2020
WarningThe channel is using both Roku Pay Catalog 1.0 and 2.02.1Oct 11, 2024
WarningChannelStore "getPurchases" or "getAllPurchases" is found but purchases are not handled. Please use "purchases" field of "ChannelStore" node or in case of using "roChannelStore" component, handle "roChannelStoreEvent".2.2, RP 4.1, RP 4.3Oct 23, 2023
WarningChannelStore "getPurchases" or "getAllPurchases" is found but "doOrder" is missing2.2, RP 4.1, RP 4.3Oct 23, 2023
WarningChannelStore "doOrder" is found but "getPurchases" or "getAllPurchases" is missing2.2, RP 4.1, RP 4.3Oct 23, 2023
WarningChannels with subscriptions must implement Roku's Enhanced Subscription Recovery feature to pass certification. ChannelStore "doRecovery" is missing.RP 4.5Nov 13, 2024
WarningChannels with subscriptions must implement Roku's Enhanced Subscription Recovery feature to pass certification. Enhanced Subscription Recovery was not specified on the Subscription Recovery page.RP 4.5Nov 13, 2024
InfoRoku Pay Catalog 2.0 usage is found2.1Oct 11, 2024
InfoBilling is integrated properly2.1Mar 21, 2019
InfoChannel implements Roku's Enhanced Subscription Recovery featureRP 4.5Oct 25, 2024
InfoChannels with subscriptions must implement Roku's Enhanced Subscription Recovery feature to pass certification. ChannelStore "getAllPurchases" is not handled. "inDunning" flag from entries of "purchases" response field should be checked.RP 4.5Nov 13, 2024
InfoEnhanced Subscription Recovery setting is enabled in your Subscription Recovery page, but ChannelStore "getAllPurchases" is not handled. "inDunning" flag from entries of "purchases" response field should be checked.RP 4.5Feb 25, 2025
InfoChannel supports on-device upgrades and downgrades.RP 4.2, RP 4.4May 6, 2020
InfoChannelStore "doRecovery" is found but "getAllPurchases" is not handled. "inDunning" flag from entries of "purchases" response field should be checked.RP 4.5Feb 24, 2025

Channel Store

SeverityMessageCertification requirementDate added
ErrorDeveloper ID of submitted package does not match the developer ID of the previously published version.4.1Jan 24, 2022
ErrorSubscription services must create product groups in the Developer Dashboard for any set of subscription products that the consumer should not be able to be subscribed to simultaneously.RP 3.1, RP 3.2Oct 16, 2023
WarningDeveloper ID of submitted package does not match the developer ID of the previously published version.4.1Jan 24, 2022

Deep linking

SeverityMessageCertification requirementDate added
ErrorChannels are required to support roInput events. Please ensure your manifest includes the supports_input_launch=1 entry and your channel properly handles roInput events.5.2Jan 24, 2022
InfoDeep linking support appears to be implemented5.1Apr 4, 2019

Deprecated APIs

SeverityMessageCertification requirementDate added
ErrorUsage of the roAppManager.LaunchApp() API is prohibited.2.4, 4.6, 5.3Jan 24, 2022
ErrorUsage of the roAppManager.ShowChannelStoreSpringboard() API is deprecated.2.4Mar 26, 2025

Manifest

SeverityMessageCertification requirementDate added
ErrorAll version-related attributes in manifest have values "0". Version cannot be "0.0.0".6.1Jan 24, 2022
Error"{0}" attribute in manifest has invalid value: "{1}".6.4May 2, 2018
Error"{0}" attribute in manifest has an empty value.6.4Jan 24, 2022
Error"{1}" file used for "{0}" attribute is missing.6.4Jan 24, 2022
ErrorManifest is missing a required attribute: "mm_icon_focus_hd".6.4Jan 24, 2022
WarningChannel version wasn't updated6.1May 3, 2019
Warning"{1}" image used for "{0}" attribute has invalid resolution: "{2}". Valid resolution is "{3}".6.4Oct 29, 2018
WarningManifest is missing a required attribute: "splash_screen_hd".6.4Jan 24, 2022
Info"{0}" image used for "mm_icon_focus_sd" attribute has invalid resolution: "{1}". Valid resolution is "{2}".6.4Jan 26, 2026

Package

SeverityMessageCertification requirementDate added
ErrorPackage size exceeds {0} megabytes. See Memory management for tips on how to optimize channel memory.3.7Jan 24, 2022

Performance

SeverityMessageCertification requirementDate added
Error"AppLaunchComplete" beacon is missing.3.2Jan 24, 2022
WarningFor your channel to pass certification, your application must fire the "AppDialogInitiate" and "AppDialogComplete" beacons if the channel UI displays a login, user selection, EULA, or any other dialog before the home page.3.2Aug 21, 2020

Roku Advertising Framework (RAF)

SeverityMessageCertification requirementDate added
ErrorRAF constructor call is present but library import is missing.1.1Jan 24, 2022
ErrorGeneral Audience Measurements must be enabled for a non-child-directed channel in U.S. Channel Store.RAF 1.3Jan 24, 2022
ErrorMethod StitchedAdsInit() was found but related method StitchedAdHandledEvent() is missing.1.1Jun 1, 2023
ErrorRAF constructor call is present but manifest entry is missing.1.1Jan 24, 2022
WarningMethod StitchedAdHandledEvent() was found but related method required for server side ad insertion StitchedAdsInit() is missing1.1, RAF 1.2Jun 1, 2023
WarningIt appears that your channel may support child directed content with ads. Please ensure that you are calling SetContentGenre() with the kidsContent flag and are using the ROKU_ADS_KIDS_CONTENT macro in your ad requests.ADS 2.2Sep 1, 2020
WarningAds revenue usage was specified during channel publishing, but RAF integration in BrightScript code is missing or incomplete1.1Mar 3, 2026
WarningRAF manifest entry is present but library import is missing.1.1Jan 24, 2022
WarningRAF manifest entry is present but constructor call is missing.1.1Jan 24, 2022
WarningRAF library import is present but constructor call is missing.1.1Jan 24, 2022
WarningMethod RenderStitchedStream() was found but related method ConstructStitchedStream() is missing1.1Jun 1, 2023
WarningRAF usage was found in BrightScript code, but Ads revenue was not specified during channel publishing1.1Mar 3, 2026
WarningChannel not firing RAF beacons. One of StitchedAdsInit(), FireTrackingEvents(), RenderStitchedStream(), ShowAds() methods should be used to fire beacons depending on the way of RAF implementation. Use https://developer.roku.com/docs/developer-program/advertising/ad-watermark.md for reference.RAF 1.2Jun 1, 2023
WarningMethod ConstructStitchedStream() was found but related method RenderStitchedStream() is missing1.1, RAF 1.2Jun 1, 2023
WarningRAF library import is present but manifest entry is missing.1.1Jan 24, 2022
WarningChannel not passing LAT. For client side RAF integrations, channel must pass Roku's ID for Advertisers (RIDA) and "limit ad tracking" (LAT) value on ad server requests. For more details take a look at roDeviceInfo.GetRIDA() and roDeviceInfo.IsRIDADisabled(). These values must be passed using SetAdUrl() method of Roku ad interface which is returned by Roku_Ads() function. Use https://developer.roku.com/develop/channel-store/certification-testing for reference.ADS 2.1Dec 12, 2019
WarningChannel not passing SetAdUrl() method. Channel must pass Roku's ID for Advertisers (RIDA) and "limit ad tracking" (LAT) value on ad server requests. For more details take a look at roDeviceInfo.GetRIDA() and roDeviceInfo.IsRIDADisabled(). These values must be passed using SetAdUrl() method of Roku ad interface which is returned by Roku_Ads() function. Use https://developer.roku.com/develop/channel-store/certification-testing for reference.ADS 2.1May 14, 2019
WarningSetAdUrl() method without URL parameter was found. This allows you to check that ads are served correctly to users of the channel, but no revenue will actually be generated.ADS 2.1Jun 1, 2023
WarningRAF method SetDebugOutput() is enabled1.1Nov 16, 2021
WarningChannel not passing RIDA. For client side RAF integrations, channel must pass Roku's ID for Advertisers (RIDA) and "limit ad tracking" (LAT) value on ad server requests. For more details take a look at roDeviceInfo.GetRIDA() and roDeviceInfo.IsRIDADisabled(). These values must be passed using SetAdUrl() method of Roku ad interface which is returned by Roku_Ads() function. Use https://developer.roku.com/develop/channel-store/certification-testing for reference.ADS 2.1Dec 12, 2019
InfoRAF method SetDebugOutput() is disabled1.1Nov 16, 2021
InfoRAF is integrated properly1.1May 2, 2018
InfoServer Stitched Insertion within a channel is implemented properly1.1May 24, 2019
InfoClient-side ad stitching within a channel is implemented properly1.1Dec 24, 2019
InfoClient-side ad insertion within a channel is implemented properly1.1Oct 12, 2022
InfoRAF constructor is found1.1Nov 15, 2021

Uncategorized

SeverityMessageCertification requirementDate added
ErrorYour channel appears to be using a prohibited authentication method from Amazon.ADS 1.1Jan 24, 2022
ErrorThe use of ECP from within a channel is now prohibited.2.4, 4.6, 5.3Jan 24, 2022
ErrorChannels that have streamed more than an average of 5 million hours per month over the last three months or you have a new channel projected to reach the specified streaming hour threshold shortly after launch, you must participate in Roku's Continue Watching program. See Continue Watching for more detail. TVOD, live linear, and made-for-kids channels are excluded from this requirement.4.13Nov 22, 2023
ErrorYour channel appears to be using a prohibited authentication method from Facebook.ADS 1.1Jan 19, 2021
ErrorYour channel appears to be using a prohibited ad library from Amazon.ADS 1.1Aug 21, 2019
ErrorYour channel appears to be using a prohibited ad library from TruOptik.ADS 1.1Aug 19, 2019
ErrorYour channel appears to be using a prohibited ad library from Facebook.ADS 1.1Aug 14, 2019
ErrorUsage of the UpdateLastKeypressTime() API is no longer permitted.2.4, 4.6, 5.3Dec 8, 2020
ErrorYour channel appears to be using a prohibited authentication method from Google.ADS 1.1Jan 24, 2022
ErrorChannels are prohibited from offering in-channel screensavers or any feature that overrides the Roku system screensaver.4.5Oct 7, 2022
Warning"KeyboardDialog" is not valid for Voice Keyboard entry of email address and PIN codes. Use "StandardKeyboardDialog" instead.4.12Aug 8, 2022

Upcoming enforcement

Static Analysis reports the following checks as warnings and will report them as errors, which block publishing, on the dates shown.

CheckCurrent severityDate addedBecomes an error
The manifest must include the rsg_version=1.3 attribute, and the minimum firmware version must be set to 15.1.0 or greater.WarningFeb 27, 2026October 1, 2026
The app must register for the BrightScript Memory Monitor APIs. See Memory Monitor APIs.Warning—October 1, 2026
The app must implement Instant Resume (certification requirement 4.14). This applies to apps in the U.S. Streaming Store that average more than 5 million streaming hours per month over the last three months.WarningAug 5, 2026October 1, 2026
The app must not use the roHttpAgent.InitClientCertificates() function, which is deprecated.Warning—April 1, 2027

Did this page help you?