At TwitchCon 2018 in San Jose, we debuted a program that represents the diversity of content, creators, and communities on Twitch. Our first 15 TwitchCon Ambassadors shared their stories across social media, Twitch Weekly, the TwitchCon blog, and on the front page, leading up to, and at, TwitchCon.
Being a TwitchCon Ambassador showcased these creators to the broader Twitch community, and not only did they flourish, but communities from Beauty to Speedrunning to The Sims had an opportunity to shine like never before. Obviously, we couldn’t stop there, so we’re broadening the program beyond TwitchCon and introducing a new Twitch Ambassador every single week.
The Partners chosen are established and have amazing communities, but their unique stories deserve a bigger spotlight. They were chosen specifically because of the positive impact they’ve contributed to the Twitch community. From being role models for their community, to establishing new content genres on Twitch, to having inspirational stories that empower those around them, these creators embody what it means to #BleedPurple.
Every week, we’ll feature a new Partner or Affiliate and a new community live on the front page of Twitch telling their unique stories and on an Instagram takeover, as well as popping up occasionally in a number of additional places (hint: Berlin and San Diego). We hope you’ll stop by, say hello to these creators, and leave a :bleedPurple: or two in chat.
Meet Our Twitch Ambassadors! was originally published in Twitch Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.
For three months, the Twitch developer community has been hard at work creating, building, and launching Extensions for the Twitch Extension Challenge powered by AWS.
And now the winners have been announced!
Watch the announcement show with special guests now! (There’s a unicorn onesie somewhere. 🦄)
This is panel Extension allows viewers to easily alert a streamer when a package is on the way to them. The viewer can post the tracking number in the same area, so the streamer doesn’t have to worry about where the tracking numbers come from and all the info is in one nice easy spot.
This Extension uses a service for Magic cards object detection and identification, such that viewers can click on the physical outlines of cards on-stream to see what the cards do. They also built a Magic decklist upload option, so that creators can display the hidden contents of a deck designed for a tournament.
Heat is an Extension for interactive experiences through clicks directly on the video feed. It captures click data on the video feed and routes it to the broadcaster. Now, it provides a number of front-end demos and instructions for creating custom experiences with a simple protocol based on socket.io.
Chat Heroes, created by Nick Phillips, Matthew Snyder, Mike Freudenberg
Chat Heroes brings Chat to life with animated characters as well as helps increase streamer support using bits. It allows both the streamers and viewers to show love, say hello, get salty, etc. Chat Heroes provides multiple characters and interactions to choose from.
Playground is the ultimate audience engagement Extension. Create custom engagements, and let viewers contribute and participate in your stream. Share the love and give your viewers the recognition they deserve when they contribute to your channel!
With Chat Translator, viewers can talk to streamers and have conversations among each other, each in their own native tongue as if all other chatters speak the same language. It automatically detects and translates messages from 21 different languages to the currently-supported five languages.
Imagine you can understand almost any language. This Extension is basically subtitles for viewers on a Twitch channel. Viewers can read subtitles in 20 different languages. With the help of this Extension, you can remove so many language barriers!
First Place
StreamBreak, created by David Fasching, Manuel Fleck & Oliver Wendelin
Multiplayer games for your audience! Keep your viewers during bio breaks and let them play mini games together! With StreamBreak, instead of a pause screen or a countdown, streamers can simply start a StreamBreak game and let their viewers play.
There were a total of 93 participants in the challenge, so there’s much more to see. Check out all the submissions here.
Congrats to all the winners and thank you to everyone that submitted! You’re not only helping to build the future of live entertainment, but also an awesome community.
Special shoutout to Devpost, our partner in running this challenge!
Ready to build interactive experiences on Twitch? Start now!
We are excited to partner with gamesweekberlin 8 April through 14 April, 2019! Our Twitch Developer Tour Berlin is now part of their seven days of events dedicated to gaming, business, and development.
In addition to the Twitch Developer Tour on Friday, 12 April, we will be leading a technical workshop on Tuesday, 9 April at Quo Vadis. The week will culminate with our first-ever TwitchCon Europe at the The Berlin City Cube Convention Center.
Come learn about why working with Twitch and Twitch technologies like Extensions, Drops, and Twitch Prime makes sense for your game, and see how building streamer tools help engage the streamer and viewer communities on Twitch. We will also dive into code with an exciting technical demo on stream. Come hear from special guest speakers: Ricardo Rego, Head of Product at Bossa Studios, and Christian Bergmann, Sr. Community Manager at WarGaming.
Gamesweekberlin is the leading cross-industry communication and networking platform for games business, development, and culture in Europe. Over seven days, the umbrella brand combines multiple events for industry representatives and game enthusiasts alike. In 2018, about 15,000 international and German game developers, publishers, investors and multipliers from public institutions and the media industry as well as gamers, families, and fans came to Berlin.
We are excited to be part of this amazing week and hope to see you in person!
Co-op Contra on the living room floor. D&D in the blanket fort. Four-player Goldeneye after school. Rock Band rock-offs. Watching your friends’ in-house Smash tourney. Building a castle together in Minecraft… No matter which games we started with, no matter where we trace our nerdy roots back to, we’ve always played together.
And now there’s a whole new way to keep playing together on Twitch: Squad Stream.
Squad Stream is a fast and easy way for up to four creators to go live and stream together in one window. It’s perfect for showing off every awesome moment in a battle royale match, saving a virtual seat at the table for tabletop streams, catching every second of speedrunning head-to-heads, and so much more that we can’t wait for all of you to show us.
Unlike hosting or Raids, which are excellent but more hands-off ways to collaborate, Squad Stream lets streamers actively team up with other creators to benefit everyone in a channel. Creators can join forces right from the dashboard, stream content they wouldn’t normally stream, and grow their communities all at the same time. Viewers get more angles on the action, a way to support more of their favorite streamers with ease, and a chance to chat with several great communities at once — or join a new one.
We’re celebrating the launch of Squad Stream with a variety of four-person streams over the next few weeks featuring a variety of partners and content. Check out the full schedule (in PST):
Squad Stream is available for Partners first. If that’s you, you can start a Squad Stream now right from your dashboard. Your viewers will be able to opt-in to the Squad Stream right from your channel page.
If you want to see Squad Stream in action, use the Squad Stream tag on the Browse page to see which squads are live right now.
FAQs
Q: How do I start or join a squad?
A: To start your own squad or join an existing one, go your dashboard and look for the Squad Stream widget. From there, you can either start your own squad by inviting other streamers or accept an invite to join another squad. Note: Squad Stream is rolling out to Partners first, so you are only able to invite Partners to a squad at this time.
Q: How do I change permissions for who’s able to invite me to a squad?
A: You can manage your permissions settings for Squad Stream from your channel settings page. By default, channels you follow, is your friend, or on the same team will be able to send you an invite.
Q: How are viewer counts calculated during a squad stream?
A: Any viewership you receive when your video player is in the primary slot will count towards your channel stats and be reflected in your channel analytics and stream summary.
Q: Why is Squad Stream only available to Partners?
A: We are rolling Squad Stream out to Partners first because of the need for video quality options (also known as transcodes) in order to ensure the best experience for viewers. Currently, all Twitch Partners receive video quality options on their streams by default, while Affiliates receive them as they’re available, with priority access. Our plan is to make Squad Stream available to Affiliates and all other streamers as we continue expanding our transcodes capacity.
Q: Why are video quality options (transcodes) important for Squad Stream?
A: We want to ensure the best Squad Stream experience for everyone. To do that, Squad Stream relies on video quality options to display the channels in non-primary slots in lower quality modes like 480p. Most streamers stream in 720p or above, so without video quality options, the squad viewing experience can be taxing since it would display up to four 720p+ streams at once.
Q: How do I Follow, Subscribe, Cheer with Bits, and Chat in Squad Stream?
A: Viewers can chat or Cheer with Bits in whichever channel that is in the primary slot. Options for following or subscribing appear by either hovering over the squad member’s avatar at the top of the screen or over the video player for that squad member.
Q: How do I change which channel is in the primary slot?
A: Simply click on any of the other channel’s video player and it will swap into the primary slot.
Q: Do ads appear in Squad Stream?
A: Yes, viewers are able to see both pre-roll and manually triggered mid-roll ads while watching a Squad Stream. However, ads will only play in the channel that is in the primary slot. Viewers will be unable to switch views while an ad is playing. On mobile, ads will play in full screen.
Q: Can viewers watch Squad Streams on mobile?
A: Yes, viewers are able to watch in squad mode via the latest versions of the Twitch mobile app on iOS and Android. Viewers are able to watch up to 3 channels at once. For squads with 4 channels, viewers will be able to select which 3 of the 4 are displayed. Squad viewing is limited to 3 on the mobile app because of the need to be able to provide a consistent, optimal experience for all audiences.
Q: How do Clips work with Squad Stream?
A: When a viewer clicks the Clip button on a video player from a Squad Stream, a clip of only that specific channel is created. There is currently no native way to capture a clip of the entire squad view, but it’s something we’re into for future development.
Q: How do Past Broadcasts (aka VODs) work with Squad Stream?
A: Past Broadcasts of a squad stream will not display multiple streams. We are exploring solutions to enabling Squad Stream-compatible Past Broadcasts, but in the meantime, Past Broadcasts for channels that participate in a squad stream will only feature content from that individual channel.
Q: How do Extensions work with Squad Stream?
A: Extensions will be disabled for viewers who watch in squad mode. However, Extensions will continue to function for those viewers who watch in non-squad mode.
Q: How do Hosts and Raids work with Squad Stream?
A: When a channel Hosts or Raids a channel that is currently in a Squad Stream, it will only Host or Raid that single channel. Streamers who are in a Squad Stream cannot initiate a Host or Raid via the chat in squad view. However, they can still initiate a Host or Raid through the Dashboard widget or chat command from the channel page.
Q:What’s the best way to ensure that video and audio is synchronized as much as possible?
A: We recommend that all streamers participating in a Squad Stream have low latency settings on (found in the Dashboard under Settings > Channel) and use a third-party voice app to communicate.
Q: What happens to my viewers when I leave a squad stream?
A: When a streamer leaves a squad, their viewers will remain in squad mode. If you plan on leaving during a live Squad Stream, make sure to let your viewers know. If you are the squad leader, the first streamer you invited will become the new squad leader.
Twitch Prime and Nintendo are teaming up to offer Twitch Prime members up to a full year of the Nintendo Switch Online service.
Starting today, Twitch Prime members can claim three free months of Nintendo Switch Online when they visit twitch.amazon.com/nintendo. After 60 days, they can come back to get another nine months of Nintendo Switch Online, for a total of 12 months. Those who already have a Nintendo Switch Online membership will have these additional months added to their existing Nintendo Switch Online membership. Twitch Prime members have until Sept. 24, 2019 to claim their three months of Nintendo Switch Online, and until January 22, 2020 to claim the additional nine months.
A Nintendo Switch Online membership provides a variety of features for the Nintendo Switch video game system, such as online play and Save Data Cloud backup for compatible games, a collection of classic NES games with added online play, a smartphone app that enhances features of supported games, and special offers.*
*Persistent Internet, Nintendo Account age 13+ and compatible smartphone required to use app. Data charges may apply. Online play, Save Data Cloud backup and Nintendo Switch Online smartphone app features available in compatible games. Not available in all countries. The Nintendo Account User Agreement, including the Purchase and Subscription terms, apply. nintendo.com/switch-online.
Offer only available in select countries. Nintendo Account linked to Nintendo Switch console required. Active Twitch Prime account age 13+ for 60 days required to claim additional 9-month Nintendo Switch Online membership at no extra cost. Nintendo Switch Online Family Membership holders are not eligible. A credit card or linked PayPal account required for users age 18+. Nintendo Switch Online membership will automatically convert to a 3-month membership for $7.99 US unless automatic renewal is turned off any time up to 48 hours before the end of the initial 3-month membership. Three-month memberships must be redeemed by September 28, 2019 and nine-month memberships must be redeemed by January 28, 2020.
What is Twitch Prime?
Twitch Prime is a premium experience on Twitch that is included with Amazon Prime. Benefits include in-game loot, free games, a free monthly channel subscription AND all the benefits of being a Prime member.
You can try it for free for 30 days right here, and when you do, you get all the Twitch Prime benefits instantly just by linking your Twitch account to your Amazon account.
Every day on average, more than 15 million visitors tune into Twitch, three million streamers go live per month, and last year, audiences enjoyed about 505 billion minutes of content.
Watching others play video games on Twitch has massively grown. For instance, in February 2019, EA released Apex Legends on Twitch without prior announcement or much traditional marketing. The game saw more than 2.5 million players within 24 hours after release, and had 25 million players by the end of its first week. The game also generated more hours watched than any other game on Twitch in its launch week.
Twitch fosters gaming communities through conversation, interaction, and giving audiences a way to directly support their favorite content creators. In 2017, they sent 16 billion chat messages and interacted with Twitch Extensions 4.9 billion times.
Twitch is changing the way games are marketed by being a truly direct interactive conduit. Game developers now have access to direct and consistent relationships with their fans through Twitch creators, who are the ambassadors of their communities.
Twitch creates a watch/play loop with viewers
By integrating with Twitch, game developers can:
Acquirenew users by creating influencer campaigns, cross-promotional incentives, utilizing Twitch Prime, doing game launches for pre-orders, and more.
Create new engaging experiences for Twitch viewers and streamers by extending the gameplay and turning viewers into active participants in the game.
Retainusers by creating a watch/play loop by driving players to watch your game on Twitch and incentivize viewers to go back to the game.
Help your influencers and brand monetize by selling merchandise, in-game-items, and other benefits on Twitch.
Game producers, developers, and marketing leads at game companies may know Twitch is big, that Twitch viewers watch a lot of gaming content, and that Twitch is influential in promoting games. But you might not know the best practices for integrating Twitch into games, for launching games on Twitch, or for tapping into Twitch to grow and sustain live titles.
This game developer playbook is designed to give producers, developers, and marketing leads actionable next steps to integrate Twitch into different stages of a game’s lifecycle including:
A strategy for growing hours watched and revenue on Twitch.
Ways to increase pre-orders of games.
A strategy to re-engage lapsed players and re-engage players for live services.
Ways to turn viewers on Twitch into players.
Game Phases & High-level Recommendations
Most games are built in a stage-gated process with up to eight gates, which are distilled here into three major phases:
Phase 1 — Development. This phase encompasses everything from pre-production through first production, production, and alpha. Games that are in development are usually unannounced. We recommend that games in development integrate core, foundational Twitch features to help drive and engage new users.
Phase 2 — The Road to Launch & Launch. The road to launch includes announcement and beta. Launch includes the launch event itself and the first month after launch. In the road to launch and launch, games concentrate on building a great product, generating awareness of their game, and on acquiring users. We recommend that during this phase, games work with Twitch to promote their game to acquire new users.
Phase 3 — Live Games. Twitch’s largest and most watched games are live games; nine out of 10 top titles on Twitch in 2018 were released before 2018. Twitch has a set of programs to help publishers acquire new users, re-engage lapsed users, and retain them in game.
Let’s dive into each phase.
The best time to integrate core Twitch features is when games are in active development.
At this stage, you care about:
Driving play. Build hooks to drive users to play your game after launch.
Making your game fun to watch. Keep users engaged in your game when they’re not actively playing by creating entertaining viewing experiences.
Ensuring simple implementation. Twitch makes the tools and services you need to easily integrate Twitch into your game.
Tracking measurable impact. Ensure you can track the impact of Twitch programs on core KPIs in future phases.
Use these programs to achieve your goals:
Identity
Identity is foundational for most Twitch integrations. It enables your application to take actions on behalf of a Twitch account or access certain data about a user’s account. We recommend bidirectionally integrating Twitch identity between Twitch and game publisher accounts so that you can get information, such as in-game items, from Twitch as well as post to Twitch about a user and/or game state, such as a streamer’s or viewer’s stats. Twitch supports OAuth 2.0 and OIDC (OpenID Connect).
How Twitch Identity works
Beta Campaign with Bounty Board
Recruiting streamers to promote your beta using Bounty Board drives deep engagement with influencer campaigns through dozens or hundreds of small to mid-sized communities and a streamlined self-service activation that delivers brand-safe content with unparalleled engagement from viewers. You can easily distribute betas to streamers and drive a high degree of interest during the campaign. You can also utilize Extensions to drive pre-orders of your game and offer exclusive perks for Twitch users in betas by having bonuses translate into rewards in game.
Twitch mobilized Bounty Board’s community of influencers to generate excitement during the beta of Darwin Project. The launch helped them reach an engaged audience of gamers who experienced the game together and provided valuable feedback. 113 influencers activated the Bounty, resulting in 51,000 total views and 60 percent of viewers stayed on the channel for two or more minutes. We strongly recommend Bounty Board for indie games.
Interactive Extensions
Twitch viewers love to interact with streamers and with other members of the community, particularly when they can help streamers. By creating ways for viewers and streamers to interact and starting this process when your game is in development, you can help to grow your game’s audience at launch and know how to re-engage them later on.
The Darwin Project built an Extension that helped streamers play in Show Director mode and have viewers affect the game by helping or hindering the streamer. It’s a prime example of how an interactive Extension can include the viewers, which makes it more fun to watch and can help grow a strong community for your game on Twitch.
Darwin Project Interactive Extension
Drops
Drops allows game developers to offer special offers, content, or in-game items to Twitch viewers who watch your games. Drops convert viewers into players, because viewers get in-game items that are only worth anything if they play the game; they need to play to derive benefit from it. Dozens of game developers have used Drops to improve player retention and spend.
How Twitch Drops work
Mods
Twitch enables you to promote discovery of your game’s mods through the Twitch desktop app — where you can also manage them — and to drive additional discovery with a mod manager Extension on Twitch; the Extension allows a streamer to show off what mods they are playing to their community and then enables people to download and play the mod with their favorite streamer. Twitch also supports mod developers through a rewards program. Other developers are building free content for your game, which helps with organic retention and acquisition.
Blessing and Curses is a mod for Stardew Valley that adds a random chance to gain a random buff or debuff every x amount of days. If a streamer connects their Twitch account and channel name, Chat can choose from three randomly shown buff or debuff options. By using Twitch as a focus, the mod gives viewers a way to interact and affect game play on a whole new level.
Development Phase Pro tips!
Streamer Mode. We recommend enabling streamers to self-identify in game through a setting and allowing them to hide sensitive UI elements. For example, prominent streamers can get hundreds of friend requests and invites per hour, and enabling a Streamer Mode can make it easier for them to play.
Streamer User Testing. We recommend user testing your game with streamers on Twitch regularly throughout development.
Things to think about
When you’re in the Development stage of your game, think about:
Implementing Twitch Identity to integrate your game with Twitch.
Harnessing Bounty Board for beta campaigns, doing Drops campaigns, and embracing mods to make your game more fun to watch, which can help turn viewers into players.
Engaging with streamers when your game is in active development and building a campaign with on-Twitch beats from announcement through launch will help you maximize promotion efforts and ultimately, drive more interest in your game.
At this stage, you care about:
Awareness. Drive awareness of your game among Twitch’s 28 million monthly active gamers.
Consideration. Qualify users by motivating them to link their Twitch account with their publisher account.
Pre-orders. Drive future sales for your game.
Acquisition. Recruit more players for your game.
Use these programs to achieve your goals:
Interactive Announce Campaign with Extensions
The best way to announce a new title on Twitch is to drive traffic to your official channel, create some type of interactivity to build hype while users wait for your official announcement, and then share your official announcement. By asking viewers to link their accounts during the campaign, you can capture emails to re-engage the interested audience.
Bethesda’s “Tablet” Extension for Elder Scrolls Online: Elsweyr turned viewers into active participants in its reveal. The Extension unlocked the announcement with viewer interaction; 511,000 unique viewers watched the stream on the trailer launch day. There was an additional Extension that incentivized viewer participation with in-game and IRL prizes as well as the ability to pre-order the game.
Broadcast with Extensions at Major Trade Shows
E3 is generally the largest week on Twitch. In 2018, people watched over 800 million minutes of E3 content. The total viewership of E3 content year over year increased 71 percent and unique views 81 percent. Twitch also often sees hundreds of thousands of viewers for Blizzcon and other publisher-specific trade events. We recommend showing your pre-show, show, and post-show on your official channel and also making it available for co-streaming to amplify the impact.
During E3 last year, Bethesda created their own Extension, which asked viewers to link their ESO and Bethesda.net accounts to enhance the viewing experience of their Showcase — complete with trivia, polls, and an opportunity to get free items. This encouraged viewers to not only watch, but also interact with the stream and amplified coverage of announcements well beyond the audience at E3.
Launch Campaign with Bounty Board
You only get to launch a game once, so pulling all the levers is critical. You can use Bounty Board to recruit streamers and run interactive ads on Twitch to maximize lift during your game’s launch window. You can also use Extensions on your official channel to drive sales.
Twitch Advertising
Advertising on Twitch isn’t static. It isn’t one-way. We offer standard IAB display and video media as well as native opportunities. Custom executions are also available. Twitch Ads reach a highly engaged audience of mostly males between the ages of 18 and 34. More than 15 million are unique daily visitors and account for two million peak concurrent users site wide.
Apex Legends used ads on Twitch to promote the upcoming launch, which helped result in 25 million unique users in a week.
Drops
Drops allows game developers to offer special offers, content, or in-game items to Twitch viewers who watch your games. Drops convert viewers into players, because viewers get in-game items that are only worth anything if they play the game; they need to be a player to derive benefit from it. Dozens of game developers have used Drops to improve player retention and spend.
Rainbow Six Siege ran a Drops re-engagement campaign with new character skins and charms as a way to retain players.
Mods
Allowing other developers to build content for your game helps with organic retention during launch.
Road to Launch and Launch pro tips!
Account link. Remember that you can ask viewers to link their accounts during these campaigns, so you can capture email and re-engage the qualified audience.
Developer streams. Twitch users love to hear from devs. We recommend regularly updating gamers about upcoming releases and beta campaigns. You can amplify your impact by inviting Twitch streamers into your studios to play games and costream these updates. Paradox Interactive, for instance, regularly broadcasts updates — to approximately 50,000 concurrent viewers — about new releases and new features followed by experts and streamers playing the games and answering questions from their community.
Things to think about
In your Road to Launch and Launch phase, think about:
Registering your game on Twitch to make your game discoverable and to get access to more Twitch tools like the Twitch API, Drops, Insights and Analytics, and Extension development.
Using Bounty Board, various campaigns with Extensions, and Ads to build buzz with streamers and viewers and get people excited to play your game.
Trying Drops, Mods, and Extensions to retain users with new, unique experiences found only on Twitch.
Twitch helps games acquire new users and engage existing players. The strongest live games drive a loop between Twitch and the game, encouraging players to watch on Twitch and Twitch encouraging users to buy and play the game.
At this stage, you care about:
Acquiring new users. Get new users into your game.
Engaging and retaining active users. Increase daily and monthly active users (DAU and MAU) by converting Twitch viewers into players.
Re-engaging lapsed users. Get ex-players to play your game again.
Use these programs to achieve your goals:
Mods
Open sourcing your game and letting other developers create new content for your games can help with organic acquisition after your game is live.
Minecraft is almost synonymous with modding. There are a total of 55,263 Minecraft mods made discoverable on Twitch with over 4.7 million users and over 7 billion mod downloads. These mods give viewers near-constant new ways to play and watch the game, keeping it popular — even a decade after its launch.
Drops
Drops allows game developers to offer special offers, content, or in-game items to Twitch viewers who watch your games. Drops convert viewers into players. Dozens of game developers have used Drops to improve player retention and spend as well as acquire new players. Twitch also likely has more of your lapsed users than you do and can contact them better, so by using Drops, you can drive these users back into your title.
Warframe created tens of thousands of new spenders in game and reinvigorated a lapsed user base using a Drops campaign run on Twitch. 41% of the people who participated in the campaign had never spent and 20% of them spent about $10 on average.
Bounty Board
After your game is released, you can use Bounty Board to recruit streamers to promote your game, which drives deep engagement with dozens or hundreds of small to mid-sized communities through a streamlined self-service activation that delivers brand-safe content with unparalleled engagement from viewers.
The Grand Tour ran a Bounty Board campaign after the game was released to drive more acquisition. 89 broadcasters took part, which resulted in 93,000 total views and 55,000 unique viewers, 59% of whom watched the game for more than two minutes.
Twitch Prime
Twitch Prime provides in-game items, downloadable games, Amazon.com discounts, Twitch community perks and much more. Twitch Prime is one of the fastest growing Amazon Prime benefits focused on supporting games and gamers for over 100 million worldwide Prime members. Game partners benefit from our service through support of new player acquisition, increased awareness on Amazon and Twitch audiences.
In a 60-day period, a major game studio saw a 20% increase in session days and a 93% increase in average revenue per user (ARPU), which resulted in $10 million estimated incremental revenue — all through a single Twitch Prime campaign.
Engagement Extensions
Extensions are apps for Twitch. They can be used after a game has been launched to create new experiences on top of the game — such as polls, predictions, trivia, etc. — to aid in acquisition and re-engage lapsed players.
Built with the goal of driving viewer engagement for the FIFA eWorld Cup tournament, FIFA built an Extension that allowed viewers to predict match outcomes in real-time, with live accuracy scoring and the chance for the most accurate teams to win in-game rewards via account-linking. This created a new engagement opportunity for streamers and viewers to reconnect to the game.
How Twitch Extensions work
Interactive Extensions and Integrations
Unlike engagement Extensions that are built on top of the viewing experience, interactive Extensions and Integrations are part of the game and allow developers to create unique ways for streamers, viewers, and games to interact. Extensions and integrations can build a community that loves watching and playing your game. Creating an Extension that allows viewers to support streamers through Bits or Cheers while they’re playing is a win-win for both audiences.
Motion Twin’s Dead Cells launch was built entirely around a Twitch strategy. An integration that allows viewers to control game play through Twitch Chat was a core part of their “second” launch, where they used the integration as a way to re-engage streamers and viewers. This allowed them to reach a huge audience during the second launch week. They essentially doubled all-time minutes watched count in a month. Since then, the game has seen a baseline pickup in the amount of people continuing to stream the game after an initial playthrough and the base audience numbers have gone up.
Esports
Twitch is the most popular site for esports and can help increase viewership and convert viewers to players.
Incentivized Viewing
We recommend incentivizing viewers to predict who will win active esports events. We’ve seen in trials during major esports events that this can drive 60% of Twitch viewers to interact and hundreds of thousands of Twitch viewers back into game.
Twitch and PlayerUnknown’s Battlegrounds (PUBG) worked together to let PUBG Global Invitational viewers vote via a Twitch Extension on who would win each round of the world finals of the event. More than one million people tuned into the world finals, more than 70 percent interacted with the Extension, and they won more than 350,000 crates of in-game items.
Twitch Rivals
Twitch Rivals is an exclusive esports series designed from the ground up for Twitch streamers and viewers. This season will include over 100 events featuring new formats, games, interactive Extensions, and millions of dollars in prize money.
EA saw 2.5 million hours watched during their Apex Legends Rivals event on February 12, which helped contribute to the game’s overall 7 million hours watched on that single day.
Interactive Viewing
If you have an existing esport, we recommend creating an interactive Extension to allow the viewer to change perspectives, to get real-time stats for participants, and to get build guides and other information.
Global Offensive FACEIT Majors, StatsHelix exposed internal game data to power new experiences for the tournament viewers, and using Genvid’s data capture and web APIs made those interactive and synchronized to the Twitch video frame.Some of the features — including a customized UI, which allowed viewers to change the weapon’s crosshair view, the ability to call the scoreboard at any point in the game, and a live-updating minimap that showed a more detailed view of the main map, including player positions — demonstrated the pent up demand for viewers to be a part of the game rather than simply watching a game.
Live Games Phase pro tips!
Developer streams. Twitch users love to hear from devs. We recommend regularly updating gamers about new features and programs in your live games. You can amplify your impact by inviting Twitch streamers into your studios to play games and costream these updates.
Insights and Analytics: Quarterly Insights. Review your insights quarterly to understand overall viewership and broadcast metrics for each of your games listed on Twitch. In addition to viewership, you will see relevant data that can help you grow your game audience by investing in the right broadcasters with the right Twitch products. For instance, Quarterly Twitch Insights provide developers a view of broadcasters who are trending on a game title, how active a community is during the streams, what other content the community is watching, game growth by geography, and opportunities to engage streamers through Twitch services like Bounty Board.
Things to think about
In the Live Game phase, think about:
Using Extensions, Drops, and Twitch Prime to attract new streamers and viewers and reward those who already play your game to keep them coming back for more.
Setting up esports events with Extensions that incentivize and engage viewers to make your game more fun to watch.
Now what?
The growth of the Twitch community has opened up fresh avenues for game developers to attract new players, reengage lapsed players, and create communities that love watching and interacting with games.
By harness the dynamic between player, creator, and game, developers can make games that people play, watch, pay for, and play again.
Twitch tries to make this even easier by giving you the tools and strategies to be successful.
With this playbook, we hope that you now have:
A strategy for growing hours watched and revenue on Twitch with Extensions, Bounty Board, and Twitch Prime.
Steps to increase pre-orders of games through beta campaigns, launch campaigns complete with major trade show announcements, and interactive announce Extensions.
A strategy to re-engage lapsed players with Twitch Prime, Extensions, Drops, and esports events.
Ways to turn viewers on Twitch into payers using Extensions, Drops, and Twitch Prime.
Besides the recommended programs at whichever stage you are in your development cycle, there are a few things you can do now to see the benefits of Twitch integration immediately:
Register your game on Twitch. This will allow you to set up campaigns, control box art, and utilize Twitch Insights and Analytics for your games.
Visit thedev.twitch.tvsite for documentation and how-to guides.
Ready to build interactive experiences on Twitch? Start now!
Twitch for Game Developers was originally published in Twitch Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.
Expanding on our goal to help streamers and developers generate revenue on Twitch, today we’re announcing new features that will enable developers to build new monetized Extension experiences. The first two features — Subscription Status in Extensions and Subscription Purchase Trigger — will help developers unlock new ways for streamers to reward viewers who purchase a monthly subscription to their channel. Bits Enablement will let developers reach more streamer channels with the same Extension without needing to build multiple versions. Bits Transaction History enables developers to keep track of Extensions transactions.
Let’s dive in.
Subscription Status
Sub Status allows an Extension to request permission from the streamer to obtain read access to a channel’s subscriber list. Subscriptions are one of the best ways for streamers to generate revenue on Twitch. When a viewer subscribes to a streamer’s channel, they are supporting the streamer with a tiered subscription that is automatically renewed monthly. This is how many streamers, like Ninja and Shroud, generate part of their revenue. Streamers reward viewers who subscribe with perks such as exclusive emotes, sub badges, subscribers-only Chat, ads-free viewing and more.
Extensions are active on more than 67 percent of Affiliate- and Partner-level channels and viewers have interacted with Extensions more than 1.8 billion times in 2019 so far. By sharing the viewers sub status in the Extension itself, we see an opportunity for incremental subscriptions growth. Sharing the subs status in a highly visible extension will improve a viewer’s ability to see their current subscription status and motivate them to either purchase or renew.
Beyond the standard subs benefits, Subs-enabled Extensions can now help streamers offer truly differentiated experiences and benefits at each subscription tier. By adding a viewer’s sub status in the Extension, we are also unlocking a developer’s creativity to create subs benefits that are unique to the streamer’s channel. The ability to differentiate a viewer’s subs benefits is a tool that streamers see as necessary to grow and retain their subscriptions base. Providing viewers unique opportunities to actively participate in a channel is a proven engagement strategy increases engagement and monetization opportunities for streamers immediately and for developers in the near future.
Subs Status is available now and can be implemented on any released Extension. Developers can implement this feature through the new dedicated Monetization tab in their Extensions dashboard. Streamers can enable and revoke Subs Status by toggling the Manage Permissions flag in their dashboard, which will pass the proper OAuth permission to developers.
Subscription Purchase Trigger
To kick off the subscription purchase flow from an Extension, we have also released the Subscription Purchase Trigger in limited preview. Subs Status and Purchase Trigger work together to drive awareness of unique sub benefits and the ability to pay or upgrade a viewer’s subscription level.
Real World Subs Status Implementation
To bring these new features to life, we have partnered with Streamlabs to implement the first Subs-enabled Twitch Extension called Face Masks.
Face Masks are a fun way to celebrate a new subscription. Streamlabs is leveraging Twitch emotes to create unique engagement opportunities in a streamer’s channel by enabling viewers to apply an emote face mask in the channel overlay. To unlock this capability, viewers purchase Tier 2 or Tier 3 subscriptions to access up to 26 Twitch Face Masks, which can then be applied to the channel through the use of Bits. Click here to learn more about Face Masks.
Streamlabs Face Masks Tier 3 SubscriptionFuslie playing with Streamlabs Face Masks
Bits Enablement
To help developers better manage their Extension’s monetization states, we’re announcing Bits Enablement. While we have seen numerous developers launch and have success with Bits-enabled Extensions, it has not been possible for developers to refactor their existing non-monetized Extensions with Bits options. In order for developers to release Bits-monetized Extensions, they currently have to build and maintain a second version of their Extension, which has proven difficult for streamers to adopt. Similarly, many streamers have not been able to install some Extensions on their channel because only Bits-enabled versions are offered.
Extensions can now be used on all channels. With Bits Enablement, Twitch is making it easier for developers to monetize their Extensions with Bits at any stage of the Extension’s life cycle. Developers can revise their released non-monetized Extensions with Bits-enabled features by going to the Monetization tab in the console. This means that developers can now reach more streamers without having to support two different code and user bases. Similarly, streamers will be able to capture new monetization opportunities as more Extensions add Bits features.
Bits Transaction History
To help developers keep track of Extension transactions, we are announcing Bits Transaction History in Beta. This new feature will let developers focus on creating great Extensions experiences without having to worry about building foundational infrastructure to support it. Developers will be able to retrieve the entire transaction history of Bits used in their Extension. Developers can review transactions by user, channel, Extension and product.
Bits Enablement in Action
We are also excited to announce that the following partners have revamped their existing Extensions using these new Bits enablement features:
Live Emotes
Let your viewers push emotes on top of your stream with the new Live Emotes 2019! Viewers can now charge emotes with special power ups and use Bits to fire them away!
Sound Alerts
As a monetized Extension, viewers can play sounds on a stream and establish a new viewer interaction and community engagement. Now available for activation in non-monetized channels.
Latest Followers
Now allows followers to celebrate their allegiance with Bits by highlighting how long they have been following a streamer.
Twitch Picks
Now streamers can customize their polls and allow viewers to vote with Bits.
Getting started
Help us define the future of Subs-enabled Extensions by building unique use cases that create temporary, but noticeable actions in the channel. When we build experiences that facilitate streamer and viewer interaction, we create value for all of Twitch.
Developers can start building Extensions with Subscriptions-enabled functionality and revamping their existing Extensions with monetized and non-monetized states now by visiting the Developer Console. Visit the documentation to learn more.
The Twitch community radiates such special energy due in part to the unique interactions that occur between creators and viewers; it’s especially magical when a creator receives support in the form of bits or a sub from a new or recurring viewer.
Today, in a partnership with Streamlabs, we’re announcing new tools to help make those special interactions — well, a bit more special.
Streamlabs Face Masks allow viewers to apply animated 3D alerts to a streamer’s face in real time, and their new Twitch Extension offers 27 exclusive AR Face Masks, including popular Twitch emotes, that viewers can apply to a streamer’s face when they purchase a Tier 2 or 3 subscription.
A viewer cheers Fuslie with the “This is Fine” Face Mask.
Once a streamer enables Face Masks and installs the Face Masks Twitch Extension, a viewer can apply an exclusive Twitch Face Mask using a variety of methods:
Become a Tier 2 or Tier 3 subscriber: Tier 2 and Tier 3 subscribers will unlock up to 24 Face Masks (12 for each tier). Viewers can apply a Face Mask when they first subscribe, resubscribe, or use Bits.
Use Bits: Two masks are available to all users when cheering with Bits (regardless of their subscription status) and one mask will be available free for everyone.
Unlock and apply Twitch Exclusive Face Masks with Tier 2 and Tier 3 subscriptions!
What Makes this So Exciting?
For viewers: Face Masks offer a new way to engage, support, and interact with your favorite streamers.
For creators: Face Masks provide new value and more rewards for incentivizing upper-tier subscriptions.
To opt-in, you must:
1) Enable Face Masks in the Streamlabs OBS dashboard
Go memory ballast: How I learned to stop worrying and love the heap
I’m a big fan of small code changes that can have large impact. This may seem like an obvious thing to state, but let me explain:
These type of changes often involve diving into and understanding things one is not familiar with.
Even with the most well factored code, there is a maintenance cost to each optimization you add, and it’s usually (although not always) pretty linear with the amount of lines of code you end up adding/changing.
We recently rolled out a small change that reduced the CPU utilization of our API frontend servers at Twitch by ~30% and reduced overall 99th percentile API latency during peak load by ~45%.
This blog post is about the change, the process of finding it and explaining how it works.
Setting the stage
We have a service at Twitch called Visage, that functions as our API frontend. Visage is the central gateway for all externally originating API traffic. It is responsible for a bunch of things, from authorization to request routing, to (more recently) server-side GraphQL. As such, it has to scale to handle user traffic patterns that are somewhat out of our control.
As an example, a common traffic pattern we see is a “refresh storm.” This occurs when a popular broadcaster’s stream drops due to a blip in their internet connectivity. In response, the broadcaster restarts the stream. This usually causes the viewers to repeatedly refresh their pages, and suddenly we have a lot more API traffic to deal with.
Visage is a Go application (built with Go 1.11 at the time of this change) that runs on EC2 behind a load balancer. Being on EC2 it scales well horizontally, for the most part.
However, even with the magic of EC2 and Auto Scaling groups, we still have the problem of dealing with very large traffic spikes. During refresh storms, we frequently have surges of millions of requests over a few seconds, on the order of 20x our normal load. On top of this, we would see API latency degrade significantly when our frontend servers were under heavy load.
One approach to handle this is to keep your fleet permanently over-scaled, but this is wasteful and expensive. To reduce this ever-increasing cost, we decided to spend some time searching for some low hanging fruit that would improve per-host throughput, as well as provide more reliable per-request handling, when hosts were under load.
Scouting the deck
Luckily we run pprof on our production environments, so getting at real production traffic profiles becomes really trivial. If you are not running pprof, I would highly encourage you do. The profiler, for the most part, has very minimal CPU overhead. The execution tracer can have a small overhead, but still small enough that we happily run it in production for a few seconds each hour.
So after taking a look at our Go application’s profiles, we made the following observations:
At steady state, our application was triggering ~8–10 garbage collection (GC) cycles a second (400–600 per minute).
>30% of CPU cycles were being spent in function calls related to GC
During traffic spikes the number of GC cycles would increase
Our heap size on average was fairly small (<450Mib)
Visage application GC cycles per secondVisage application MiB of heap in use
If you haven’t guessed it already the improvements we made relate to the performance of garbage collection in our application. Before I get into the improvements, below is a quick primer / recap on what GCs are and what they do. Feel free to skip ahead if you’re well versed in the concepts.
What is a garbage collector (GC) ?
In modern applications, there are generally two ways to allocate memory: the stack and the heap. Most programmers are familiar with the stack from the first time writing a recursive program that caused the stack to overflow. The heap, on the other hand, is a pool of memory that can be used for dynamic allocation.
Stack allocations are great in that they only live for the lifespan of the function they are part of. Heap allocations, however, will not automatically be deallocated when they go out of scope. To prevent the heap from growing unbound, we must either explicitly deallocate, or in the case of programming languages with memory management (like Go), rely on the garbage collector to find and delete objects that are no longer referenced.
Generally speaking in languages with a GC, the more you can store on the stack the better, since these allocations are never even seen by the GC. Compilers use a technique called escape analysis to determine if something can be allocated on the stack or must be placed on the heap.
In practice, writing programs that force the compiler to only allocate on the stack can be very limiting, and so in Go, we leverage its wonderful GC to do the work of keeping our heap clean.
Go’s GC
GCs are complex pieces of software so I’ll do my best to keep this relevant.
Since v1.5, Go has incorporated a concurrent mark-and-sweep GC. This type of GC, as the name implies, has two phases: mark and sweep. The “concurrent” just means that it does not stop-the-world (STW) for the entire GC cycle, but rather runs mostly concurrently with our application code. During the mark phase, the runtime will traverse all the objects that the application has references to on the heap and mark them as still in use. This set of objects is known as live memory. After this phase, everything else on the heap that is not marked is considered garbage, and during the sweep phase, will be deallocated by the sweeper.
To summarize the following terms:
Heap size — includes all allocation made on the heap; some useful, some garbage.
Live memory — refers to all the allocations that are currently being referenced by the running application; not garbage.
It turns out that for modern operating systems, sweeping (freeing memory) is a very fast operation, so the GC time for Go’s mark-and-sweep GC is largely dominated by the mark component and not sweeping time.
Marking involves traversing all the objects the application is currently pointing to, so the time is proportional to the amount of live memory in the system, regardless of the total size of the heap. In other words, having extra garbage on the heap will not increase mark time, and therefore will not significantly increase the compute time of a GC cycle.
Based on all of the above, it should seem reasonable that less frequent GC’ing means less marking, which means less CPU spent over time, but what is the trade off? Well, it’s memory. The longer the runtime waits before GC’ing, the more garbage will accumulate in the system’s memory.
As we noted earlier though, the Visage application which runs on its own VM with 64GiB of physical memory, was GC’ing very frequently while only using ~400MiB of physical memory. To understand why this was the case, we need to dig into how Go addresses the GC frequency / memory tradeoff and discuss the pacer.
Pacer
The Go GC uses a pacer to determine when to trigger the next GC cycle. Pacing is modeled like a control problem where it is trying to find the right time to trigger a GC cycle so that it hits the target heap size goal. Go’s default pacer will try to trigger a GC cycle every time the heap size doubles. It does this by setting the next heap trigger size during the mark termination phase of the current GC cycle. So after marking all the live memory, it can make the decision to trigger the next GC when the total heap size is 2x what the live set currently is. The 2x value comes from a variable GOGC the runtime uses to set the trigger ratio.
The pacer in our case was doing a superb job of keeping garbage on our heap to a minimum, but it was coming at the cost of unnecessary work, since we were only using ~0.6% of our system’s memory.
Enter the ballast
Ballast — Nautical. any heavy material carried temporarily or permanently in a vessel to provide desired draft and stability. — source: dictionary.com
The ballast in our application is a large allocation of memory that provides stability to the heap.
We achieve this by allocating a very large byte array as our application starts up:
Reading the above code you may have two immediate questions:
Why on earth would you do that?
Won’t this use up 10 GiB of my precious RAM?
Let’s start with 1. Why on earth would you do that? As noted earlier, the GC will trigger every time the heap size doubles. The heap size is the total size of allocations on the heap. Therefore, if a ballast of 10 GiB is allocated, the next GC will only trigger when the heap size grows to 20 GiB. At that point, there will be roughly 10 GiB of ballast + 10 GiB of other allocations.
When the GC runs, the ballast will not be swept as garbage since we still hold a reference to it in our main function, and thus it is considered part of the live memory. Since most of the allocations in our application only exist for the short lifetime of an API request, most of the 10 GiB of allocation will get swept, reducing the heap back down to just over ~10 GiB again (i.e., the 10GiB of ballast plus whatever in flight requests have allocations and are considered live memory.) Now, the next GC cycle will occur when the heap size (currently just larger than 10 GiB) doubles again.
So in summary, the ballast increases the base size of the heap so that our GC triggers are delayed and the number of GC cycles over time is reduced.
If you are wondering why we use a byte array for the ballast, this is to ensure that we only add one additional object to the mark phase. Since a byte array doesn’t have any pointers (other than the object itself), the GC can mark the entire object in O(1) time.
Rolling out this change worked as expected — we saw ~99% reduction in GC cycles:
Log base 2 scale graph showing GC cycles per minute
So this looks good, what about CPU utilization?
Visage application CPU utilization
The green sinusoidal CPU utilization metric is due to the daily oscillations of our traffic. One can see the step down after the change.
~30% reduction in CPU per box means without looking further, we can scale down our fleet by 30%, however what we also care about is API latency — more on that later.
As mentioned above, the Go runtime does provide an environment variable GOGC that allows a very coarse tuning of the GC pacer. This value controls the ratio of growth the heap can experience before the GC is triggered. We opted against using this, as it has some obvious pitfalls:
The ratio itself is not important to us; the amount of memory we use is.
We would have to set the value very high to get the same effect as the ballast, making the value susceptible to small changes in live heap size.
Reasoning about the live memory and its rate of change is not easy; thinking about total memory used is simple.
For those interested, there is a proposal to add a target heap size flag to the GC which will hopefully make its way into the Go runtime soon.
Now onto 2. Won’t this use up 10Gib of my precious RAM? I’ll put your mind at ease. The answer is: no it won’t, unless you intentionally make it. Memory in ‘nix (and even Windows) systems is virtually addressed and mapped through page tables by the OS. When the above code runs, the array the ballast slice points to will be allocated in the program’s virtual address space. Only if we attempt to read or write to the slice, will the page fault occur that causes the physical RAM backing the virtual addresses to be allocated.
We can easily confirm this with the following trivial program:
We’ll run the program and then inspect with ps:
This shows just over 100MiB of memory has been allocated virtually to the process — Virtual SiZe (VSZ), while ~5MiB has been allocated in the resident set — Resident Set Size(RSS), i.e physical memory.
Now let’s modify the program to write to half of the underlying byte array backing the slice:
Again inspecting with ps:
As expected, half of the byte array is now in the RSS occupying physical memory. The VSZ is unchanged since the same size virtual allocation exists in both programs.
For those interested, the MINFL column is the number of minor page faults — that is the number of page faults the process incurred that required loading pages from memory. If our OS managed to allocate our physical memory nice and contiguously, then each page fault will be able to map more than one page of RAM, reducing the total number of page faults that occur.
So as long as we don’t read or write to the ballast, we can be assured that it will remain on the heap as a virtual allocation only.
What about the API latency?
As mentioned above, we saw an API latency improvement (especially during high load) as a result of the GC running less frequency. Initially, we thought this may be due to a decrease in GC pause time — this is the amount of time the GC actually stops the world during a GC cycle. However, the GC pause times before and after the change were not significantly different. Furthermore, our pause times were on the order of single digit milliseconds, not the 100s of milliseconds improvement we saw at peak load.
To understand where this latency improvement came from, we need to talk a bit about a feature of the Go GC called assists.
GC assists
GC assists puts the burden of memory allocation during a GC cycle on the goroutine that is responsible for the allocation. Without this mechanism, it would be impossible for the runtime to prevent the heap growing unbound during a GC cycle.
Since Go already has a background GC worker, the term assist, refers to our goroutines assisting the background worker. Specifically assisting in the mark work.
To understand this a bit more, let’s take an example:
When this code is executed, through a series of symbol conversions and type checking, the goroutine makes a call to runtime.makeslice, which finally ends up with a call to runtime.mallocgc to allocate some memory for our slice.
Looking inside the runtime.mallocgc function shows us the interesting code path.
Note, I’ve removed most of the function and just showing the relevant parts below:
In the code above, the line if assistG.gcAssistBytes < 0 is checking to see if our goroutine is in allocation debt. Allocation debt is a fancy way of saying that this goroutine was allocating more than it was doing GC work during the GC cycle.
You can think of this like a tax that your goroutine must pay for allocating during a GC cycle, except that this tax must be paid upfront before the allocation can actually happen. Additionally, the tax is proportional to the amount the goroutine is attempting to allocate. This provides a degree of fairness such that goroutines that allocate a lot will pay the price for those allocations.
So assuming this is the first time our goroutine is allocating during the current GC cycle, it will be forced to do GC assist work. The interesting line here is the call to gcAssistAlloc
This function is responsible for some housekeeping and eventually calling into gcAssistAlloc1 to perform the actual GC assist work. I won't go into the details of the gcAssistAlloc functions, but essentially it does the following:
Check that the goroutine is not doing something non pre-emptible (i.e., the system goroutine)
Perform GC mark work
Check if the goroutine still has an allocation debt, otherwise return
Goto 2
It should now be clear that any goroutine that does work that involves allocating will incur the GCAssist penalty during a GC cycle. Since the work has to be done before the allocation, this would surface as latency or slowness on the actual useful work the goroutine is intending to do.
In our API frontend, this meant that API responses would see increased latency during GC cycles. As mentioned earlier, as load increased to each server, memory allocation rate would increase, which would in turn increases the rate of GC cycles (often to 10s or 20s of cycles/s). More GC cycles, we now know, means more GC assist work for goroutines serving the API, and therefore, more API latency.
You can see this quite clearly from an execution trace of our application. Below are two slices from the same execution trace of Visage; one while the GC cycle was running and one while it was not.
Execution trace during a GC cycle
The trace shows which goroutines are running on which processor. Anything labeled app-code is a goroutine running useful code for our application (e.g., logic to serve an API request). Notice, how besides the four dedicated procs running the GC code, our other goroutines are being delayed and forced to do MARK ASSIST (i.e.runtime.gcAssistAlloc) work.
Profile from same application as above, not during a GC cycle
Contrast that with this profile from the same running application not during a GC cycle. Here, our goroutines are spending most of their time running our application code as expected.
So by simply reducing GC frequency, we saw close to a ~99% drop in mark assist work, which translated to a~45% improvement in 99th percentile API latency at peak traffic.
You may be wondering why Go would choose such a strange design (using assists) for its GC, but it actually makes a lot of sense. The GC’s main function is to ensure that we keep the heap to a reasonable size and don’t let it grow unbound with garbage. This is easy enough in a stop-the-world (STW) GC, but in a concurrent GC, we need a mechanism to ensure that the allocations happening during the GC cycle don’t grow without bound. Having each goroutine pay the allocation tax proportional to what it wants to allocate in the GC cycle is a pretty elegant design in my opinion.
For a really comprehensive write up of this design choice, see this Google Doc.
In (sweeping) summary
We noticed our applications were doing a lot of GC work
We deployed a memory ballast
It reduced GC cycles by allowing the heap to grow larger
API latency improved since the Go GC delayed our work less with assists
The ballast allocation is mostly free because it resides in virtual memory
Ballasts are easier to reason about than configuring a GOGC value
Start with a small ballast and increase with testing
Some final thoughts
Go does a great job of abstracting away many runtime specific details from the programmer. This is great and probably works really well for most programmers and applications.
When you start pushing the boundaries of your application environment, be it compute, memory, or IO, there is no substitute for lifting up the hood, taking a look around, and figuring out why the engine is not running efficiently.
When you need to do this, and you probably will, it sure helps to have a set of tools like the ones Go provides that let you discover the bottleneck quickly.
Acknowledgements
I’d like to thank Rhys Hiltner for his invaluable help in investigating and digging into many Go runtime and GC intricacies. Also thank you to Jaco Le Roux, Daniel Bauman, Spencer Nelson, and Rhys again, for help editing and proofreading this post.
The 2019 Generation adidas Cup is the premier youth soccer tournament in North America, and it’s coming to Twitch from April 13–20.
The world’s future soccer stars from 14 countries are meeting in Dallas, Texas for two U-17 division championships (Premier and Champions) and a U-15 showdown featuring teams from MLS and Liga MX. While there will be tons of talent on display all week, here are 10 players you should keep an eye on.
Are you a streamer interested in co-streaming the tournament?
Co-streaming is enabled for the entire tournament, and everyone is invited to give it a spin. For those who haven’t tried it yet, co-streaming is a great way to mix up your usual content and connect with your community in a new way. Co-streaming can also help you grow your audience and attract new viewers who enjoy soccer.
Sign up to co-stream and you’ll be featured in the MLS co-streaming extension on the official MLS channel. Be sure to tag your stream with ‘Co-Stream’ and ‘GACup’ so you show up in the extension.
Just want to watch the games?
Great! You can tune in to the MLS broadcast at /mls and /mls2, or you can choose to watch the Twitch Partners and Affiliates who are co-streaming the tournament.
A list of participating clubs and full schedule for all three divisions can be found here. If you’re new to the game, here’s a list of key matchups to check out:
Saturday, April 13
1:30 PM ET — LA Galaxy vs. Peñarol
Peñarol, one of the most storied clubs in South America that produced current LAFC striker Diego Rossi, makes their GA Cup debut against MLS powerhouse LA Galaxy.
3:15 PM ET — FC Dallas vs. West Ham United
FC Dallas always does a great job at attracting a crowd for any match they have at GA Cup, and this should be no exception.
Sunday, April 14
11:45 AM ET — Seattle Sounders vs. Valencia
Seattle Sounders won the Premier Division championship last year after missing out on the Champions division by a point. They are the clear-cut favorite to compete for the Champions crown this year, but with Flamengo in their group, this is a must-win for Seattle.
6:45 PM ET — NYCFC vs. River Plate
NYCFC has been one of the most entertaining teams to watch at GA Cup in the last few years, and have a high potential to feature a select number of MLS signed players including Joe Scally.
Wednesday, April 17
10:00 AM ET — LAFC vs. Cruz Azul
Although LAFC only has their academy built out up to the U-15 age range, they have quickly risen to the top of that age group. It will be fun seeing how LAFC stack up against ‘La Maquina’ in the first match of our unique Liga MX vs. MLS head-to-head competition.
1:30 PM ET — Vancouver Whitecaps vs. Deportivo Toluca
The Whitecaps academy has gotten a ton of praise in the last few years for their development of Alphonso Davies. As they have not participated in GA Cup in the past, the ‘Caps are a great showcase for how Canada is producing great talent for their country.
View the full Generation adidas Cup schedule here.
Today the very first TwitchCon Europe kicked off in Berlin and at the Keynote our CEO, Emmett Shear took to the stage. He highlighted community accomplishments from the past year and also announced upcoming features, all designed to help creators grow their audience on Twitch, connect with them, and thrive with more ways to earn a living doing what they love.
Here’s a rundown of everything that was announced.
Grow
We want every part of Twitch to help talented creators get discovered by new viewers who we know will love their content.
Improved Search: We’re starting a multi-year effort to rebuild our search capabilities from the ground up with live content in mind. In the coming months you’ll start to see smarter and faster results, auto-completion and suggestions, the ability to select from past searches, and a new search results page. Updates will be starting in June and getting better throughout the year.
Directory Sorting: Right now the directory is sorted by highest to lowest viewership. We’ve heard that you wanted more options. So, starting this June, you’ll be able to sort the Directory by lowest to highest viewers, most recently started streams, or by channels we think will be most relevant to you.
Recaps: Highlights are a great way for new viewers to get introduced to a creator, and we want to make creating them even easier. So this June, we’ll be rolling out a new Recaps feature that generates automated highlights at the end of a stream. We’re launching Recaps using data from Clips, and over time, will look at additional signals to make them even smarter. You can share them with one click or make edits to get them just right.
Twitch Rivals: This season of Twitch Rivals will feature over 120 events with new genres, formats, interactive extensions, and millions of dollars in prize money. We want creators to have more opportunities to showcase what they’re best at or passionate about so check out rivals.twitch.tv to see what’s been announced and if you don’t see a game or genre that you’d love to watch tell us about it.
Connect
Community is what makes Twitch so much different than anywhere else online. We want to give everyone more creative ways to connect.
Twitch Sings is Available for Everyone: A completely new way to connect with your community around music, Twitch Sings is how Twitch does karaoke. You can sing solo, duet with your community, and get chat involved with song requests, fun challenges, and cheer activated light shows. After a successful beta run, Twitch Sings has officially launched and is available for download on PC right here. Get out there and show us what you got.
Thrive
Streaming is hard work that requires commitment and talent. We want everyone to have more and better ways to get rewarded for that hard work.
Bounty Board Expands: Since Bounty Board launched in the United States last year, more than 1,500 creators have earned over $2million by linking up with sponsors right from their dashboards. We’re excited to have announced that starting in May, Bounty Board will be available to Partners and select Affiliates in France, Germany, and the United Kingdom with more countries around the world joining them soon.
Net 15 Payouts: Starting April 15, 2019, Twitch will start paying out eligible Partners, Affiliates, and Extension Developers 15 days after the end of the month, as long they meet the $100 payout threshold. Previously payouts were made on a 45 day schedule and we’re excited to help you get rewarded for your hard work faster than ever before.
Path of Exile and Twitch Prime have teamed yet again up to bring you the Purple Divine Sign, Purple Skull Helmet and Lavender Weapon effect for free with your Twitch Prime membership! Until May 23rd you’ll be able to redeem these free cosmetic effects and in the coming months you’ll be able to claim even more loot; so take to the battlefield in style!
Twitch Prime benefits include free games, in-game loot and a Twitch channel subscription every month PLUS all the benefits of being an Amazon Prime member. See all the Twitch Prime benefits here.
Check out the full list of Amazon Prime benefits in: US, UK, Canada, Germany, France, Austria, Belgium, Italy and Spain. You can try it for free for 30 days right here, and when you do, you unlock access to all Twitch Prime benefits just by linking your Twitch account to your Amazon Prime account.
We’re celebrating the third anniversary of the launch of Food & Drink on Twitch with a full day of some of the sweetest culinary activities this Friday, April 26. Join us as we cook, bake, and salud with some of your favorite streamers, and join in the fun by cooking along and tweeting your creations to us @Twitch and tagging us on Instagram.
Bake a Cake with Twitch! was originally published in Twitch Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.
What an incredible start to our 2019 Twitch Developer Tour!
We traveled to four countries where we met tons of awesome developers and members of the TwitchDev community.
We’d like to thank everyone that came out to join us in Tel Aviv, Berlin, Paris, and London!
We’d also like to thank all of our partners, including StreamElements, Hypetalk, Wargaming, Bossa Studios, Altoar, Ubisoft, and Jagex. As well as the community meetup organizers that partnered with us in each region — GameIS in Tel Aviv, gamesweekberlin, Indie Game Developer Group Paris, and BAME in Games in London.
For those of you who were not able to join us on tour, you can read more about each event and stay tuned as we are excited to be announcing more cities very soon!
Tel Aviv
Gil Megidish joined us from HypeTalk andReem Sherman from StreamElements to give insightful talks about how they integrate with Twitch. We had a packed house in Tel Aviv, and enjoyed awesome views from the AWS office and the city’s warm weather!
Berlin
In Berlin Christian Bergmann and Zoltan Sipos joined us from Wargaming, Ricardo Rego from Bossa Studios, and James Van Eden — Altoar. (If you don’t already know Altoar, check out his awesome Extension success story now!)
We had such a great time hosting our Dev event in Berlin with TwitchCon Europe and partnering with gamesweekberlin. We really felt the love from the whole Twitch community, and can’t wait for TwitchCon North America in September.
Paris
In Paris, Sebastien Domergue from Ubisoft spoke about the benefits of integrating with Twitch. We really enjoyed hearing from him as well as others in the region on what they currently do with TwitchDev. Also, check out our super cool event space, inside Mozilla, Paris!
London
We closed out our first leg of the 2019 tour in London at our EU HQ with Neil McLarty from Jagex, Deborah Mensah-Bonsu from Space Ape Games, andNicki Klein from Amazon Web Services.
We heard three very different talks about different aspects of Twitch and different ways these teams have worked with Twitch and TwitchDev. It was so cool to have everyone in the Twitch office to connect with our speakers, staff, and partners.
We are excited to be coming to a city near you; stay tuned as we announce new tour cities in the near future.
Until then, let us know what you think by connecting with us @TwitchDevon Twitter, in thedeveloper forums, or on our live broadcasts(follow us for notifications when we’re live).
Ready to build interactive experiences on Twitch? Start now!
Twitch Developer Tour Roundup was originally published in Twitch Blog on Medium, where people are continuing the conversation by highlighting and responding to this story.
May is Mental Health Awareness Month in the United States, but today we’re talking to streamers everywhere.
Streaming on Twitch can be a fulfilling career or hobby — an outlet to share your passions and connect with people all around the world. Your energy is what makes Twitch home for millions of people, but putting yourself out there can sometimes come with mental health challenges. Recognizing and addressing those challenges has been, and will always be, one of our top priorities.
Mental health can be a difficult topic to broach, so this month we’ve partnered with The National Alliance on Mental Illness to bring you 5 mental health tips for content creators. From setting a schedule to finding support groups, the tips below are a great place to begin taking care of yourself or helping others.
And as always, our Mental Health Support & Information page is a great resource for hotlines specializing offering support around depression, self-harm, substance abuse, eating disorders, and more.
5 Mental Health Tips for Online Content Creators By Ross Kerr, The National Alliance on Mental Illness
Creating content and connecting with an online audience presents unique challenges. The level of consistency and engagement required to maintain your brand and following can be demanding. It can also be difficult to navigate between personal and work life when they are so often mixed. Aspects of the work that usually bring personal fulfillment may at times feel like a stressful, overwhelming grind.
If you feel the stress you’re facing is negatively affecting you, there are ways you can improve your mental health.
Connect with Social Supports
Life doesn’t have to be single-player — and it shouldn’t be. Connection is such an important aspect of mental health. Reaching out to others who have shared experiences can help build a network of support and fight loneliness. Another approach is seeking out a mentor who understands the unique challenges of what you do. This person can be a listening ear when times are hard. They can help you overcome difficult situations and feel more equipped for the challenges ahead.
Establish Set Coping Methods
There may be days when your internet connection slows down to a halt or a piece of content you just made accidentally gets deleted. Situations like this can make anyone feel frustrated. It’s important to consider your coping skills for when things don’t go as planned. Coping skills such as deep breathing, reading or exercise can help you release stress and gain perspective on these tough moments.
Set Your Office Hours
Content creation often means working long hours. There’s no one telling you to go home, especially since you are most likely already at home. Setting definitive work hours can help you create a structure that allows for time to unplug, which can significantly reduce stress. It can also help you to feel more refreshed during your set work hours. And as a bonus, having a regular schedule where your audience can expect you to livestream or post content can also contribute towards building an engaged community.
Prioritize a Hobby
For many working in this space, their hobby has turned into a career. But it’s important to have a positive outlet that doesn’t have the pressure of a career, something that is just for fun and just for you. Pursuing new hobbies or making time for old ones can provide a much-needed distraction. Whether it’s playing “Magic: The Gathering” at the local comic shop or going rock climbing, the change of focus can help take your mind off work-related stress.
Take A Break
If you find yourself pushing through every day and feeling less inspired or overwhelmed: take a break. Whether it’s 30 minutes to get a breather or a week-long vacation, breaks are essential. Work can be hard, but it shouldn’t be painful. While there can be pressure to stay connected in order to build or maintain a following, it’s not as important as your mental health, and you need to set your own limits. Also, taking a step back gives you the opportunity to evaluate what you can change to feel better long-term.
Keep in mind that experiencing these challenges is not a failure. You should never blame yourself for having concerns about your mental health. And whether these challenges are a part of your full-time job or a side gig after work, you are not facing them alone.
The National Alliance on Mental Illness, is the nation’s largest grassroots mental health organization dedicated to building better lives for the millions of Americans affected by mental illness.
The Borderlands 3 ECHOcast Extension is driving viewer engagement & building pre-sale buzz months before launch
It’s getting harder and harder to break through the noise and build quality buzz in the months leading up to a games’ launch. Gone are the days when a trailer, high-res screenshot, or a basic gameplay reveal event could drive the type of organic sharing, conversation, or engagement that it might have in years past.
These days, new and highly innovative pre-launch awareness tactics are not merely welcomed but required — and that’s where Twitch and Extensions come in.
Last week, a select group of Twitch streamers had the opportunity to participate in a Borderlands 3 Gameplay Reveal Event, but what made this reveal more buzzworthy and interactive than your typical gameplay reveal event was the accompanying Twitch Extension.
Stay tuned as literally hundreds of your favorite streamers play #Borderlands3 for the first time. Watch live at https://t.co/7iButjDoDj and https://t.co/qfFciTSVll! With the ECHOcast Twitch extension you'll have a chance to score in-game loot!
The Borderlands 3 ECHOcast Twitch Extension allows viewers to be an active part of the event where historically they could only sit back and watch. The feature-heavy Extension gives viewers the ability to learn key game skills and techniques by inspecting the contents of the streamers’ backpack, explore their loadout, and study their skill tree.
Taking it a step further, if viewers connect their Twitch and Gearbox SHiFT accounts — they are able to gain in-game loot and grab rare items, giving them a head start on assembling their own arsenal, while also building personal investment and motivation to purchase the game come its September release.
Not all who view the rare chest discovery on stream are winners of the rare items, the Extension coordinates a randomized drawing giving only a portion of the viewers the take-home, which undoubtedly keeps viewers watching and engaging longer.
“Streaming has become an important part of the game industry and as game developers, we should consider how our game designs leverage streaming both before and after launch. Twitch provides an endless amount of opportunities for us to build streamer and viewer features, some of which they might not have even realize they want until they use them!”
-Scott Velasquez, Lead Online & Social Developer at Gearbox
Based on the wildly active Twitch Chat, it was clear the viewers enjoyed the Extension — but what do streamers think of the interactive experience? Here’s a clip of King Gothalion giving his own unfiltered feedback (spoiler alert; he’s a fan.)
More and more game publishers are putting additional time, effort, and creativity into their pre-launch building buzz phaseto capture that much-needed element of viewer engagement and participation — and that’s where Twitch is very comfortably positioned to be utilized.
Looking for other tips or ideas for launching your game on Twitch? Check out our Game Developer Playbook for all that and much more.
Help Cure Cancer, End Hunger, Raise Awareness with Charity in Extensions
Twitch is proud to recognize three very special Extensions supporting charitable causes on your favorite broadcasters’ streams throughout 2018 and 2019.
Tiltify Donations, DonorDrive’s AFSP Charity Fundraising, and Gamers Beat Cancer by GameChanger unlock the power of Twitch community to drive more donations to charity through engaging and interactive experiences in Extensions. Make the world a better place just by streaming and using Extensions in support of charity.
Tiltify Donations
Take Tiltify, our flagship charity partner for Twitch Extensions.
Leveraging Amazon Pay, they built the first version of a panel Extension that lets broadcasters set up a drive for a cause and track donation progress over time.
A new version of Tiltify Donations adds broadcaster rewards, challenges, and polls to drive more awareness and support from broadcasters’ audiences during a fundraising event.
Tiltify is currently raising funds for St Jude Play Live, a prize month fundraiser, through May 31.
Additionally, May 18 is Tiltify’s official Red Nose Day’s Nose Bowl where Broadcasters and celebrities will join forces between 12PM PST and 5PM PST to raise funds to end child poverty.
“Tiltify was created specifically to help streamers maximize their charity fundraising. We have proudly been used by the streaming community since 2014 and work with over 600 charities in seven countries. We’re available for any of your favorite charities with no sign up fee.” — Tiltify CEO Michael Wasserman
“The Extension essentially activates an Extra Life-themed channel badge that’s connected to the content creator’s fundraising page. [It] allows viewers to donate directly to their local children’s hospital without ever having to leave Twitch. This Twitch Extension is literally saving kids’ lives by connecting Twitch’s passionate community with seamless donation technology!” — Mike Kinney, Managing Director of Digital Fundraising and Children’s Miracle Network
DonorDrive plans to launch support for more charities throughout 2019.
GameChanger
Last but never least is GameChanger. Their most recent drive for American Cancer Society raised tens of thousands of dollars and plenty of awareness for the organization’s sweeping efforts across the United States to raise funds to end cancer.
The developer has big plans for more events in 2019, and you can get behind them with just one click in the GameChanger Charity Extension.
Ready to build interactive experiences like these Extensions on Twitch? Start now!
Crunchyroll, the world’s most popular anime brand, is teaming up with Twitch Prime to offer members a special loot offering — 30 days of Crunchyroll Premium for free! This Crunchyroll offering will be the first-ever non-gaming loot available for Twitch Prime members! Be sure to get in and grab yours before it’s gone.
Twitch Prime benefits include free games, in-game loot and a Twitch channel subscription every month PLUS all the benefits of being an Amazon Prime member. See all the Twitch Prime benefits here.
Check out the full list of Amazon Prime benefits in: US, UK, Canada, Germany, France, Austria, Belgium, Italy and Spain. You can try it for free for 30 days right here, and when you do, you unlock access to all Twitch Prime benefits just by linking your Twitch account to your Amazon Prime account.
Twitch Prime and Riot Games are teaming up to offer Twitch Prime members four months’ worth of content for League of Legends, beginning today.
Starting today, Prime members can visit twitch.amazon.com/leagueoflegends to claim a Rift Herald’s Capsule containing two random Skin Shards, one random Legendary Skin Shard, and an exclusive Emote. Once members claim the first capsule, they’ll automatically receive another one every 30 days for four months: A Rift Herald’s Capsule, Red Buff’s Capsule, and Blue Buff’s Capsule, followed by a Baron’s Capsule. The final capsule contains a random Permanent Legendary Skin on top of another random Skin Shard and exclusive Emote.
“League of Legends has been one of the most-watched games on Twitch for years, and partnering with Riot to offer four months’ worth of League of Legends loot to members is the kind of amazing content we get really excited about,” said Larry Plotnick, Director, Twitch Prime. “We’re striving to make Prime the absolute best deal in gaming, and we’re off to a big start in 2019 — we’ve already offered our members more than $900 worth of games and content this year. And that’s just the beginning. Stay tuned, because there’s a lot more goodness coming this summer.”
Prime members have until Aug. 28, 2019 to claim their first capsule and enroll in the promotion. Visit www.twitchprime.com to try Twitch Prime for free and claim the latest offers.
What is Twitch Prime?
Twitch Prime is Amazon Prime’s home for gamers, and is included with Prime. Benefits include in-game loot, free games, a free monthly channel subscription on Twitch AND all the benefits of being a Prime member — including unlimited access to award-winning movies and TV episodes with Prime Video; unlimited access to Prime Music, Prime Reading, Amazon Photos; early access to select Lightning Deals, one free pre-released book a month with Amazon First Reads, deep discounts at Whole Foods Market, and unlimited free two-day shipping on more than 100 million items.
You can try it free right here, and when you do, you get all the Twitch Prime benefits instantly just by linking your Twitch account to your Amazon account.
If you’re building an Extension, these features can encourage streamers to adopt your Extension
Twitch Extensions capture the power of the streamer and viewer relationship with a wide range of interactions never before possible on Twitch. In the two years since launch, we’ve seen a set of best-in-class features emerge for driving more interactions and installations.
First, you need to build a great Extension. Make your design one that drives interaction and engagement between streamers and viewers and solves real challenges the Twitch community faces every day.
Next, add features that support streamers in viewers in their quest to interact in meaningful ways on Twitch. Here are nine you need to know about:
Streamers want to know how an Extension works and what it will look like on their channel, because they care a lot about what their community experiences. Since you can’t upload videos to the Discovery Manager, one of the best ways to educate streamers who are interested in installing your Extension is to include a GIF that shows how the Extension will work for viewers.
GIFs are also a helpful way to communicate the live dashboard and configuration experiences for the streamer.
Knowing exactly how to install and set up the Extension, any browser sources required for broadcasting software, and any associated applications to maximize the value of the experience is crucial for getting a streamer to activate your Extension.
Developers such as Altoar with Sound Alerts and Hype Network with Say It Live have added configuration page setup guides and “Help” tabs, so that streamers fully understand how to set up things correctly at the moment of installation.
User feedback is extremely important for gathering information from viewers and streamers to make your Extension better, so make it very easy for your users to contact you.
We suggest adding a “feedback” button or link within the Extension or in a help tab in the streamer configuration page.
The reason you would use a browser source in OBS instead of displaying visuals in the Extension itself is that content in a browser source becomes a shared experience and becomes part of the video recording.
Displaying in the Extension allows for custom visualizations for each viewer, but since an Extension runs on top of the player, this content does not become part of the video for later viewing.
Developers can also create custom animations that can be shown on stream whenever an action is completed, which helps viewers engage more and garner the attention of the streamer.
Chat integration is important because broadcasters want to recognize viewer participation — getting a callout from a streamer is a big reason why viewers subscribe or cheer with Bits on stream.
Whenever a special action is completed, the Extension can post to Chat to both acknowledge the user and draw more attention to the Extension.
Considering much of the current Twitch viewership base is mobile, having mobile versions of Extensions is a crucial part of extending their reach to as many users as possible.
Enabling an Extension for mobile devices is easy; simply add another HTML view to those you already created for the Extension.
For iOS, Extensions developers will have to register for the Apple Developer Program.
Every streamer on Twitch has a different personality, stream format, color scheme, and community. A streamer’s brand is very important to them and because variability is so wide, building in customization tools for an Extension gives your Extension an advantage to scale to a wider audience.
Twitch is international. Streamers stream from all over the world, viewers watch from all over the world, and people use Extensions from all over the world. Viewers can set their language preference on Twitch, and you can detect this through the query parameters and localize your Extension accordingly.
Pricing customization involves two levels of implementation: streamer-side pricing features and viewer-side pricing features.
The streamer-side features should include default pricing suggestions based on similar channel sizes as well as a way for the streamer to define what the pricing of each Bits-related action should be on their channel. Lastly, streamers should be able to set pricing minimums on Bits-related actions for their channel.
The viewer-side features should include a default suggestion for initial Bits usage, but can also include a user interface that allows viewers to choose their own amount. An example of this feature is the Pretzel Rocks Bits calculator, where viewers can collectively compete with each other to make sure their track plays next.
Honorable-mention features for Bits-enabled Extensions
Streamer-side Bits Insights
For Bits-enabled Extensions, you’re more likely to get greater adoption by helping streamers understand what will probably get the most Bits usage. However, it’s not totally necessary for your first Bits-enabled Extension version. A great example of insights for streamers is how Sound Alerts displays sounds by popularity in the configuration view, so they can make informed decisions about which sounds may receive more Bits usage within the Extension.
Extensions now have the Extensions Emotes API, which is now in beta for developers! If you want to integrate Partner, Channel, or Global Twitch Emotes into your Extension, fill out this form and the Emotes team can help you get started!
Have an idea you’d like to explore for an Extension?Start now!