Extensions Life Cycle Management
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.
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:
- Pending Action means revisions are required. You are contacted (at the author email address you provided) and told the reason(s) the extension was not approved. You can then take the extension back to a test state, iterate on the issues, and re-submit for review: no new version needs to be created.
- Rejected means Twitch views the extension as inappropriate and will not accept it. The extension’s Client ID (a unique identifier) is permanently revoked. Rejected is a terminal state.
- Approved means you can release the extension at any time. You can go back to a test state if desired, but this incurs another full review cycle.
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:
- Be aware that some viewers or streamers may be using the old version at that very moment.
- Ensure your Extension Backend Service (EBS) can handle traffic from older versions that are not yet refreshed.
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 Tab||Required Fields||Optional Fields|
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 Tab||Required Fields||Optional Fields|
(a pop-up screen appears when you submit for review)
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:
- Click on the extension to be updated, to open a page listing all versions of that extension. Click Create New Version (near the top right of the page). In response, the system copies all information from the prior version to the new one.
- Clone any previous version, to use as the basis for your new version.
Deleting an Extension
If you decide to stop supporting your extension, you can delete it. Note that:
- You cannot delete specific versions.
- Deleting is irreversible.
To delete an Extension, go to the Extensions developer console, then:
- Find the extension you want to delete.
- Click Extension Authorization Settings.
- Click Delete Extension. This will delete all installations and activations of all versions of the extension.
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:
- On your Extensions console, select any version of any extension and click Manage, to go to the Extensions Manager.
- On every page of the Extensions Manager , you see the state of your extension and next steps to move through the extension life cycle.
- Follow the instructions for the Extensions Manager tabs: Status, Version Details, Capabilities, Monetization, Files, Asset Hosting, and Access.
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:
|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.
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.
|Name||Your extension’s name.|
|Summary||This 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.|
|Description||More detail than the Summary about the functions of your extension.|
|Author Name||The full name of the extension author or organization that will receive credit on the Extensions Manager .|
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:
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.
|Logo Image||Add 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 Image||This 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:|
|Screenshot Image||Screenshots 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.|
|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.
|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
|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.|
|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:
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 Configuration||These 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 URLs||If 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.|
|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.
|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.
Content Security Policy (CSP)
When an extension is being hosted on Twitch, you must adhere to certain content security policies:
- You cannot run inline scripts without a nonce/hash.
- You cannot use iFrames within your extension.
- You can use either HTTPS or WSS to connect to external sources (such as an EBS).
- You cannot have fonts or scripts hosted outside of the extension files (with exceptions for Google Fonts/Analytics).
- Fonts can only be loaded as a local file or using Google Fonts. When using a local font and Webpack, Webpack’s url-loader will convert fonts under a specified size to a base64 URI - this will violate the CSP. To resolve this, use file-loader instead.
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;
|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.
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.
|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.