Extensions Life Cycle Management
Life Cycle Overview
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.
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.
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.
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
|Extensions Manager Tab||Required Fields||Optional Fields|
Moving from Hosted Test to Review
|Extensions Manager Tab||Required Fields||Optional Fields|
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). We copy over all information from the prior version.
- 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. (You cannot delete specific versions.) Note: Deleting is irreversible. In the Extensions developer console:
- Find the extension you want to delete.
- Click Extension Authorization Settings.
- Click Delete Extension to delete all installations and activations of all versions of the extension.
Until your extension is released, there are disclosures in the Extensions manager and on the channel page. The disclosures indicate that the extension is being tested and has not yet been evaluated or approved by Twitch.
Anyone on your testing or developer account sees these disclosures for your extension. On the channel page, the disclosure appears when your extension attempts to load. Users (anyone testing the extension) must accept a prompt, to proceed with the load. User choices for these prompts are not saved and persisted, so if the browser is refreshed, the disclosure appears again.
The disclosures no longer appear once the extension version is released.
Extensions Manager Overview
You 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.
Below we describe each Extensions manager tab: 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 from here. Depending on where your extension is in the life cycle, different information and buttons appear on this page; e.g., to indicate 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 Changelog
For quick review, submit a clear, thorough guide: describe extension functionality and how you expect viewers to use it. For subsequent versions, include a changelog. 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.
Your extension’s name.
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.
More detail than the Summary about the functions of your extension.
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 game-matched Extensions.
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.
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:
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.
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.
Public contact information for support-related queries from streamers.
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
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:
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.
|Onboarding Status||Developers who are not Twitch partners/affiliates must complete a one-time monetization onboarding process before the monetization fields on this tab are activated. For details, see Monetization Onboarding. To onboard, click Continue to Onboarding.
If you are a Twitch partner or affiliate, you do not need to onboard.
If you are not a Twitch partner or affiliate, the remaining options on this page are not selectable until you complete onboarding.
|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.|
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
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.
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.
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.
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.
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.