Contents

Extensions Life Cycle Management

Local Test

Every version of every extension begins in Local Test. All assets (HTML, JavaScript, CSS, images, fonts, etc.) are served from the testing base URI that is defined on the Asset Hosting tab of the Extensions Manager ). To locally test your extension, you need a local Web server. Since some operations require HTTPS, you need to create and install a self-signed certificate on your system.

In Local Test, you can install your extension on your own channel, in the Extension Manager section of the streamer dashboard. If you are directed to configure the extension, see Required Configurations. Click Activate. Then you can test your extension.

Twitch CDN & Hosted Test

When you’re satisfied with the locally-hosted test version, you upload your Extension’s assets to, and begin serving them from, the Twitch CDN. Then you can transition the version to Hosted Test, to test that the extension still works when served from Twitch.

Once you are in Hosted Test, if you want to change any of your Extension version details (e.g., name, description, images, etc), you must move back to Local Test.

In both Local Test and Hosted Test, extensions are visible only to a developer-provided list of test accounts and a small subset of Twitch staff. Other viewers see your channel without any extensions.

Review

Once you complete the hosted test, you can submit the version for Review. While in review, all test accounts can continue to test the extension as before. 

Note: Extension Reviews can take up to 72 hours to be completed by our review team.

Only one version of an extension can be in Review at a time. Once a version is in Review, the only way to change it is to go back to Local Test to make the changes, upload the assets again, then re-submit the version for review. Note that re-submitting resets your place in the review queue.

Post Review - Pending, Rejected, or Approved

After the extension version is reviewed by Twitch, it is placed into one of three states:

Released

When a new version is Released, it goes live (becomes publicly visible) and can no longer be updated, only replaced with a new version. For a given extension, only one version can be released at a time: any prior released version is transitioned to Deprecated, and any installations of it are immediately upgraded. When you release a new version:

Moving from Local Test to Hosted Test

In order to move an Extension from local test to hosted test, you need to fill out the required fields in  the following table.

Extensions Manager TabRequired FieldsOptional Fields
Monetization
  • Bits Support (default: No)
  • Subscription Support (default: No)
N/A
Files
  • Version Assets
N/A
AccessN/A
  • Streamer Whitelist
  • Testing Account Whitelist

Moving from Hosted Test to Review

In order to move an Extension from hosted test to review, you need to fill out the required fields in the following table.

Extensions Manager TabRequired FieldsOptional Fields
Status 
(a pop-up screen appears when you submit for review)
  • Extension Review Channel URL
  • Walkthrough Guide and Change Log
Version Details
  • Name
  • Summary
  • Description
  • Author Name
  • General Category
  • Logo Image
  • Taskbar Icon Image (video-component Extensions only)
  • Discovery Image
  • Screenshot Image
  • Author Email
  • EULA or Terms of Service URL
  • Privacy Policy URL
  • Game Category (required for  extensions integrated with a game; otherwise, optional)
  • Support Email
Capabilities
  • Request Identity Link
  • Chat Capabilities
  • Select how you will configure your extension
  • Developer Writable Channel Segment Configuration
  • Streamer Writable Channel Segment Configuration
  • Whitelist Config URLs
  • Whitelisted Panel URLs
Asset Hosting
  • Testing Base URI
  • Type of Extension
  • Viewer Path
  • Panel Height
  • Video - Fullscreen View Path
  • Config Path
  • Live Config Path

Updating after Release

To update an extension after it has been released, create a new version and submit it for review. (This does not affect the version of your extension that is live.) To create a new version, go to your Extensions developer console and do one of the following:

Deleting an Extension

If you decide to stop supporting your extension, you can delete it. Note that:

To delete an Extension, go to the Extensions developer console, then:

  1. Find the extension you want to delete.
  2. Click Extension Authorization Settings.
  3. Click Delete Extension. This will delete all installations and activations of all versions of the extension.

Pre-Release Disclosures

Viewers will not be able to use an Extension until they agree to the Extension disclosures that are visible on your channel page. These disclosures are removed when viewers install a reviewed and approved Extension available on the Extension Directory.

Extensions Manager Overview

Use the Extensions Manager to create new extensions and make changes to existing Extensions:

  1. On your Extensions console, select any version of any extension and click Manage, to go to the Extensions Manager.
  2. On every page of the Extensions Manager , you see the state of your extension and next steps to move through the extension life cycle.
  3. Follow the instructions for the Extensions Manager tabs: Status, Version Details, Capabilities, Monetization, Files, Asset Hosting, and Access.

Status

The Status tab indicates where in the Extensions life cycle your extension is and what steps you can take next. Depending on where your extension is in the life cycle, different information and buttons appear on this page to indicate, for example, how to add information required before you can move to the next life-cycle stage.

When you click to submit your extension for review, you are prompted to enter the following information:

