Boy this process has been a doozy of incorrect or missing information and grumpy Discord moderators, heh. Slowly I have gathered information and compiled it here. Mostly for myself, but anyone who comes across it as well.


Extension Guidelines/Rules:

Developer console:


Pretty meh documentation. Have submitted many suggestions for fixes:

Note: One important takeaway is that when zipping files for upload as a twitch extension, zip the files themselves, not the folder containing them. It should be in the documentation but it’s not, and only managed to get the answer out from one of the mods after pulling teeth for a long time. Not even going to list the discord here as I get the sense they are gatekeeping, heh. Lots of people asking the same question and Twitch employees being super unhelpful.

Twitch API and TwitchClient

Was trying to get chat, raids and follows integrated into Unity. Started with the node-red extension but knew that I would eventually move to a Unity-only solution. That came sooner than expected when I realized that following was not included in TwitchClient. There is a plugin for Unity from 2018, with a newer version compiled that unfortunately would not work. Talked a lot on the Discord about it and so far looks like there will be no new updates for the time being. I managed to get version 1.0.0 to work in Unity 2019LTS.

First, the TwitchLib docs:

The error I and others had:

Documentation for the plugin:

Good tutorial, but lacking in description on how to actually subscribe to follows:

Example method to get follow information properly from the followerservice mentioned in the previous link:

private void NewFollower(object sender, TwitchLib.Api.Services.Events.FollowerService.OnNewFollowersDetectedArgs e)
Debug.Log(“New follower!”);
foreach (TwitchLib.Api.Interfaces.IFollow follower in e.NewFollowers)
AddBoss(follower.User.DisplayName.ToString(), BossOrigin.Follow);


Twitch will not allow inline scripts. For example, the following snippets are invalid:

    window.onload = randomizeStartingIndices();

onclick = “functionName()”

onload = “functionName()”

I ended up connecting functions to buttons and page load this way:

document.addEventListener(‘DOMContentLoaded’, function() {
}, false);

function connectFunctionsToButtons()
document.getElementById(“hatLeftButton”).onclick = hatArrowLeft;
document.getElementById(“hatRightButton”).onclick = hatArrowRight;
document.getElementById(“monsterLeftButton”).onclick = monsterArrowLeft;
document.getElementById(“monsterRightButton”).onclick = monsterArrowRight;
document.getElementById(“submitButton”).onclick = submitMonster;

The buttons need id=”whatever” for javascript to find them by Id


Clipboard access, the clipboard API no longer works:

Fall back to document.execCommand