Skip to main content
A signed .pkg file is required for every Roku Channel Store submission. The signing key is tied to your device’s DevID — you generate it once per device using genkey.
Never commit SIGN_PASSWORD to version control. Treat it the same as a password or API key. Add it to your shell profile or a local .env file that is listed in .gitignore.

Prerequisites

  • Roku device in developer mode (see Sideloading)
  • make, zip, curl, and telnet installed
  • A signing key loaded on the device (generated in step 2 below)

Steps

1

Confirm developer mode is active

The device must be in developer mode before you can generate a signing key or package the channel. If you have not done this yet, follow the Sideloading guide first.
2

Generate a signing key with genkey

Connect to the Roku’s BrightScript console via Telnet:
At the console prompt, run:
The device responds with output similar to:
Save both values immediately. The Password is your SIGN_PASSWORD. The DevID identifies the signing key tied to this device.
Each call to genkey creates a new key and invalidates the previous one. Any .pkg files signed with the old key cannot be re-signed; you would need to submit a new package. Generate the key once and keep the password safe.
3

Increment build_version in the manifest

The Roku Channel Store rejects a package with the same build_version as a previously submitted one. Before packaging for submission, open manifest and increment the value:
Current manifest values:
Increment build_version for every Channel Store submission, even if major_version and minor_version are unchanged. Keep the value in APP_VERSION in the Makefile and APP_VERSION in source/AppConstants.brs aligned with the manifest.
4

Run make pkg

Run the packaging target with all three required variables:
The target:
  1. Builds out/GlobalTV.zip
  2. Sideloads the zip to the device
  3. Requests a signed package via http://<ROKU_IP>/plugin_package
  4. Downloads the .pkg from the device
5

Verify the output file

On success, the signed package is saved to:
The console output confirms the path:
If the .pkg is not produced, the Makefile prints diagnostic steps:
6

Submit to the Roku Channel Store

Log in to the Roku Developer Portal and navigate to Manage Channels. Select your channel and upload out/GlobalTV-1.0.6.pkg in the Package submission section.Run make check before submitting to catch any manifest or asset issues that would cause the submission to be rejected.

Troubleshooting

  • Confirm SIGN_PASSWORD matches the password printed by genkey.
  • Confirm the device has a signing key (you ran genkey at least once on this device).
  • Open http://<ROKU_IP>/plugin_package in a browser while authenticated as rokudev to inspect the raw response.
  • Ensure build_version in manifest is higher than the last submitted value.
  • Run make check and resolve all failures before re-packaging.
Install telnet via Homebrew:
Alternatively, use nc (netcat):