UI Item Description
Extension Review Channel URL URL of the Twitch channel where the Extensions review team will test your extension. This channel must be streaming during the review process.
Walkthrough Guide and Change Log Walkthrough Guide and Change Log
For quick review, submit a clear, thorough guide: describe extension functionality and how you expect viewers to use it. For subsequent versions, include a change log. Failure to provide these may result in delayed review or rejection.

Version Details

Most of the information on the Version Details tab is displayed in the Discovery tab on a streamer’s dashboard. For tips on using “discovery” to your best advantage, see Designing Extensions.

There are three categories of fields to be entered: general settings, image assets, and miscellaneous other fields.

General Settings

Field Description
NameYour extension’s name.
SummaryThis will be viewable by streamers and viewers. It should be 1-2 brief sentences describing what your extension does. To provide more detail, use the Description field.
DescriptionMore detail than the Summary about the functions of your extension.
Author NameThe full name of the extension author or organization that will receive credit on the Extensions Manager .
General Category

If your extension fits in more than one category, chose the most appropriate one. Don’t choose a category that your extension clearly does not fit into (e.g., the “Schedule and Countdowns” category, for a Destiny 2 gear extension). The drop-down list has these categories:

  • Extension for Games: Extensions that are built specifically to support games (either a specific game or many games).
  • Games in Extensions: Extensions that contain games.
  • Schedule and Countdowns: Extensions that allow broadcasters to communicate to their communities their next event or stream.
  • Polling and Voting: Extensions that enable broadcasters to get viewer feedback.
  • Loyalty and Recognition: Extensions that help viewers use loyalty points or provide a way for them to be recognized in the channel (like a leaderboard).
  • Music: Extensions that enable broadcasters to show their current song or enable viewers to request songs from the broadcaster.
  • Viewer Engagement: Extensions that provide different ways for viewers to engage, and do not fall into another category
  • Streamer Tools: Extensions that do not fall into another category.
Game Category

If your extension supports specific games, you can indicate which ones here. Select up to 15 games. Start typing and the field will list available options. List only those games your extension supports.

This is required for Extensions integrated with a game.

Image Assets 

Field Description
Logo ImageAdd a logo for your extension. This must be a 100x100 PNG. Do not use Twitch or Glitch logos. If you do not have a logo, a default logo is assigned.
Taskbar Icon Image(Video-component Extensions only) This icon appears at the bottom of the stream, indicating which extension is active. This must be a 24x24 PNG.
Discovery ImageThis splash screen is the first thing streamers see of your extension. The Extensions Manager  shows this image in the Discovery tab on a streamer’s dashboard. This must be a 300x200 PNG. Tips:
  • Don’t use a lot of text; that overwhelms the image.
  • Avoid having too much detail in the image, to maximize visibility.
  • Avoid transparency in your PNG.
Screenshot ImageScreenshots are your best tool to help streamers understand how your extension works, if they haven’t seen it on someone’s channel. You must include one or more screenshots when you submit an extension for review. Provide clear images that display your in action. Images can be PNG, JPG, or GIF. The minimum (and recommended) image size is 1024x768. Images must have a 4:3 aspect ratio. Files must be less than 10MB.

Other Fields

Field  Description
Author Email Contact information for the extension creator. This is used to contact the developer with information about the extension’s lifecycle (e.g., reject/accept notifications). Twitch will never reveal this email to anyone on the site.

After you submit this information, you will get a verification email. Be sure to click on the link in the email. If you have not done this, you will not get email notifications about file-upload issues or extension approval.
Support Email Public contact information for support-related queries from streamers.
EULA or Terms of Service URL EULA or Terms of Service URL
Reference URL for your End User License Agreement or Terms of Service.
Privacy Policy URL Reference URL for your privacy policy

Capabilities 

Miscellaneous Fields Description
Request Identity Link Default: No. Select Yes if your extension needs to know the viewer’s numeric Twitch ID. Once the viewer accepts your request to share his Twitch identity, the viewer’s numeric Twitch ID is provided in the Extension Helper’s onAuthorizedcallback function. For details about these callbacks and the JWT format, see the Extensions Reference.
Chat Capabilities Default: No. Select Yes only if your extension calls Send Extension Chat Message. If you select this, be sure to include details of your extension’s chat functionality in your extension description.
Configuration FieldsDescription
Select how you will configure your extension

Default: Extensions Configuration Service. Select the source of the configuration for your extension:

No configuration — Choose this if your extension has no need for per-channel customization.

Custom/My Own Service — Your Extension Backend Service provides the configuration. If you choose this, you can optionally specify another field:

  • Required Per Channel Configuration — Use this to require that a streamer successfully configure your extension before activation is allowed. This can be useful if, for example, an active extension would show a confusing error message to all viewers if misconfigured. The contents of this string can be whatever you want. This is covered further in Creating Your Extension Backend Service (EBS).

Extensions Configuration Service — Your extension will use a Twitch-hosted configuration. For more information, see Configuration Service.

