as

Settings
Sign out
Notifications
Alexa
Amazon Appstore
AWS
Documentation
Support
Contact Us
My Cases
Get Started
Design and Develop
Publish
Reference
Support

Vega Channel Integration

Here's what you need to know to integrate Vega Channel into your app for Fire TV. The Vega Channel interface provides modality-agnostic APIs for playing your linear TV content. This can be done using a remote (your Fire TV EPG/Launcher), touch, voice (such as saying to an Alexa enabled device, "Alexa, tune to…."), or casting.

Prerequisites

  • Access to the source code of your app for Fire TV.
  • A Fire TV device that supports this integration. Check with your Amazon contact for a list of device types currently supported.
  • Integration with the Vega Electronic Programming Guide (EPG) Provider.

Integration steps

Step 1: Include the necessary package dependencies in your app

Add the following dependencies in your package.json file.

Copied to clipboard.

  "dependencies": {
    "@amazon-devices/kepler-channel": "^1.1.0",
  }
  • The kepler-channel package contains APIs for the Vega Channel interface for you to implement in your app.

Step 2: Update your manifest file

Update your manifest.toml file to include Vega Channel support. See the following Vega Sample App.

Copied to clipboard.

[components]
## Define your app's interactive component (if it doesn't already exist)
[[components.interactive]]
id = "<packageId>.main"
runtime-module = "/com.amazon.kepler.keplerscript.runtime.loader_2@IKeplerScript_2_0"
launch-type = "singleton"
categories = ["com.amazon.category.main", "com.amazon.category.kepler.media"]

[[extras]]
## `interface.provider` designates a component 
## that provides implementation of certain interfaces
key = "interface.provider"
## Declares the component that provides the implementation of the interfaces.
## This component must be defined under [[components.interactive]] and includes
## "com.amazon.category.kepler.media" in its categories.
component-id="<packageId>.main"

[extras.value.application]
## Declare support for Vega Channel
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]

Details about the 2 categories added for the main interactive component:

  • com.amazon.category.main declares the component as the default interactive component for the application package.
  • com.amazon.category.kepler.media declares the component to be targeted for Vega Media operations.

For more information, see the Manifest [components] Section.

The manifest file declares the support of the com.amazon.kepler.media.IChannelServer interface. The component <packageId>.main defined for "interface.provider" handles all the channel command callbacks. For more information, see steps 3 and 4.

Correct interface definition example

Each interface definition in the manifest must be separate and self-contained. Do not mix attributes from different interfaces. Here is an example of the correct way to define multiple interfaces.

Copied to clipboard.

[extras.value.application]
## IChannelServer Interface
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]

## IContentLauncherServer interface
[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IContentLauncherServer"
attribute_options = ["partner-id"]
[extras.value.application.interface.static_values]
partner-id = "<Your partner id>"

Incorrect interface definition example

And here is an incorrect way to do this. Do not do it this way.

Copied to clipboard.

[extras.value.application]

[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IContentLauncherServer"
attribute_options = ["partner-id"]

[[extras.value.application.interface]]
interface_name = "com.amazon.kepler.media.IChannelServer"
features = ["ChannelList"]

[extras.value.application.interface.static_values]
partner-id = "<Your partner id>"

Step 3: Create the handler object for the Vega Channel interfaces

Create a handler which contains the implementation of the Vega Channel interface:

Copied to clipboard.

import {
  ChannelServerComponent2,
  ChangeChannelStatus,
  IChannelHandler,
  IChangeChannelResponse,
  OperationError,
} from '@amazon-devices/kepler-channel';

/**
 * The handler that implements the Vega Channel interface
 */
const channelTunerHandler: IChannelHandler = {
  async handleChangeChannel(
    channelIdentifier: string,
  ): Promise<IChangeChannelResponse> {

    /**
     * The value of ${channelIdentifier} here will contain data from the
     * ChannelDescriptor.identifier field from the Vega EPG Provider
     * if it was supplied during EPG Ingestion.
     */

    // Add your business logic to tune to ${channelIdentifier} here.

    const response = ChannelServerComponent2.makeChannelResponseBuilder()
      .status(ChangeChannelStatus.SUCCESS)
      .build();
    return Promise.resolve(response);

  },

    /**
     * handleChangeChannelByNumber should not be used, implement and use handleChangeChannel instead
     */
  async handleChangeChannelByNumber(
    majorNumber: number,
    minorNumber: number,
  ): Promise<IChangeChannelResponse> {
    throw new OperationError(
      'handleChangeChannelByNumber should not be used, implement and use handleChangeChannel instead',
    );
  },

  async handleSkipChannel(
    channelCount: number,
  ): Promise<IChangeChannelResponse> {

    // Add your business logic to handle skip channel

    const response = ChannelServerComponent2.makeChannelResponseBuilder()
      .status(ChangeChannelStatus.SUCCESS)
      .build();
    return Promise.resolve(response);
  },
};

Step 4: Supply your handler object to ChannelServer so it can be invoked

Add code similar to the following in your interactive component:

Copied to clipboard.

// Use the latest ChannelServerComponent2 from the library
import { ChannelServerComponent2 } from '@amazon-devices/kepler-channel';
import {
  IComponentInstance,
  IKeplerAppStateManager,
  useKeplerAppStateManager,
} from '@amazon-devices/react-native-kepler';

const keplerAppStateManager: IKeplerAppStateManager = useKeplerAppStateManager();
// Get the component instance
const componentInstance: IComponentInstance = keplerAppStateManager.getComponentInstance();

React.useEffect(() => {
 // Provide a handler for the given component instance to the Channel server.
 ChannelServerComponent2.getOrMakeServer().setHandlerForComponent(channelTunerHandler, componentInstance);
 }, []);

That’s it! You have completed the Vega Channel integration and it should be ready to receive commands.


Last updated: Sep 30, 2025