Skip to content

Changelog

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 deviceDidConnect event and in the Info parameter during the registration procedure
  • When the computer is wake up, the plugin will receive a systemDidWakeUp event.
  • 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 setSettings API can be used from the Property Inspector to save persistent data for the action's instance.

  • When the setSettings API is called from the plugin, the Property Inspector will automatically receive a didReceiveSettings callback with the new settings.

  • Similarly when the setSettings API is called from the Property Inspector, the plugin will automatically receive a didReceiveSettings callback with the new settings.

  • A new getSettings API 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 event didReceiveSettings containing 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 propertyInspectorDidAppear event.

  • When the Property Inspector is dismissed, the plugin will receive a new propertyInspectorDidDisappear event.


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>

Windows opened have now a default size of 500 x 650. You can change this size by setting the DefaultWindowSize property in the manifest.json, for example:

"DefaultWindowSize": [200, 300],

devicePixelRatio

The info parameter received by the connectElgatoStreamDeckSocket() function of the plugin and Property Inspector now contains a devicePixelRatio value. This can be used to know if the Stream Deck application is running on a HiDPI screen. Example:

var json = {
  "application": {
    "language": "en", 
    "platform": "mac", 
    "version": "4.1.0"
  }, 
  "devicePixelRatio": 2, 
  "devices": [
    {
      "id": "CDE8FC2CAD244599CE37A45A8D78FFF0", 
      "size": {
        "columns": 5, 
        "rows": 3
      }, 
      "type": 0
    }
  ]
};

Other improvements

  • You can now reload a Javascript plugin or the Property Inspector using CMD-R in the Chrome Remote Debugger.
  • The working directory for a compiled plugin is now set to the plugin folder
  • The filter in open dialogs was not working properly under certain circumstances
  • Javascript plugins can now access the clipboard
  • Improvements on how the plugins are terminated