Stream Deck
Stream Deck is Elgato's shortcut controller app. Protocol Launcher allows you to generate Stream Deck URL scheme links.
Usage
There are two ways to use this library:
- On-Demand import from subpaths enables tree-shaking and keeps bundles small.
- Full Import from the root package is convenient but includes all app modules.
Pick On-Demand for production builds; Full Import is fine for quick scripts or demos.
Select Installation Method
URL Scheme
Elgato's official Stream Deck SDK documentation defines plugin deep-link messages with this format: streamdeck://plugins/message/<PLUGIN_UUID>[path]["?" query]["#" fragment].
Stream Deck 7.0 and later also supports passive deep-links by adding the documented streamdeck=hidden query string parameter.
The same official page also documents the OAuth2 redirect proxy URL format: https://oauth2-redirect.elgato.com/streamdeck/plugins/message/<PLUGIN_UUID>. Use the plugin deep-link URL as the callback URL unless the authorization provider does not accept custom URL schemes.
Plugin Message
Send a deep-link message to a Stream Deck plugin.
import { pluginMessage } from 'protocol-launcher/stream-deck'
const url = pluginMessage({
pluginUuid: 'com.elgato.hello-world',
path: '/hello',
query: { name: 'Elgato' },
fragment: 'waving',
})Passive Plugin Message
Send a passive deep-link message by setting the documented streamdeck=hidden query parameter.
import { pluginMessage } from 'protocol-launcher/stream-deck'
const url = pluginMessage({
pluginUuid: 'com.elgato.hello-world',
path: '/hello',
query: { streamdeck: 'hidden' },
})OAuth2 Redirect Proxy
Create the documented OAuth2 redirect proxy URL.
import { oauth2RedirectProxy } from 'protocol-launcher/stream-deck'
const url = oauth2RedirectProxy({
pluginUuid: 'com.elgato.hello-world',
path: '/auth',
})Encoded OAuth2 Redirect Proxy
Create the encoded OAuth2 redirect proxy URL shown by the official URL Builder.
import { encodedOauth2RedirectProxy } from 'protocol-launcher/stream-deck'
const url = encodedOauth2RedirectProxy({
pluginUuid: 'com.elgato.hello-world',
path: '/auth',
})Generated URLs
pluginMessage({
pluginUuid: 'com.elgato.hello-world',
path: '/hello',
query: { name: 'Elgato' },
fragment: 'waving',
})
// => 'streamdeck://plugins/message/com.elgato.hello-world/hello?name=Elgato#waving'
pluginMessage({
pluginUuid: 'com.elgato.hello-world',
path: '/hello',
query: { streamdeck: 'hidden' },
})
// => 'streamdeck://plugins/message/com.elgato.hello-world/hello?streamdeck=hidden'
oauth2RedirectProxy({
pluginUuid: 'com.elgato.hello-world',
path: '/auth',
})
// => 'https://oauth2-redirect.elgato.com/streamdeck/plugins/message/com.elgato.hello-world/auth'
encodedOauth2RedirectProxy({
pluginUuid: 'com.elgato.hello-world',
path: '/auth',
})
// => 'https%3A%2F%2Foauth2-redirect.elgato.com%2Fstreamdeck%2Fplugins%2Fmessage%2Fcom.elgato.hello-world%2Fauth'