manifest.json
manifest.json is the only widget file that is not code: it declares what the widget uses and how it is
configured. Everything Widget reads comes from here. It is plain JSON (no comments or trailing commas) and
must be an object. The Studio watches it: every mistake shows in the validator with its
code.
{ "size": { "width": 800, "height": 600 }, "scene": { "width": 1920, "height": 1080 }, "events": ["Twitch.Follow", "Kick.Follow"], "actions": [], "sendMessage": false, "assets": ["bell.mp3"], "strings": { "es": { "follow": "¡Nuevo follow de {name}!" }, "en": { "follow": "New follower: {name}!" } }, "queue": { "durationSeconds": 5, "gapSeconds": 0 }, "menu": { "sections": [] }}events
Section titled “events”The list of events the widget listens to, using the names in the events reference.
The SDK only delivers declared events, and “Configure” uses them to tell the viewer what is needed.
Common mistakes: event_not_declared,
manifest_unknown_event and
event_unused.
actions and sendMessage
Section titled “actions and sendMessage”actions: the list of Streamer.bot action names the widget runs withWidget.streamerbot.doAction. “Configure” shows them to the viewer.sendMessage:trueif the widget writes in the chat withWidget.streamerbot.sendMessage. Withtrue, the Streamer.bot password becomes required in the “Connection” section.
strings
Section titled “strings”The texts per language, read with Widget.t. One object per language, and es is
required: it is the base, and whatever is missing in another language shows in Spanish. Values are text, with
{name} for variables.
assets
Section titled “assets”The list of files from your library that the widget uses (up to 30), by name with extension, like
"bell.mp3". They are used with Widget.assets. Names are lowercase,
with numbers and hyphens.
The parameter menu the viewer sees in “Configure”. It has sections, and each section its fields:
{ "menu": { "sections": [ { "id": "text", "title": { "es": "Texto", "en": "Text" }, "fields": [ { "type": "number", "id": "fontSize", "param": "fontSize", "label": { "es": "Tamaño de letra", "en": "Font size" }, "default": 24, "min": 12, "max": 72, "step": 1, "suffix": "px" } ] } ] }}paramis the name the code reads withWidget.parameters. It has letters, numbers and_, starts with a letter and is not repeated.address,port,password,diseno,diseñoanddesignParamare reserved.label,titleandnoteare texts per language, like{ "es": "…", "en": "…" }.defaultmust fit the field type.- The types are:
switch,color,range,select,font,number,password,text,image,video,audioandplatforms.rangeandnumberacceptmin,maxandstep;number,suffix;selectandfont,options;image,videoandaudio, a file fromassetsasdefault.
Sections the Studio adds
Section titled “Sections the Studio adds”You do not have to declare them; they are added at the end of the menu by themselves:
- Platforms, if the widget listens to events from more than one platform.
- Texts (language), if
stringshas more than one language. - Design, if
designshas more than one. - Connection, always: Streamer.bot host, port, password and connection type, and the TikFinity port if it listens to TikTok.
designs
Section titled “designs”A list of designs the viewer can use to change the look: strings, or { "value": "light", "label": { … } }.
The chosen one is left in Widget.design and in <html data-design>, to style it from CSS.
Tunes Widget.queue. All are numbers, 0 or more.
durationSeconds: how long a task lasts if nothing else is given (5 by default).gapSeconds: pause between one task and the next (0 by default).taskLimitSeconds: the most a task can last (90 by default).maxPending: tasks that fit while waiting (50 by default); with a full queue the lowest priority is dropped.
status
Section titled “status”status.graceSeconds is how many seconds Widget.status takes to switch to "disconnected" after losing the
connection (15 by default), so a brief cut does not flicker on screen.
size and scene
Section titled “size and scene”The size of the OBS browser source (size) and of the scene it goes in (scene), each as
{ "width", "height" } in whole pixels, from 16 to 7680 wide and 16 to 4320 tall. A new widget ships 800 × 600 in 1920 × 1080,
and one without them was made for 1920 × 1080. They are changed from “Size in OBS” in the editor.
alerts
Section titled “alerts”The no-code alerts design. The visual editor writes it: it is not edited by hand. It has its own size allowance
(up to 128 KB of design) and its own limits: 24 alerts, 20 variants per alert, 12 layers, 12 groups and 60 files.
If you need more control, do it from your part of script.js with WidgetAlerts and AlertRuntime.