> ## Documentation Index
> Fetch the complete documentation index at: https://globaliptv.misidev.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manifest

> Reference for every field in the Roku manifest file for GlobalTV.

The `manifest` file is a plain-text key-value file at the root of the project. Roku reads it at install and launch time to determine the channel identity, icons, splash screen, supported resolutions, and build flags. Every field shown here is required for Channel Store submission.

## Complete manifest

```text manifest theme={null}
title=GlobalTV
major_version=1
minor_version=0
build_version=7

mm_icon_focus_hd=pkg:/images/logo-hd.png
mm_icon_focus_fhd=pkg:/images/logo-fhd.png

splash_screen_fhd=pkg:/images/splash_fhd.png
splash_screen_hd=pkg:/images/splash_hd.png
splash_screen_sd=pkg:/images/splash_sd.png
splash_color=#1a1a2e
splash_min_time=1500

ui_resolutions=fhd,hd
rsg_version=1.3

supports_input_launch=1
splash_rsg_optimization=1

bs_const=IS_DEV_BUILD=false
```

## Identity & versioning

| Field           | Value      | Description                                                    |
| --------------- | ---------- | -------------------------------------------------------------- |
| `title`         | `GlobalTV` | Display name shown in the Roku Channel Store and home screen.  |
| `major_version` | `1`        | Major version number. Part of the full version string `1.0.7`. |
| `minor_version` | `0`        | Minor version number.                                          |
| `build_version` | `7`        | Build number. Incremented on every Channel Store submission.   |

The full channel version is composed as `major_version.minor_version.build_version`, which gives `1.0.7` for the current manifest.

<Warning>
  `build_version` must be incremented before each Channel Store submission. Roku rejects packages with a build version that is less than or equal to the previously submitted version.
</Warning>

### Keeping APP\_VERSION in sync

`AppConstants.brs` defines `APP_VERSION` independently from the manifest:

```brightscript source/AppConstants.brs theme={null}
APP_VERSION : "1.0.7",
```

This string is used at runtime (for example, sent in HTTP headers and ad handshake payloads) and must always match the `major_version.minor_version.build_version` in the manifest. Update both files together on every release.

<Note>
  There is no automatic enforcement that `APP_VERSION` and the manifest version stay in sync — they are separate files. The `Makefile` also carries its own `APP_VERSION = 1.0.6` variable used only for naming build artifacts. Keeping all three aligned is a manual step.
</Note>

## Icons

| Field               | Value                      | Description                                                                |
| ------------------- | -------------------------- | -------------------------------------------------------------------------- |
| `mm_icon_focus_hd`  | `pkg:/images/logo-hd.png`  | Channel icon at HD resolution (336×210 px). Shown in the home screen grid. |
| `mm_icon_focus_fhd` | `pkg:/images/logo-fhd.png` | Channel icon at FHD resolution (540×405 px). Shown on 1080p displays.      |

Both icons are required for Channel Store submission. Roku scales down the FHD icon for HD displays when both are provided. Images must be PNG files referenced using the `pkg:/` URI scheme, which maps to the root of the installed channel package.

## Splash screen

| Field                     | Value                        | Description                                                         |
| ------------------------- | ---------------------------- | ------------------------------------------------------------------- |
| `splash_screen_fhd`       | `pkg:/images/splash_fhd.png` | Splash image for FHD (1920×1080 px).                                |
| `splash_screen_hd`        | `pkg:/images/splash_hd.png`  | Splash image for HD (1280×720 px).                                  |
| `splash_screen_sd`        | `pkg:/images/splash_sd.png`  | Splash image for SD (720×480 px).                                   |
| `splash_color`            | `#1a1a2e`                    | Background fill color displayed before the image loads.             |
| `splash_min_time`         | `1500`                       | Minimum time in milliseconds the splash screen is shown.            |
| `splash_rsg_optimization` | `1`                          | Enables RSG optimized splash loading, reducing time to first frame. |

The `splash_color` value `#1a1a2e` matches `COLOR_BG_CARD` (`0x1A1A2EFF`) defined in `AppConstants.brs`, giving a seamless transition between the splash and the first rendered UI frame.

`splash_min_time=1500` matches `SPLASH_MS : 1500` in `AppConstants.brs`, so the in-app splash delay (if any) is consistent with the OS-level minimum.

## Resolution & RSG

| Field            | Value    | Description                                                           |
| ---------------- | -------- | --------------------------------------------------------------------- |
| `ui_resolutions` | `fhd,hd` | Comma-separated list of UI resolutions the channel supports.          |
| `rsg_version`    | `1.3`    | SceneGraph API version. `1.3` is the minimum required by Roku OS 11+. |

`ui_resolutions=fhd,hd` tells Roku the channel handles both 1920×1080 and 1280×720 layouts. Roku selects the appropriate resolution based on the connected display. The design coordinate system used throughout the codebase is 1920×1080 and is scaled down at runtime for 720p devices via `GTV_GetDesignSize()`.

## Deep link support

| Field                     | Value | Description                                                          |
| ------------------------- | ----- | -------------------------------------------------------------------- |
| `supports_input_launch=1` | `1`   | Declares that the channel handles `roInput` events for deep linking. |

Setting `supports_input_launch=1` is required for the channel to receive `roInput` events while running. The main entry point in `source/main.brs` listens for `roInputEvent` messages and routes them through `inputDeepLink`. This field is validated by `make check` and is a hard requirement for Roku certification checklist item 8.1.

## Build flags

| Field      | Value                | Description                                                                                      |
| ---------- | -------------------- | ------------------------------------------------------------------------------------------------ |
| `bs_const` | `IS_DEV_BUILD=false` | Compile-time boolean constant. Set to `true` during local development to enable verbose logging. |

`bs_const` defines compile-time constants evaluated by the BrightScript preprocessor. When `IS_DEV_BUILD=false`, any code guarded by `#if IS_DEV_BUILD` is stripped from the compiled output and never executes on the device.

<Note>
  `GTV_Log()` in `source/utils/Logger.brs` is only active when `IS_DEV_BUILD=true`. `GTV_Warn()` and `GTV_Error()` print unconditionally regardless of this flag. To enable verbose debug output during development, change the manifest to `bs_const=IS_DEV_BUILD=true` before sideloading — and revert it before submitting to the Channel Store.
</Note>
