Deep Linking
FreshOverview
Deep linking sends messages to local plugins via custom URL schemes. Useful for:
- OAuth2 authorization callbacks
- Local IPC between applications
- Transmitting settings from external integrations
URL Structure
streamdeck://plugins/message/<PLUGIN_UUID>[path]["?" query]["#" fragment]Example:
streamdeck://plugins/message/com.elgato.hello-world/auth?code=abc123&state=xyzHandling Deep Links
typescript
import streamDeck from "@elgato/streamdeck";
streamDeck.system.onDidReceiveDeepLink((ev) => {
const { url } = ev;
// Parse URL parameters
});
streamDeck.connect();Active vs Passive
| Mode | Min Version | Behavior |
|---|---|---|
| Active (default) | SD 6.5+ | Brings Stream Deck to foreground |
| Passive | SD 7.0+ | Keeps Stream Deck hidden |
Enable passive mode by adding ?streamdeck=hidden to the URL:
streamdeck://plugins/message/com.elgato.hello-world/setup?streamdeck=hidden&token=abcOAuth2 Redirect Proxy
Some OAuth providers reject custom URL schemes. Use the Elgato HTTPS redirect proxy:
https://oauth2-redirect.elgato.com/streamdeck/plugins/message/<PLUGIN_UUID>Forwarded parameters: code, state, scope, error
Limitations
- Messages must be under 2,000 characters
- Deep links function only locally
- Some OAuth providers may still reject the redirect proxy