Manifest und Property Inspectors
Das Manifest sagt Stream Deck, was dein Plugin ist, wie es ausgeführt wird, welche Actions es bereitstellt, welche Geräte und OS-Versionen es unterstützt und wo die Konfigurations-UI liegt.
1. Aufgaben des Manifests​
manifest.json definiert:
- Plugin-Name, Autor, Version, Beschreibung, Icon und UUID,
- den Einstiegspunkt ĂĽber
CodePath, - unterstĂĽtzte Betriebssysteme,
- die minimale Stream Deck Softwareversion,
- die Node.js-Runtime-Konfiguration,
- Actions und ihre Metadaten,
- UnterstĂĽtzung fĂĽr Tasten- und Dial-Controller,
- Action-Zustände und -Bilder,
- Property-Inspector-Pfade,
- vordefinierte Profile,
- optionale App-Monitoring-Metadaten.
Verwende die Schema-URL zur Validierung:
{
"$schema": "https://schemas.elgato.com/streamdeck/plugins/manifest.json"
}
2. Minimale Manifest-Form​
{
"$schema": "https://schemas.elgato.com/streamdeck/plugins/manifest.json",
"Author": "Example",
"Name": "Deploy Tools",
"Description": "Deployment shortcuts for Stream Deck.",
"Icon": "imgs/plugin-icon",
"Version": "1.0.0.0",
"UUID": "com.example.deploy-tools",
"CodePath": "bin/plugin.js",
"SDKVersion": 2,
"Software": {
"MinimumVersion": "7.1"
},
"Nodejs": {
"Version": "24"
},
"OS": [
{ "Platform": "mac", "MinimumVersion": "13" },
{ "Platform": "windows", "MinimumVersion": "10" }
],
"Actions": [
{
"UUID": "com.example.deploy-tools.deploy",
"Name": "Deploy",
"Icon": "imgs/deploy-icon",
"PropertyInspectorPath": "ui/deploy.html",
"States": [
{
"Image": "imgs/deploy"
}
]
}
]
}
3. Action-Metadaten​
Jede Action braucht:
- eine stabile Action-UUID mit der Plugin-UUID als Präfix,
- einen lesbaren Action-Namen,
- ein Icon,
- Zustände und Bilder, wo angebracht,
- optionale Controller-UnterstĂĽtzung fĂĽr Tasten und Dials,
- optionalen Property-Inspector-Pfad.
Nutze eine Action für ein nutzerseitiges Verhalten. Verstecke nicht viele unzusammenhängende Verhaltensweisen hinter einer Action, außer der Property Inspector macht den Modus offensichtlich.
4. Tasten, Dials und Controller​
Tasten-Actions zielen auf tastenfeldartige Bedienelemente. Dial-Actions zielen auf Stream Deck + Encoder und deren Touchscreen-Bereich.
Wenn eine Action beides unterstĂĽtzt, deklariere es explizit:
{
"UUID": "com.example.audio.volume",
"Name": "Volume",
"Controllers": ["Keypad", "Encoder"],
"Icon": "imgs/volume",
"States": [
{
"Image": "imgs/volume"
}
],
"Encoder": {
"layout": "$B1",
"TriggerDescription": {
"Rotate": "Adjust volume",
"Push": "Mute"
}
}
}
FĂĽge Dial-UnterstĂĽtzung nicht nur hinzu, weil sie verfĂĽgbar ist. FĂĽge sie hinzu, wenn Drehung oder der Touchstreifen die Action besser machen.
5. Property Inspectors​
Property Inspectors sind HTML-Webviews zum Konfigurieren von Actions. Lege sie unter *.sdPlugin/ui/ ab und referenziere sie aus manifest.json.
{
"Actions": [
{
"UUID": "com.example.deploy-tools.deploy",
"Name": "Deploy",
"PropertyInspectorPath": "ui/deploy.html"
}
]
}
Nutze einen Property Inspector fĂĽr:
- Zielauswahl,
- Modusauswahl,
- Beschriftungen,
- Anzeigeeinstellungen,
- IDs pro Action,
- nicht geheime Konfiguration.
Vermeide Property Inspectors fĂĽr:
- Geheimnisse,
- groĂźe Tabellen,
- Konto-Onboarding-Flows,
- Workflows, die ein vollständiges Browserfenster brauchen.
6. Einfacher Property Inspector​
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Deploy Settings</title>
<script src="sdpi-components.js"></script>
</head>
<body>
<sdpi-item label="Environment">
<sdpi-select setting="environment">
<option value="staging">Staging</option>
<option value="production">Production</option>
</sdpi-select>
</sdpi-item>
<sdpi-item label="Service">
<sdpi-textfield setting="serviceName" placeholder="api"></sdpi-textfield>
</sdpi-item>
</body>
</html>
Elgatos Property-Inspector-Doku empfiehlt, die UI-Komponentenbibliothek lokal zu nutzen, um vorhersehbares Offline-Verhalten zu erreichen.
7. Einstellungsdesign​
Nutze einen Einstellungstyp pro Action:
type DeploySettings = {
environment?: 'staging' | 'production';
serviceName?: string;
};
Setze Standardwerte im Action-Code, nicht nur in der UI:
const environment = ev.payload.settings.environment ?? 'staging';
const serviceName = ev.payload.settings.serviceName ?? 'api';
Das hält die Action robust, wenn:
- Nutzende die Action hinzufügen, bevor sie den Inspector öffnen,
- Einstellungen von einer älteren Plugin-Version stammen,
- Inspector-Felder entfernt oder umbenannt wurden,
- Profile von einer anderen Maschine importiert wurden.
8. Einstellungen versionieren​
Wenn sich Einstellungen weiterentwickeln, nutze tolerante Lesevorgänge:
type SettingsV1 = {
target?: string;
};
type SettingsV2 = {
target?: string;
displayMode?: 'status' | 'compact';
};
function normalizeSettings(settings: SettingsV1 | SettingsV2): Required<SettingsV2> {
return {
target: settings.target ?? 'default',
displayMode: 'displayMode' in settings ? settings.displayMode ?? 'status' : 'status',
};
}
Vermeide erzwungene Migrationen, auĂźer du brauchst sie wirklich. Die meisten Stream Deck Einstellungen lassen sich beim Lesen normalisieren.
9. Qualitäts-Checkliste für das Manifest​
- Die Plugin-UUID ist stabil und im Reverse-DNS-Format.
- Action-UUIDs haben die Plugin-UUID als Präfix.
CodePathzeigt auf die gebaute Einstiegsdatei.Nodejs.Versionpasst zur aktuellen SDK-Anforderung.- Icons und Zustandsbilder existieren im gepackten Verzeichnis.
- Property-Inspector-Pfade sind relativ zum Plugin-Verzeichnis.
- Minimale OS- und Stream Deck Versionen passen zu den genutzten Funktionen.
- Die Schema-Validierung besteht.