Contents

Submission Best Practices

Reviews for organizations and chatbot verification continue to be temporarily paused while we revise our processes. Reviews for Extensions and game ownership have resumed. Thank you for your patience and understanding.

As of July 9th 2024, there is no longer a requirement to have an Apple Developer account, or fill out the "iOS Allowlist Request" form, to allow an Extension to work on the iOS version of the Twitch app. All mobile Extensions, existing and new, are available on iOS and Android without additional requirements in the submission process.

With a large variety of Extensions being submitted, adoption of an Extension can be difficult for broadcasters due to the differing setups of each Extension. This document outlines best practices for submitting your Extensions for review.

Quicker reviews and faster adoption

When creating an Extension, keep in mind the flow broadcasters will follow the first time they use it. Following is a list of ways that you can simplify your configuration to increase adoption and speed up the review time of your Extension:

Template for a helpful Walkthrough Guide and Change Log

When submitting your Extension for review, you are required to submit a review channel. While the Change Log is useful for the review team to take note of new or altered features, UI or code changes, providing a Walkthrough Guide is just as essential for a timely review. This guide can include things like testing account credentials, your chosen code language, or even required applications for your Extension to be reviewed with minimized delays. We strongly recommend including a thorough Walkthrough Guide and itemized Change Log. Please feel free use this template below:

[Information regarding backend allowlists, source code, game/app requirements for review, and/or test account details if account is required]

This information is essential for the review team to complete your review in a timely manner. An example of the “source code” information needed is what technology/language your code is written in and if your code is not human-readable (i.e. obfuscated, minified, etc.) Please note: if your Extension does not contain human-readable code, please use this form to submit your source code. If your Extension does not rely on any of these details, please make a note of this in the Walkthrough Guide and Change Log. 

[Changelog v X.X]

This should be the changelog of the current version of your Extension in review. We recommend isolating this changelog to solely the changelog of the version you are submitting for review.

[Steps for Testing the Extension]

This should be the steps of testing all of your Extension’s functionality and features. Please note: if any of these steps are not intuitive for the broadcaster, the broadcaster may not be able to set up your Extension for use.

  1. Step 1
  2. Step 2
  3. Step 3
  4. And so on…

[Optional: Video walkthrough of Extension configuration and viewer interaction]

This should be a simple walkthrough of the Extension from configuration to viewer’s experience. The video can be hosted on any public video hosting site.

[Optional: Developer’s Live Review Channel Times]

This should be a block of time that you can make sure to be actively streaming on your channel with the correct Extension version enabled. If you do not provide these times, or if our team cannot perform your Extension review in the time you provided, our review team will reach out to get your availability.

[Optional: Additional information for the review team]

This should be any additional information that you think is essential for the review team to be able to complete your Extension review that hasn’t been covered with the above topics.

If a linkout directly enhances the experience of an Extension’s functionality or compliments content or data found in your Extension, it can be a great option. However, in order to pass policy review, there are a few things that you should not include in your linkouts:

We believe that if you can bring in more functionality and information through the Extension UI itself, you can create a more seamless viewer experience. This also ends up being a better outcome for streamers who are trying to maintain viewer numbers and channel engagement.

How to write a great description

A great Extension description is simple and straight to the point. However, there are a few key things it’s important include in your Extension description. Broadcasters need to know why they should install your Extension and what to expect when using your Extension.

Here is an example of a great Extension description to use for a reference:

Tower builder is cool little mini-game for your viewers to play passively or actively while watching your channel. Every 5 minutes someone is watching your channel they gain one tower block. The tower has a visual animation play if a block is added, and the block counter shows them how tall their tower is. If someone wants to get more blocks faster, they can exchange Bits for blocks! There is a leaderboard view within the Extension that allows everyone to see who has built the tallest tower. Each time a viewer reaches the top spot of the leaderboard a message gets posted to chat for all to see! Who will have the Tallest tower in all the land? Find your master builder today!

Configuration clarity

If your Extension requires configuration in order to activate it, putting in the extra effort to make this step user-friendly can help to increase adoption of your Extension. The configuration will be the first interaction that a broadcaster has with your Extension, and you want to make sure it makes a good impression! If the setup is confusing, or takes a long time to complete, it can be frustrating for a broadcaster looking for more of a plug and play solution. For game-matched Extensions, do not assume that there are steps or terminology that everyone who plays that game will know. Simplicity is key.

Ways that you can make configuration intuitive include:

Branding and emotes

Everyone wants to make sure that they are getting credit for the hard work they do, and Twitch is no exception. It is best to steer clear of using Twitch-branded content, such as the Twitch Glitch, Twitch Logo, or Twitch’s global Emotes in your Extension. If you have original images or emotes, we would be happy to see those included in an Extension to make viewer engagement more personal and exciting.

For more information about what content specifically is not allowed within your Extension, review our Guidelines and Policies.

Content in Extensions

Extensions help create opportunities for broadcasters to interact with their audience and provide a wide range of added functionality. The following guidelines will help developers find the right type of anchor for their Extension’s functionality:

Overlay: We want experiences in the overlay type to be interactive and/or content-enhancing for the stream. Below we have provided a list of expected functionality for a global overlay Extension and an example of each. A global overlay Extension is any Extension that can be installed on any Twitch channel (i.e. it does not specify a broadcaster allowlist).

Component: Should display information related to or relevant to what is happening on the stream.

Panel: Extensions without any interaction should live in a panel.

For more information about Content, please review our Guidelines and Policies.

Commerce in Extensions

Monetary transactions completed via a payment flow from within an Extension are not permitted. This means that any embedded payment options such as Amazon Pay, PayPal, or Stripe, will cause your Extension review to fail. Additionally, linking viewers to a web page where they can purchase items or services on a third-party website will also cause the Extension review to fail.

For more information about Commerce, please review our Guidelines and Policies.

Bits in Extensions

Bits are a fantastic way to help monetize your Extension while also giving broadcasters a way to provide a premium experience. However, there are some things that you will need to watch out for in order to pass review. First, we recommend you familiarize yourself with the Bits in Extensions and the Bits Acceptable Use policies. Once you have done that, read through the tips we have listed for you to help get your Extension through the review process without hitting any speed-bumps:

It is a good idea to look through your Extension one last time before submitting for review to ensure that all references to Bits adhere to the policies. Following the policies increases your chance of having your Bits-enabled Extension approved.

Another thing to keep in mind is that not all broadcasters will have Bits usage enabled on their channel. Bits can only be enabled on Partner or Affiliate channels that have opted in to use them. Before allowing the broadcaster to activate the Extension we recommend doing a check to see if their channel has opted into Bits usage. If they have not opted in, we recommend implementing one of the following options:

We believe that utilizing one of these options will create less confusion for viewers trying to use Extensions where Bits functionality is not available due to the broadcaster not having Bits usage enabled. It will also create an environment where the broadcaster has less to worry about or to explain to viewers who may have trouble with your Extension.

Moderation API

Extensions that enable users to generate their own content creates exciting new ways for broadcasters to interact with their community. For these Extensions, we strongly recommend implementing the following features to provide a safer experience for broadcasters and engaged viewers. To help assist with implementing these safety parameters, Twitch offers Moderation APIs.

Requesting user permissions

Requesting users to share their ID and grant permissions to your Extension might be necessary for users to use all or some of your Extension’s functionality. Keep in mind that user privacy is a big deal and some users may be hesitant to grant permissions to something that they are unfamiliar with.

In order for users to understand why they are being asked for permissions within your Extension, we recommend that you only request the permissions you need at the time that you need them. This way users should have a better idea of what their ID is needed for and might feel more comfortable sharing their ID.