Skip to content

Deep Linking

Fresh

Overview

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=xyz
typescript
import streamDeck from "@elgato/streamdeck";

streamDeck.system.onDidReceiveDeepLink((ev) => {
  const { url } = ev;
  // Parse URL parameters
});

streamDeck.connect();

Active vs Passive

ModeMin VersionBehavior
Active (default)SD 6.5+Brings Stream Deck to foreground
PassiveSD 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=abc

OAuth2 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