Schlagwort: extension

  • Fireworks! A Sample Extension Using Bits

    Fireworks! A Sample Extension Using Bits

    Reading Time: 5 minutes
    Braxton Lancial

    It’s always a good time for fireworks! And fireworks are even better when they’re digital and in a Twitch Extension. Recently we published a new sample Extension on the GitHub, which allows viewers to exchange Bits for an immaculate fireworks display in a video overlay. It leverages several of our Bits-in-Extension APIs, the Extension Configuration Service, and a lightweight Extension Backend Service. If you’re interested in how we built this Extension, and want to learn more about what tools Twitch offers to enable you to build a similar Extension yourself, you’re in the right place.

    Bits in Extensions enable you to build and manage a catalog of items and experiences in which viewers can exchange Bits. We provide a helper function to prompt the Bits transaction flow, and our callbacks allow your Extension to react accordingly to a transaction. The first step to manage your catalog of offerings for viewers is setting up the SKUs that will be included in your catalog. SKUs can be setup using the Developer Rig. After creating a new project or opening an existing project in the Developer Rig, you can navigate to the “Monetization” section on the left, and then click the “Live Products” tab. Here you can add new products as well as manage items after they’ve been created. In this example we’ve created two items — a Small Fireworks item at an amount of 10 Bits, and a Large Fireworks item at an amount of 100 Bits.

    Another useful feature utilized in this sample is the Configuration Service. This service enables developers to store Extension-specific and channel-specific data. In our fireworks example, we allow broadcasters to select one of two items they would like to be available to exchange for Bits — either Small Fireworks, or Large Fireworks. Upon selection, the configuration page saves that selection into the broadcaster configuration service segment. This choice ultimately determines what SKU will be presented to viewers. The Extension retrieves this broadcaster configuration and displays a button allowing viewers to exchange Bits for the selected SKU. While simple, this is an example of how easy it can be to empower broadcasters to tailor the Extension experience to their liking within your predetermined boundaries.

    function saveSettings() {
    var radioBtns = document.getElementsByName('firework');
    for (var i = 0, length = radioBtns.length; i < length; i++) {
    if (radioBtns[i].checked) {
    twitch.configuration.set("broadcaster", "", radioBtns[i].id);
    log("saveSettings() fired, broadcaster-selected sku set to: " + radioBtns[i].id);
    break;
    }
    }
    }

    We’ve set up our SKUs, we’ve implemented the Configuration Service to manage our catalog per broadcaster, now we’re ready for viewers to actually exchange their Bits for some digital fireworks. There are a variety of APIs and callbacks available through the Extension Helper relevant to the Bits transaction flow. In our sample, our overlay presents a very simple interface which presents a button to the viewer that reads “Launch Fireworks!”. When a viewer clicks this button, we call the useBits(SKU) method from the Twitch helper. This method kicks off the Bits transaction flow for the specified SKU from your catalog. If the viewer does not have enough Bits in their account, they’ll be led to the Bits purchasing interface, giving the viewer an opportunity to purchase more Bits and move forward with the transaction. Assuming the viewer already does have enough Bits or has just purchased enough, they’ll be prompted with a confirmation dialog box.

    useBits = function () {
    if (sku == "") {
    log("no sku received from the configuration svc");
    return;
    }
    twitch.bits.useBits(sku);
    }

    In our example, if the viewer selected Small Fireworks, they will be asked to confirm exchanging 10 of their Bits. If the viewer selected Large Fireworks, they will be asked to confirm exchanging 100 of their Bits. At this point the user will either confirm or cancel the transaction. Both options invoke callbacks from the Twitch helper so you can handle their decision accordingly. We only care about handling the scenario where the user has successfully confirmed exchanging their Bits for (digital) fireworks. When the user completes this transaction, the onTransactionComplete(transaction) callback function is invoked.

    twitch.bits.onTransactionComplete(function (transaction) {
    log("onTransactionComplete() fired, received transactionReceipt: " + transaction.transactionReceipt);

    fetch("https://localhost:8080/api/fireworks", {
    method: "POST",
    headers: {
    "Authorization": "Bearer " + transaction.transactionReceipt,
    "Content-Type": "application/json",
    },
    body: JSON.stringify({ channelId: channelId })
    }).then(function (response) {
    if (response.ok) {
    log("ebs validated transaction")
    }
    else {
    log("ebs was unable to validate transaction")
    }
    });
    });

    twitch.listen('broadcast', function (topic, contentType, sku) {
    log("listen() fired, received sku via PubSub: " + sku + ". Shooting Fireworks!");
    launchFireworks(sku);
    });

    Here we do a quick validation with our backend (more on that later), which eventually invokes the listen() callback via PubSub. Now we can finally shoot off our beautiful display of pixelated fireworks on the overlay. Bits transaction complete!

    While the interface of the Extension and the fireworks themselves are the more exciting parts, the dirty work still has to be done somewhere. This is where our Extension Backend Service comes into play (EBS for short). Most (but not all) Extensions require some sort of backend to operate. In this sample, our EBS verifies the validity of a Bits transaction by verifying its Javascript Web Token (JWT), then sends out the purchased Bits SKU via PubSub.

    Verifying a JWT with Go

    We chose to write our EBS in Go, as Go is a very lightweight way of quickly spinning up a backend. Our Go server must be running before our frontend can interact with it. Once it is, you can see our frontend routes our request to the API endpoint we’ve configured at https://localhost:8080/api/fireworks. This endpoint requires a Bearer Token as an Authorization Header (which will come from the transaction receipt field), as well as a channelId (the broadcaster’s Twitch user id). Our EBS uses a JWT library to parse the token we received from the transaction to ensure this request is coming from our Extension on Twitch. If it arrives at that confirmation, we respond with a 200 status and continue.

    Using PubSub with our own JWT

    We now need to create our own signed JWT, so when we send our PubSub message, Twitch knows it is coming from us. We can do this easily as seen in the newJWT(channelID string) function, by again utilizing the JWT library (most languages have solid JWT libraries that will make your life easier). After generating our own token, we can broadcast a message through PubSub by hitting the messages endpoint, and specifying what channel the message should be sent to. Using PubSub allows us to send a message to all Extension client instances in a specified channel all at once. This is what ultimately triggers the listen() method from the Twitch Helper on the frontend, and will shoot off our fireworks.

    // newJWT creates an EBS-signed JWT
    func (s *service) newJWT(channelID string) string {
    var expiration = time.Now().Add(time.Minute * 3).Unix()

    claims := jwtClaims {
    UserID: s.ownerID,
    ChannelID: channelID,
    Role: "external",
    Permissions: jwtPermissions {
    Send: []string{"broadcast"},
    },
    StandardClaims: jwt.StandardClaims {
    ExpiresAt: expiration,
    },
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) tokenString, err := token.SignedString(s.secret)
    if err != nil {
    log.Println(err)
    }
    log.Printf("Generated JWT: %s\n", tokenString) return tokenString
    }

    Our Extension Backend Service has now validated the JWT from the incoming request to verify it was coming from our frontend, it has created its own JWT to send back to Twitch, and it has sent a PubSub message to the channel the request originally came from. Our EBS’s work here is done.

    Hopefully this Extension sample can help kickstart your Bits-enabled Extension development. Extensions come in many different flavors, so for more examples using other frameworks and languages, check out TwitchDev on GitHub. Visit the Twitch Developer site to begin developing your Twitch Extension. Happy building!

    Website: LINK

  • Charity Extensions: making the world a better place one stream at a time

    Charity Extensions: making the world a better place one stream at a time

    Reading Time: 3 minutes

    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

    DonorDrive

    DonorDrive joins us supporting the American Foundation for Suicide Prevention and Children’s Miracle Network via the Extra Life Charity Leaderboard. Featuring mobile donation support on iOS and Android, both of these Extensions showcase which broadcasters raised the most during a drive for their charity.

    “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!

    Website: LINK

  • Twitch Extension Challenge: And the winners are…

    Twitch Extension Challenge: And the winners are…

    Reading Time: 4 minutes

    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. 🦄)

    People’s Choice

    Warp Post, created by Matt Jakubowski

    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.

    Honorable Mentions

    Cardboard.live IR Next, created by James Hsu, Sławomir, Pruchnik, Wilson Hunter

    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, created by Scott Garner

    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, created by alondanoch

    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!

    Third Place

    Chat Translator, created by Instafluff

    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.

    Second Place

    Reach Audience Worldwide, created by Kaan Baris BAYRAK

    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!

    Website: LINK

  • Get started building Extensions on mobile

    Get started building Extensions on mobile

    Reading Time: 3 minutes

    Since the launch of Extensions last September, we’ve been blown away by the community’s response and contributions. The Twitch developer community has created over 150 Extensions for streamers to use, and over 2000 of you have expressed interest in building more!

    Today, we’re excited to announce that we’re bringing Extensions to our Twitch mobile apps starting in late March. As more and more of the community accesses Twitch on their phones and tablets, enabling Extensions on mobile will significantly increase the reach of your Extensions while allowing streamers to share a consistent experience with their viewers across all platforms — this has been one of the most requested features from the streaming community.

    As promised when we shared our RFC (Request For Comments) on mobile Extensions, you’ll have a head start on building a mobile experience for your Extension, so that it’s mobile-ready by the time it rolls out to all Twitch app users. Starting today, you can access our design and technical guidelines to help you get started.

    So how does it work?

    Extensions with mobile support will occupy the same area as chat in our mobile apps. When a user watches a channel with a mobile Extension, they can view and interact with it after tapping on the Extensions icon. If the streamer has more than one Extension activated on their channel, the viewer can swipe left and right between multiple Extensions or navigate using the top tabs.

    Streamers will know which Extensions support mobile via a badge in the Extensions Manager.

    Extension on mobile in portrait mode.
    Extension on mobile in landscape mode.

    To enable your Extension on mobile devices, you’ll need to provide a mobile-specific front end file for your Extension. The Extension’s format on web (i.e. video overlay or panel) will not impact how the Extension is presented on mobile so you’ll want to think about how to develop a responsive experience. Over the next few days, you’ll be able to create a test version of your Extension, enable mobile support, and see that test version live in the Twitch app on version 5.10 or higher on iOS or Android prior to the rollout to all Twitch mobile app users in late March.

    This is the first of many new features we’re working on to create access to Extensions in more places. We’ll share more about our roadmap in an upcoming live stream on March 13, and we’d love to answer your questions and hear your feedback — save the date!

    If you have any burning questions before then, please reach out to us in the forums or talk to other Twitch developers in the chat server! And of course, don’t forget to check out the documentation to get started developing mobile Extensions today.

    Website: LINK

  • Prime Subscription and Loot Reminder Extension Now Available!

    Prime Subscription and Loot Reminder Extension Now Available!

    Reading Time: 2 minutes

    We at Twitch Prime are excited to introduce the new Prime Subscription & Loot Reminder Extension, which is now available to all streamers on Twitch starting today. This extension will notify viewers of your channel when they have a new Twitch Prime channel subscription available to use and when there is new Twitch Prime loot to claim. Viewers who do not have Twitch Prime will see a crown icon that lets them know how to get a free sub to spend on your channel when they sign up for Twitch Prime.

    To get the extension, select the extensions tab on the left hand side of your broadcaster dashboard. Search for ‘Prime Subscription and Loot Reminder’ and click through to install and activate.

    If you’re strictly a Twitch viewer, be sure to let your favorite streamer know about the extension!

    We’ve compiled a brief FAQ for additional information:

    Frequently Asked Questions

    Do I have to disable other video overlays to use the Prime Subscription and Loot Reminder?

    Yes, currently you may only install one video overlay extension at a time. We know this current limitation may be an inconvenience and are currently working through a solution. Stay tuned for additional updates.

    Can a viewer subscribe to my channel directly from the icon?

    No. This icon reminds viewers that a subscription or loot is available. Subscribing still happens through the sub button, and claiming loot still happens through the Crown Icon and we are looking at options to improve this experience.

    What if a viewer has a free sub, free in-game loot, and free games available to download? Which icon will show?

    Sub Ready icons will always be prioritized when applicable. Loot and game download icons will only show for users who have already claimed their free sub for the month. Regardless of a viewer’s status, the icon will disappear in 10 seconds if they don’t mouse over the icon.

    What devices can this extension be used on?

    Currently extension are only available on desktop.

    Website: LINK

  • Let’s Play…the Darwin Project?

    Let’s Play…the Darwin Project?

    Reading Time: 2 minutes

    We’ve got exciting extension news for all of you viewers and streamers out there. Today, Scavengers Studios has developed a new Twitch Extension to be used alongside their hit new title, Darwin Project, which is now conveniently in open beta!

    So, what does this Extension do?

    The Darwin Project’s Twitch Extension lets viewers help streamers who are playing the game as Show Directors.

    The Show Director is a cross between game show host and Hunger Games announcer. Show Directors have free roaming cameras which allow them to see any player at any time and allow them to influence the environment around the players.

    Here are a few examples of the actions you can take as a viewer helping the Show Director.

    Choose Your Champion

    Vote for who you think will win the game and influence their actions along the way.

    Healing Spectator Vote

    See someone you want to help or despise someone who’s winning? Viewers can vote to heal specific players in the match and potentially turn the tide of battle.

    Zone Closures

    See a skirmish between players that you want to escalate? As a community, you can force the action by voting on which parts of the map will be affected by environment changes and complete closures.

    For all you streamers out there

    Streamers, want to level up your broadcast for the open beta? Go install the Darwin Project Extension in you Extensions search dashboard so that it appears in your channel.

    Next, go on into the game and log in with Twitch directly. Your game account ID and Twitch ID should now be linked, which is the necessary step in making the Extension work.

    Viewers, go find your favorite Show Director!

    Viewers, simply find your favorite Show Director in the Darwin Project’s Twitch Directory. Some of our favorites this weekend will be EatMyDiction1, BogOtter, Cohhcarnage, Bikeman, Joaquimblaze and Miistymiisty.

    Let us know what you think

    With developers, we’re committed to creating unique experiences for viewers and streamers to enjoy on Twitch. Let us know what you think of the Darwin Project’s Twitch Extension with feedback to @Twitch on Twitter.

    Website: LINK

  • Behind the Extension — Mobalytics: a new Extension for League streamers

    Behind the Extension — Mobalytics: a new Extension for League streamers

    Reading Time: 6 minutes

    Fun fact: Mobalytics formed at the very first TwitchCon in 2015 when our founders met and started talking non-stop about analytics in competitive gaming. Since then, we’ve formed a team of scientists and former pro gamers to create an analytics platform for League of Legends players who want to up their game. The core of Mobalytics is the Gamer Performance Index (GPI), which evaluates a player’s capabilities. The GPI uses machine-learning to help Summoners understand their strengths and weaknesses and provides a suite of tools to aid them every step of the way during their ranked climbs. We’re currently in the midst of our Open Beta testing with over 500,000 users participating and pushing the limits of their personal performance.

    Enhancing the Connection Between Streamer and Viewer

    As soon as Twitch debuted Extensions, we became incredibly excited with the possibilities, and it was a no brainer for us to create one of our own. Our whole team watches LoL streamers daily, from Nightblue3 and Super Metroidlol to Pokimane and yes, even Tyler1. We’re there through the PogChamps and FeelsBadMans and just as much fans as the next League player.

    While watching, we realized that streamers are often asked questions like, “What runes are you using?”, “What items should I build?”, and, “What rank are you currently?” Questions that, if the streamer isn’t able to answer, the viewer must leave to another site in order to find out. This is where the Mobalytics Extension comes in.

    Our Extension improves the experience of both the streamer and viewer by making the exchange of information and analysis easier and more fun! The viewers have seamless access to insights for every player in the streamer’s match in the form of awesome illustrative graphs and breakdowns.

    Streamers can focus on answering more situational, complex questions while we answer these common questions for them. In the long run, this will save time and energy and give streamers more flexibility in guiding conversations with their audience.

    It will also help preserve the gaze and attention of their viewers since they will no longer have to leave the stream to look at another to find what they’re looking for on another site. Lastly, the overall design stresses simplicity that makes the content easy to understand and unobtrusive so it doesn’t block the action.

    Mobalytics Summoner Overview with champion details

    What’s Inside

    The Mobalytics Extension focuses on presenting information in three core ways:

    1. Summoner analysis

    Many LoL viewers watch their favorite streamer because they aspire to be like them. This feature makes it easier to emulate their play. The Summoner analysis reveals the win rate, runes, previous build and skill order, and a play style analysis of the individual streamer. Here, the viewers can also view details about the champion the streamer is playing such as stats and how their abilities work.

    2. Matchup analysis

    Part of the fun of watching a LoL stream is seeing how your favorite streamer compares against their enemy counterpart. Are they against a very aggressive player? Are they the underdog? Should they dominate? The Matchup analysis helps viewers understand these implications.

    3. Team analysis

    Finally, our Team analysis goes beyond a streamers 1-on-1 and shows viewers how the full 5-on-5 of a game is stacking up, showing similar information as your Matchup Analysis.

    Want to see our Extension in action? You can find streamers who are using it now, here.

    Mobalytics Matchup Analysis

    How We Built the Extension

    As soon as we finalized the idea and design, we started the development process. First, we audited the available developers documentation and the dev blog so we could have a better idea about the Twitch infrastructure and features which are available for the developers. We used this to build the application workflow and start the actual development.

    We only needed to design two workflows in order for this Extension to work but this doesn’t count that our platform already has the functionality which collects and process the League of Legends data.

    1. Streamer config save and get procedures.
    2. Get live match data procedure.

    As you can imagine, the Extension needed to deal with streamers and viewers so we developed different user interfaces to satisfy these needs.

    Streamer Config Save and Get Procedures

    The streamer part was relatively simple since we only ask for the summoner’s name and region. As soon as the streamer submits the setup form, the frontend initiates a “config set” procedure which basically stores/updates a streamer’s profile and Twitch ID in Mobalytics database for cases when the Summoner check tests passed, otherwise, the error returned. Yes, people can make mistakes!

    The “streamer get” procedure is used to return the stored information from our database based on Twitch ID if any exists. Additionally, the main Extension microservice subscribes to the webhooks provided by Twitch in order to track when the streams with Extension go up and down. This allows us to optimize the workflow as the Extension stops tracking the streamer when he/she goes offline.

    Get Live Match Data Procedure

    This is the core procedure for the viewer’s side of the Extension. Whenever a viewer opens the channel with the activated Mobalytics Extension, the browser loads the set of viewers assets (HTML/CSS/Javascripts).

    The viewer client sends the request “get live match data” with the supplementary Twitch metadata like channel ID, client ID. This request delivered to the main microservice via Mobalytics API GW. Next, the API GW validates the request and forwards it to the main Extension microservice.

    The main purpose of the API GW is to act as a single point of entrance for external requests from Mobalytics clients. The API GW provides functionality such as request routing and API composer, multiple transport support (HTTP, gRPC, etc), request authorization and validity check.

    The main Extension microservice acts as the orchestrator which communicates with the Mobalytics backend services in order to get the content and returns the response over the Twitch PubSub system which opens a websocket connection with the client. For this purpose, the main service identifies the streamer’s account ID in League of Legends based on the metadata received with the request. Then, the account ID is used to find the live game data by querying Riot APIs.

    The information received from Riot is used by the Mobalytics backend to identify player roles, calculate the GPI, find the last item build on current champions, etc. The process of data collection and processing takes time. Meanwhile, the main microservice sends status update messages to the client via the Twitch API and PubSub system. Currently, the Mobalytics Extension supports a few different system messages which are self explanatory: “Loading game info…”, “Loaded”, “No active game found”, “Game is over”, “Streamer did not setup the Extension”, etc. As you can see these messages support different possible scenarios, provides transparency on the Extension workflow, and assures positive viewers experience.

    Our Future Plans and a Word for Potential Extension Devs

    The Mobalytics Extension has only very recently been released, but our team is just getting started and can’t wait to keep upgrading it. LoL streamers that have been using it thus far have been great in giving us feedback and criticism. For the overwhelming majority, the Extension has brought a positive response from their viewers.

    Ultimately, we want to make this the de facto League Extension for streamers, especially those who care about educating their viewers. For anyone watching, whether they’re a newbie, a stat head, or even a parent watching her kid play, we want to provide value in helping them understand what’s going on. Eventually, we plan on adding more features to tinker and interact with the game players are watching, but we want to preserve that core experience of discovery while watching a streamer that makes Twitch so special.

    To developers out there that are considering building an Extension — do it. This is a brand new dimension for the Twitch realm that is ready for discovery; it only needs explorers to lead the way. Our team had a ton of fun conceptualizing, building, and releasing the Extension. We learned a lesson or two (or three), along the way and the Twitch team was incredibly helpful throughout the process. So what do you have to lose? If you have an idea to contribute to this awesome space, give it life!

    Website: LINK

  • Best Practices for Building Extensions

    Best Practices for Building Extensions

    Reading Time: 2 minutes

    Thinking about building a Twitch Extension? Check out a few of these helpful design and implementation tips the Twitch community has shared with us, and let us know if you have any of your own in the forums!

    When building an Extension, you need to think about two customers: both the creator who will leverage your Extension on their channel and the viewer who will ultimately engage with your Extension. Below we lay out some UI/UX best practices when thinking about the viewer experience, as well as discovery and management best practices when thinking about the creator experience.

    Extensions product manager Ryan Lubinksi shares Extensions design and implementation best practices.

    Here’s a summary of our Extensions product manager’s (@Ryan_Lubinksi) talk above:

    Optimizing Extension design for viewers

    1. Be aware of the Twitch UI. Think through how your Extension will display in different video player modes. For example, theater and full screen mode have a header with stream info on the top of the video player, while standard mode does not.
    2. Provide visibility options. Enable viewers to consume and interact with content in their own way. For example, consider showing the Extension upon mouseover, make it easy to dismiss or hide, or provide viewers the ability to customize its location and/or presentation.
    3. Showcase what you’ve created (carefully). Assume that not everyone knows how to interact with your Extension. Subtly nudge discovery of your interactive content to increase engagement.
    4. Fail gracefully. When operating at scale, sometimes things can go wrong. Build a smart failure handling into your system. For example, for video overlays, you can hide all Extension content if failure is detected, and for panels, you can display an actionable error message.

    Optimizing Extension discovery and management for creators

    1. Provide descriptive detail pages. This is where you make your first impression with creators! Add screenshots of your Extension to the details page and be crystal clear about how the Extension will improve the stream for the creator’s audience.
    2. Make setup of your Extension easy. Tell the creator exactly what they need to do to if your Extension requires configuration. It’s worth investing the time to make this process as simple as possible to minimize drop-off.
    3. Use Twitch tools to improve the creator experience. The process of installing and managing Extensions is still new for many users. Leverage the tools we’ve created to guide your customers in the right direction and minimize user confusion or error. For example, did you know you can set a required configuration string to make sure your Extension can’t be activated on a channel page until configuration is complete?
    4. Take feedback well. The community will often give you both positive and constructive feedback on your Extension. Take this opportunity to engage with your customers and understand their needs!

    For more information on Extensions, check out the documentation. If you have any questions, please reach out to us in the forums or talk to other Twitch developers in the chat server — we’re here to help!

    Website: LINK

  • Introducing RFCs for Extensions: Make Your Voice Heard

    Introducing RFCs for Extensions: Make Your Voice Heard

    Reading Time: 2 minutes

    Late last year we committed to publishing and updating a public roadmap for our developer platform and now we’ll be adding on to that effort with an RFC (Request for Comments) process for our major roadmap items. We truly believe that the best products are made hand in hand with customers and RFCs are how we’re going to do that.

    RFCs are a way to gather feedback from our developer community about our proposed technical strategies for potential updates — before we dive head first into implementation. The community will be given the opportunity to read and comment on everything related to upcoming projects ranging from our motivation for choosing the project at all to specifics of the API we’re designing.

    How it Works

    Before we start development on a feature, we will post a new topic on the developer forums in the RFC category. These are open for anyone to read and comment on and we encourage you to voice any and all thoughts or concerns you have in the RFC. We will leave these open for a minimum two weeks with the goal of reading and addressing all feedback before closing an RFC. When an RFC is closed, we will post a final revised version that incorporates any final changes due to feedback to serve as the plan of record.

    We’ve taken inspiration from a number of open source communities including Ember and Rust for our initial RFC strategy and our RFCs will start by including, at a minimum, the following information about the proposal:

    • A summary of the proposal
    • Motivation for making the change
    • Detailed design (including wireframes or mocks when applicable)
    • Rollout/upgrade path considerations
    • Drawbacks of the proposed strategy
    • Alternatives we thought of but opted to not do

    At this time, RFCs will be posted only for Extensions features, but we may expand this in the future. Within Extensions, however, we will post an RFC for any non-trivial change to any API or developer workflow.

    We Want Your Feedback

    We’re kicking off this process for a feature we hope to work on early this year: Dynamic Anchors. Take a look and leave us some feedback.

    Early in 2018, we will post our plans for how to tackle Multiple Video Extensions, Mobile Extensions, and more. Make sure to watch the RFCs space on the forums for new posts.

    Lastly, we’d love to hear your feedback on the overall process (yes, this is a request for feedback on how we request feedback). Drop us some comments on the forums with any thoughts you have. It’s important to us that you are represented in our development process so there’s anything we can be doing better we’d love to hear about it.

    Website: LINK

  • [Guest Post] Behind the Extension — Control the Show

    [Guest Post] Behind the Extension — Control the Show

    Reading Time: 5 minutes

    Hello! I’m John from Digital Tree Media and I’m here to share some thoughts and ideas around a Twitch Extension I made for controlling our Christmas lights. Yes, I know. Great idea, let Twitch control your lights. At Digital Tree Media we have a history of taking technologies and combining them to create an experience that other people would have said was “too hard,” “impossible,” or “a really dumb idea” (OK, that last one was just our staff when I said people could control our lights).

    Control The Show (CTS) has been a hobby project of mine for a few years. The original incarnation involved my old streaming setup in my bedroom at my parents’ house. Each time I have re-made the system, I have used it as an opportunity to learn new technologies, systems, and ways of working. CTS 1.0 was the reason I learned PHP back in 2011/2012.

    The Control The Show experience back in 2012.

    This year I decided that rather than rely on our own site and have people click on buttons, we’d have it within the video player on Twitch. In the past, we have built our own versions of interactive overlays (pre-Twitch Extensions), which we achieved by having the Twitch JavaScript player with an iFrame overlay then another container with the Twitch Player elements (play controls, volume, and fullscreen). There is one big issue with this –®define people who casually find the stream via the Twitch website would have to click away from it to control the lights. Adding one extra step usually means far fewer people will actually interact. Internally, we’ve been playing around with ideas for a Twitch Extension, and the whole concept of CTS felt like a really good fit. With that, I started building it first thing on a Sunday.

    By lunchtime I had the main part of the extension working. Users could click on one of the buttons to send the command to the server, which then sent it to the plugs to turn lights off or on. After a “healthy” lunch, I started work on what I thought would make the whole experience more entertaining. By mid-afternoon, I had user-based stats working, allowing me to pull data for a leaderboard, along with assigning a person a team, based on whether they had turned more things off or on.

    How does the whole system work then? Good question! As I mentioned earlier, CTS has been re-written multiple times, and this year was no exception. I had originally written the system to work on the website so I already had the code I needed to control the plugs, along with some of the security code. To add Twitch Extension compatibility, I needed to build an Extension Backend Service (EBS) and a frontend for it. The frontend was reasonably simple. A quick mashup of an image map, some javascript to scale it to the correct size, and an implementation to send the Twitch Auth token (provided as a JWT which I had never heard of), along with the request to the EBS and I was done. Then I just had to build an EBS. This part took me the longest, mainly due to my lack of knowledge on JWTs. Turns out they are an awesome little thing! My first issue with them as a n00b was selecting a library. I used my favourite bodge language of choice for CTS — PHP — which meant I had a choice of 7 different implementations. Now I did what every developer would do — I looked at which one had more stars on GitHub. Sweet. JWT = Done. I then modified the control system to accept the incoming data from the extension and log stats using the user’s identifier. I logged all the requests using the Opaque ID (as every user has one), but to appear on the leaderboard, a user has to allow me to see their actual Twitch ID.

    Great, the EBS is done, now we need to do everything else. Integrating it all together was quite easy. The total creation time of the extension was around 3–4 hours of actual work spread over my Sunday. I left the office after testing the extension out and submitting it.

    The next day, I received a reply about my submission explaining it had been denied. This was due to the lack of a config.html page for the broadcaster side and was a simple item to fix and resubmit. The extension then passed review and was available on Tuesday. Here’s what the engagement looked like for that first evening:

    Engagement for Control the Show’s debut using a Twitch Extension.

    We peaked at 221,430 commands in an hour, which is a lot of clicking! It was rather funny walking back into the office late that night and hearing all the relays clicking on and off.

    Now looking to the future, there’s a lot that I want to do with it. I’ve already started re-writing the project (again) to make better use of modern web technologies. Next year CTS will be using websockets for real-time communications, allowing the status of the devices to be shown in the Extension, along with achievements that will be shown to you as you earn them. My current plan is to bring CTS back for Halloween and Christmas each year with the actual display getting bigger and bigger.

    I currently have an LED ticker that is going to be implemented to show the latest Subscribers and Cheerers along with some LED pixel mapping effects that will be included in future shows so cheering and subscribing will be even cooler! This has always been a hobby project for me and I welcome feedback from people. If you have any 240v inflatables that you’d like to send my way, feel free to let me know!

    If you’re thinking of making a Twitch Extension, do it! It’s a hell of a lot of fun. I managed to make something simple that I can build on over the next year. It’s been a great learning experience from a little idea of “that would be cool” to something I now get to write about!

    Website: LINK

  • Extensions you should check out: December ‘17

    Extensions you should check out: December ‘17

    Reading Time: 2 minutes

    Extensions provide an opportunity for developers and streamers to revolutionize live streaming together. These interactive experiences can be tailored to the specific needs of a stream and allow two-way communication between the streamer, the viewers, and even a game being played. To help developers and streamers collaborate, last month we created a forum category to submit and vote on ideas, and we would love for you to be a part of those conversations as well.

    This month, we wanted to highlight a few Extensions (and their authors) that have been recently added to the Extensions Manager. We’ve chosen these to demonstrate a variety of use cases that Extensions can solve and the value they provide to streamers. You can try these Extensions on your own channel page by going to the detail pages linked below and clicking the “+ Install” button at the top right of each page.

    Game Stat

    An overlay Extension by CiberusPS, Game Stat is an Extension that shows game statistics, recent matches, and match details for DOTA 2.

    TT

    Written by sock_stream, the TT Extension is a timer video overlay with support for history and splits. The overlay is currently controlled from the browser, but the plan is to eventually integrate with existing timer tools. User guide: https://tt.stephank.nl/

    Event Countdown

    A panel Extension by Casperr, Event Countdown uses the Twitch event scheduler to display a countdown until your next event, using your selected thumbnail and game box art.

    Website: LINK

  • Introducing In-Extension purchases, now in limited preview

    Introducing In-Extension purchases, now in limited preview

    Reading Time: 2 minutes

    Last month at Developer Day at TwitchCon, we announced our plans to help you, the developer community, build your business on Twitch. Just as we’ve brought powerful monetization tools to creators, we’re now doing the same for you.

    Today, we’re excited to launch In-Extension purchases, available in limited preview.

    In-Extension purchases create a marketplace within your Extensions, which streamers can install to enable viewers to see, buy, and use digital goods within them. For example, imagine creating an Extension for a virtual pet where viewers can buy pet food within the experience, or an Extension that lets viewers buy stickers that appear on stream to other viewers. This creates further opportunity to customize and enhance interactions between streamers and their viewers, all while fueling your creativity by allowing you to monetize.

    To start, we’ve partnered with a few developers for this limited preview. You can see these in action on select channels here. When viewers buy an item within an Extension, they support both the developer and the streamer, who share the revenue.

    These Extensions enable viewers to purchase digital items within them.
    • Death’s Door by Shiny Shoe: In this gothic horror RPG Extension, viewers can purchase “Spirit Bombs,” consumable items that can cause an on-screen explosion, grant an in-game boost, or move the community closer to unlocking the next goal.
    • Live Pet by Porcupine: In this pet game Extension, viewers can engage with a streamer’s pet and purchase items and powerups to boost its progression.

    We’re excited to roll this out to the entire community of developers very soon. Please let us know if you’re interested in building an Extension with the ability to monetize, and share your feedback with us in the forums.

    Website: LINK

  • Introducing an AWS Credits Program for Extension Development

    Introducing an AWS Credits Program for Extension Development

    Reading Time: 3 minutes

    Twitch is dedicated to cultivating creativity and innovation within its developer community. To this end we have collaborated with Amazon Web Services to launch the Twitch Extensions AWS Credits Program.

    The aim of this program is to provide selected developers the opportunity to create proof-of-concepts for new and interesting Twitch Extensions. Those approved will receive the support of Twitch and AWS through the direct application of AWS Promotional Credits to the AWS accounts of selected developers.

    If you have a great idea for a Twitch Extension — and the team to build it — you are encouraged to apply! We’re particularly interested in seeing you create Twitch Extensions that:

    • Unlock new modes of interactivity between streamers and their viewers
    • Allow streamers to gain new insights into the sentiment of their viewers
    • Do fun and cool things with visualizing stream metadata and API data

    Application Process

    Applications will be received via this form.

    Applicants must ensure their application is complete and correct prior to submission. No additional information will be considered during the selection process. Applications containing incorrect information or omissions will not be considered for approval.

    You may submit one application per month, and developers with multiple compelling ideas may also be selected for more than one project. Applications will be reviewed once a month.

    Selection Criteria

    As stated, the purpose of this program is to support the innovation of Twitch developers. We are excited to see what you come up with, and are particularly excited to see ideas that unlock new levels of interactivity and innovation for Twitch creators and their viewers. All completed submissions will be evaluated by Twitch and AWS on the criteria below.

    • Customer value: How will this Extension serve Twitch creators?
    • Business potential: Potential for Extension to build viable business over time
    • Creativity & innovation: Ability to amaze and delight viewers when engaging with a stream
    • Use of AWS services: How will you use AWS services to power your Extension?

    Program Details

    Each approved developer will be onboarded with an introduction to members of the Twitch Developers team along with relevant support documentation and — of course — AWS Promotional Credits applied directly to their specified AWS account. Developers accepted into the program are also encouraged to communicate across teams to help build through shared learning and value. This will be facilitated through the use of the Twitch Desktop App.

    FAQ

    What do I need to participate?

    When are applications due?

    Applications are accepted on a rolling basis and will be reviewed and selected in groups once a month. You can submit one application per month.

    When and how will I be notified of the results of my application?

    We’ll notify you via email within 60 days of your submission.

    What happens if I’m selected?

    • You will be notified via email.
    • Then you celebrate!
    • Then you get to work.

    What happens if I’m not selected?

    Keep working on that idea, re-work your proposal, and re-apply next month for consideration.

    How are submissions evaluated?

    We’re particularly excited to see ideas that unlock new levels of interactivity and innovation for streamers and their viewers. All completed submissions will be evaluated by Twitch and AWS on the criteria below.

    • Customer value: How will this serve Twitch content creators?
    • Business potential: Prospects of building a viable business via the Extension over time
    • Creativity & innovation: Ability to amaze and delight viewers when engaging with a stream
    • Use of AWS services: How will you use AWS services to power your Extension?

    Can I submit more than one idea / application?

    Yes, you absolutely can! But please submit each idea separately, and only one per month.

    Do I need to build an Extension before I submit an application?

    No, you can submit an idea in any stage of development!

    What can I use the AWS Promotional Credits for?

    • API Gateway is probably a good choice
    • Maybe you’d also like to use Lambda (because Twitch Scale™)
    • DynamoDB could be a thing you need as well
    • Any other AWS services necessary for development of your Twitch Extension

    Can I use AWS Promotional Credits for costs unrelated to Extensions development?

    Nope.

    I have another question. Who do I ask?

    Visit us in the forums!

    Terms & Conditions

    AWS Promotional Credits will be awarded by AWS and Twitch based on the criteria above. By accepting the AWS Credits you agree to describe your experience developing your Extension for our use in promoting Extensions and AWS. AWS Credits received under this offer may only be used for testing and development of your Extension, not for production usage, and are subject to the AWS Promotional Credit Terms and Conditions, currently available at https://aws.amazon.com/awscredits.

    Website: LINK

  • Follow function comes to Extensions

    Follow function comes to Extensions

    Reading Time: < 1 minute
    Example of a follow action in an Extension — a button initiating a native follow confirmation box

    Good news for all Extension developers! We’re making it easier to enable Twitch functionality within Extensions, starting with follows.

    You can now prompt users to follow specific channels within your Extension while maintaining the flexibility of creating a design and experience that matches your Extension and use case.

    Follows are just the start, and we’ll continue putting the power of the Twitch toolbox into your hands. We’re looking forward to helping you integrate additional types of Twitch actions into your Extensions–such as username sharing, following an event, subscribing, or cheering.

    Let us know what actions you’d like to see added next in the forums or the chat server, and check out the “Twitch actions” documentation to learn more.

    Website: LINK