Skip to main content
Roku certification is required before a channel can go public in the Channel Store. Run make check to validate the static checks locally. Some requirements can only be verified on real hardware.
make check is a development aid, not a substitute for Roku’s official certification review. Use it to catch issues early, but always test on hardware before submitting.

Running make check

make check
A passing run produces output like this:
>>> [check] Verificando manifest para certificación Roku 2026...

  ✓ OK:    title=
  ✓ OK:    major_version=
  ✓ OK:    minor_version=
  ✓ OK:    build_version=
  ✓ OK:    mm_icon_focus_hd=
  ✓ OK:    mm_icon_focus_fhd=
  ✓ OK:    splash_screen_fhd=
  ✓ OK:    splash_screen_hd=
  ✓ OK:    splash_screen_sd=
  ✓ OK:    ui_resolutions=fhd
  ✓ OK:    rsg_version=1.2
  ✓ OK:    supports_input_launch=1
  ✓ OK:    splash_rsg_optimization=1
  ✓ OK:    splash_color=
  ✓ OK:    splash_min_time=

  → manifest OK — todos los campos de certificación presentes.

>>> [check] Verificando imágenes obligatorias...

  ✓ OK:    images/logo-hd.png
  ✓ OK:    images/logo-fhd.png
  ✓ OK:    images/splash-fhd.png
  ✓ OK:    images/splash-hd.png
  ✓ OK:    images/splash-sd.png
  ✓ OK:    images/globaltv-logo.png

  → Imágenes OK.

>>> [check] Verificando bs_const prohibido...

  ✓ OK: eval() no encontrado.
  ✓ OK: file:// no encontrado.
  ✓ OK: bs_libs_required=v30 no encontrado.

>>> [check] Verificando main.brs — deep link obligatorio...

  ✓ OK: roInput presente en main.brs
  ✓ OK: roInputEvent presente en main.brs
  ✓ OK: deep link handling presente en main.brs

>>> [check] Verificando signalBeacon...

  ✓ OK: signalBeacon(AppLaunchComplete) en MainScreen

>>> [check] Verificando OPTIONS en PlayerScreen...

  ✓ OK: OPTIONS no interceptado en PlayerScreen.

>>> [check] COMPLETO.

What each check validates

Manifest fields

These four fields define the channel identity and version shown in the Channel Store. All must be present and non-empty. build_version must be higher than the previously submitted value — the store rejects duplicate build numbers.Current values in manifest:
title=GlobalTV
major_version=1
minor_version=0
build_version=7
Home-screen icons displayed when the channel tile is focused. Both HD and FHD variants are required. They must use pkg:/ paths.
mm_icon_focus_hd=pkg:/images/logo-hd.png
mm_icon_focus_fhd=pkg:/images/logo-fhd.png
Splash screen images shown while the channel loads. All three resolution variants are required for certification. The check looks for the field names; the actual files are validated separately.
splash_screen_fhd=pkg:/images/splash_fhd.png
splash_screen_hd=pkg:/images/splash_hd.png
splash_screen_sd=pkg:/images/splash_sd.png
Declares that the channel supports full HD (1920×1080). The check script looks for the string ui_resolutions=fhd. The manifest currently declares ui_resolutions=fhd,hd, which satisfies this requirement.
The check script looks for rsg_version=1.2 in the manifest. The manifest currently declares rsg_version=1.3, which is a superset and satisfies the requirement at runtime, but the string check will report a failure because 1.2 is not literally present.To fix: either change the manifest to rsg_version=1.2 (if 1.3 features are not needed) or update the make check script to accept 1.3 as passing.
Enables the channel to be launched via a deep link input event. Required for any channel that handles deep links. When this field is set, roInput and roInputEvent handling in source/main.brs become mandatory.
supports_input_launch=1
Enables the SceneGraph splash screen optimization, which reduces apparent launch time by letting the RSG runtime render the splash before the full scene graph is initialized. Required for 2026 certification.
splash_rsg_optimization=1
splash_color sets the background fill shown behind the splash image (e.g. #1a1a2e). splash_min_time sets the minimum display duration in milliseconds (1500 = 1.5 s). Both fields are required.
splash_color=#1a1a2e
splash_min_time=1500

Image files

The check verifies these files exist on disk:
FileRequired for
images/logo-hd.pngHD home-screen icon (mm_icon_focus_hd)
images/logo-fhd.pngFHD home-screen icon (mm_icon_focus_fhd)
images/splash-fhd.pngFHD splash screen
images/splash-hd.pngHD splash screen
images/splash-sd.pngSD splash screen
images/globaltv-logo.pngIn-app branding asset
The manifest declares splash images with underscores (splash_fhd.png) while the make check image check looks for hyphens (splash-fhd.png). Verify that both the manifest paths and the actual filenames on disk are consistent. If they differ, either rename the files or update the make check script to match.

Code checks

CheckWhy it matters
No eval() calls in source/ or components/eval() is explicitly prohibited by Roku certification and is a security risk
No file:// referencesAll asset paths must use pkg:/file:// references fail at runtime on device
No bs_libs_required=v30 in manifestThe v30 library was removed in Roku OS 11.5; its presence causes channel rejection
These checks verify that source/main.brs implements the deep link contract required when supports_input_launch=1 is declared in the manifest.
CheckCertification rule
roInput present in main.brsChecklist 8.1 — must create roInput object to receive input events
roInputEvent handled in main.brsMust handle roInputEvent from the message loop
launchDeepLink or inputDeepLink in main.brsMust route deep links through named handlers
GlobalTV supports mediaType=live deep links, handled through launchDeepLink and inputDeepLink in source/main.brs and components/MainScene.brs.

Beacon check

Roku measures channel launch time by looking for signalBeacon(AppLaunchComplete). This signal must be fired from components/MainScreen/ after the main content screen is ready for user interaction.
m.top.signalBeacon("AppLaunchComplete")
Without this beacon, Roku’s automated testing cannot measure launch performance, and the channel will not pass certification.

OPTIONS key check

Certification checklist 9.1 requires that the player screen does not intercept the OPTIONS key. The check scans components/PlayerScreen/PlayerScreen.brs for the string options. If found, it emits a warning to verify that any handler returns false (passes the key through rather than consuming it).

Certification status

Checks already passing

These points are implemented in the codebase and verified by make check:
  • Version fields present and non-zero in manifest
  • Splash screen declared in manifest with all three resolution variants
  • supports_input_launch=1 set
  • splash_rsg_optimization=1 set
  • signalBeacon(AppLaunchComplete) fired in MainScreen
  • On-device login flow (no external browser required)
  • roInput and roInputEvent handling in source/main.brs
  • launchDeepLink / inputDeepLink routing present
  • No eval(), no file://, no bs_libs_required=v30

Checks that require hardware testing

These cannot be validated by make check and must be verified manually on a physical device:
RequirementHow to test
Channel launch time ≤ Roku thresholdTime from channel launch to AppLaunchComplete on real hardware
Playback start timeTime from channel selection to first frame of live video
Voice keyboard on password fieldInvoke voice input on the login password field using the Roku remote
Deep linking end-to-endSend a mediaType=live deep link from the Roku home screen and verify the channel opens the correct stream
OPTIONS key pass-through in playerPress OPTIONS during playback and confirm no unintended overlay appears