Changelog
Changes in Stream Deck 4.8
-
You can now specify in the
setImageevent on which state the image should be set. This change only applies to actions with 2 states. If no state is specified, the image is set to both states. -
You can now specify in the
setTitleevent on which state the title should be set. This change only applies to actions with 2 states. If no state is specified, the title is set to both states.
Changes in Stream Deck 4.7
- Add the device type
kESDSDKDeviceType_CorsairGKeysto detect Corsair G-Keys devices.
Changes in Stream Deck 4.6
- The
switchToProfileAPI can now be used with an editable preconfigured profile.
Changes in Stream Deck 4.5.1
- The
setImageevent now accepts svg images as payload.
Changes in Stream Deck 4.3.3
- Added the
DontAutoSwitchWhenInstalledoption in themanifest.jsonto prevent Stream Deck from automatically switching to a preconfigured profile when installed.
Changes in Stream Deck 4.3
- Add support for Stream Deck XL
- Add support for Stream Deck Mobile
- Custom user images are always used even if a plugin dynamically renders an image
- The device name is now sent in the
deviceDidConnectevent and in the Info parameter during theregistration procedure - When the computer is wake up, the plugin will receive a
systemDidWakeUpevent. - When using a file picker in the Property Inspector of a custom action, the last selected folder is stored and then used when reopening the file picker for the actions with the same identifier.
Changes in Stream Deck 4.2
- The willAppear and willDisappear events are now sent to custom actions inside Multi-Actions.
- The device opaque values are now stable across relaunch.
- The switchToProfile API now temporarily disables the Smart Profile feature.
- Using the switchToProfile API will now prompt the user to install the profile if it has not been installed.
- The Smart Profile feature is disabled when the Stream Deck window is visible.
- The info parameter used in the registration process contains the version of the plugin
- The Property Inspector should be much faster to appear on Windows
Changes in Stream Deck 4.1
We introduced some changes to the SDK that make new plugins not backward compatible with Stream Deck 4.0.x. New plugins should only target Stream Deck 4.1 and later.
New property SDKVersion
The manifest.json file should now contain a SDKVersion property. The value should be set to 2 for new plugins: "SDKVersion": 2.
Plugins with the SDKVersion property will only run in Stream Deck 4.1 and later. New plugins should not support Stream Deck 4.0.x anymore and should contain in their manifest.json file the following:
"Software":
{
"MinimumVersion" : "4.1"
}
More information about the manifest.json file can be read in the Manifest documentation
connectSocket() has been renamed to connectElgatoStreamDeckSocket()
The registration function for the plugin and Property Inspector has been renamed from connectSocket() to connectElgatoStreamDeckSocket().
More information can be read in the Registration Procedure
Simplified communication between the plugin and Property Inspector
Several changes have been made to simplify the communication between the plugin and the Property Inspector:
-
The
setSettingsAPI can be used from the Property Inspector to save persistent data for the action's instance. -
When the
setSettingsAPI is called from the plugin, the Property Inspector will automatically receive adidReceiveSettingscallback with the new settings. -
Similarly when the
setSettingsAPI is called from the Property Inspector, the plugin will automatically receive adidReceiveSettingscallback with the new settings. -
A new
getSettingsAPI has been introduced and can be used from the plugin and Property Inspector. After calling this API, the plugin or Property Inspector will receive asynchronously an eventdidReceiveSettingscontaining the settings for the action. -
When the Property Inspector is displayed, the settings are passed directly to the Property Inspector in the inActionInfo parameter. With this change, the Property Inspector gets right away the current settings for the action.
-
When the Property Inspector is displayed, the plugin will receive a new
propertyInspectorDidAppearevent. -
When the Property Inspector is dismissed, the plugin will receive a new
propertyInspectorDidDisappearevent.
Possibility to save global settings
The plugin and Property Inspector can now save persistent data globally and not just to one instance of an action using the new setGlobalSettings API. The data will be saved per plugin and securely. This new API can be used to save for example tokens that should be available to all the actions of the plugin.
Note that when the plugin uses setGlobalSettings, the Property Inspector will automatically receive a didReceiveGlobalSettings callback with the new global settings. Similarly when the Property Inspector uses this API, the plugin will automatically receive a didReceiveGlobalSettings callback.
A new getGlobalSettings API has also been introduced and can be used from the plugin and Property Inspector. After calling this API, the plugin or Property Inspector will receive asynchronously an event didReceiveGlobalSettings containing the global settings.
Logging
The plugin and Property Inspector can use the new logMessage event to write a debug message to the logs file:
var json = {
"event": "logMessage",
"payload": {
"message": "Hello World!"
}
};
Logs are saved to disk per plugin in the folder ~/Library/Logs/StreamDeck/ on macOS and %appdata%\Elgato\StreamDeck\logs\ on Windows. Note that the log files are rotated each time the Stream Deck application is relaunched.
Possibility to open a new window
The Property Inspector and a Javascript plugin can now open a new window. The main html file could contain a callback function like this:
function gotCallbackFromWindow(parameter) {
console.log(parameter);
}
When a keyDown event occurs, the plugin can open the new_window.html in a new window:
if(event == "keyDown")
{
window.open ('new_window.html');
}
The new_window.html file will call the callback:
<!DOCTYPE HTML>
<html>
<head>
<title>My New Window</title>
<meta charset="utf-8" />
</head>
<body>
<script type="text/javascript">
window.opener.gotCallbackFromWindow("Hello World");
//window.close();
</script>
</body>