Developer Writable Channel Segment Configuration, Streamer Writable Channel Segment ConfigurationThese fields provide additional required configuration information. You may specify these only if Extensions Configuration Service is selected above, for how you will configure your extension. See instructions on the UI.
Whitelist Config URLs, Whitelisted Panel URLsIf your extension is required to open an external URL for configuration or as a core functionality for the panel, list the URLs here. See information about off-site linking in Extensions Guidelines & Policies.

Monetization

Field Description
Select how you will configure your extension  
Will you monetize your extension? Default: No Bits support. Indicates whether your extension can accept Bits.
Subscription Status Default: No subscription support. Indicates whether your extension can get a viewer’s subscription status.

Extension Monetization within Organizations

Developers who wish to collaboratively build and manage Extensions can do so within an Organization. Monetization is handled by billing managers, appointed by organization owners. For more information and to get started, see the Organizations Guide.

Files

Field Description
Upload Version Assets
 
Before you can transition your extension to Hosted Test, you must upload your assets to the Twitch CDN, here. Version assets must be a .zip format. The ZIP file cannot contain executable formats or other files other than assets required to run the extension.

Be sure to also update the Asset Hosting tab with the file paths specified in the ZIP directory, so we can properly serve your assets on twitch.tv.

Asset Hosting

Content Security Policy (CSP)

When an extension is being hosted on Twitch, you must adhere to certain content security policies:

CSP for Reference

connect-src https: wss: https://www.google-analytics.com https://stats.g.doubleclick.net; default-src 'self' https://0btmbqa5tm2pyr0f59td8vk1unwxl6.ext-twitch.tv; block-all-mixed-content; img-src * data: blob:; media-src * data: blob:; frame-ancestors https://supervisor.ext-twitch.tv https://extension-files.twitch.tv https://*.twitch.tv https://*.twitch.tech https://localhost.twitch.tv:* https://localhost.twitch.tech:* http://localhost.rig.twitch.tv:*; font-src https://0btmbqa5tm2pyr0f59td8vk1unwxl6.ext-twitch.tv https://fonts.googleapis.com https://fonts.gstatic.com; style-src 'self' 'unsafe-inline' https://0btmbqa5tm2pyr0f59td8vk1unwxl6.ext-twitch.tv https://fonts.googleapis.com; script-src 'self' https://0btmbqa5tm2pyr0f59td8vk1unwxl6.ext-twitch.tv https://extension-files.twitch.tv https://www.google-analytics.com;
Field Description
Testing Base URI Change this to reflect the root URI for all assets related to this extension version. The URI must end with a forward slash. The URI is completely up to you; it need not match the version in any way. During test, the assets are served directly from this URI, so you can update your code without re-submitting anything.
Type of Extension Select one or more types: Panel, Video - Fullscreen (i.e., video overlay), Video - component, or mobile.
Viewer Path Path to the HTML file that is shown to viewers on the channel page. There is a “path” box for each item selected under Type of Extension.
Panel Height Default: 300. This appears only for panel extensions. It is the panel height in pixels. The range is 100-500.
Video - Fullscreen View Path This appears only for video-overlay Extensions. It is the path to the HTML file shown to viewers on the channel page, when the extension is activated as a video overlay. This path should be relative to the Testing Base URI.
Config Path Path to the HTML file that is shown to streamers while they are configuring the extension but before activating it within the Extensions Manager . This page is displayed in an iframe with a dynamic width (up to 1100px) and a fixed height (700px). This should be a path relative to the testing base URI. It should be used for infrequent, install-time configuration.
Live Config Path Optional) Path to the HTML file that is shown to streamers in the Live module of the dashboard. It is used for streamer actions taken while the extension is active, such as creating a new poll. It should be a path relative to the testing base URI.

If this “live configuration view” is specified/set, it will be enabled for pop-out control.

Access

The fields on the Access tab require comma-separated lists of account IDs (not names). To convert account names to account IDs, see Translating from User Names to User IDs

Fields Description
Streamer Whitelist Account IDs in this list are the only Twitch streamers who can install this extension after release, via the “Invite Only” tab on the streamer’s Extensions Manager  (on the twitch.tv dashboard). If this field is blank, any Twitch user can install this extension via the Extension Discovery Directory.

If your extension has whitelisted streamers when you submit it for review, the approved extension is visible only to those streamers. After review, changing the whitelist requires re-submitting your extension for review. So, be sure to check your whitelist before submitting your extension for review.
Testing Account Whitelist Account IDs of streamers who will be able to install and activate the extension on their channels and view the extension on any channel where it is activated. By default, you can install, activate, and view this extension on your channel

Adding IDs here prevents streamers outside the whitelist from installing the extension once it is approved. If this is empty or missing, all streamers can use this extension. Accounts on the Testing Account Whitelist can install the extension even if they are not on the Streamer Whitelist.