Control your SmartThings devices and scenes directly from your Stream Deck with secure OAuth 2.0 authentication.
- 🔒 Secure OAuth 2.0 authentication with PKCE (Proof Key for Code Exchange)
- 🔄 Automatic token refresh - no manual re-authentication needed
- 💾 Local token storage - your credentials never leave your machine
- ⚡ Direct API communication - fast and reliable control
- 🎛️ Multiple device types - lights, switches, garage doors, and scenes
- Download the latest release from GitHub Releases
- Open
com.thibautsabot.streamdeck.smartthings.streamDeckPlugin - Stream Deck will install the plugin automatically
Before you can use the plugin, you need to create an OAuth application in the SmartThings CLI:
-
Install the Smartthings CLI Github
-
Run
smartthings apps:createin your terminal -
Select
OAuth-In App -
Configure your app:
- Display Name: Your choice (e.g., "Stream Deck Integration")
- Description: Anything you want
- Icon Image URL: Leave blank
- Target URL: Leave blank
- Scopes: Select at least:
r:devices:*(Read devices)x:devices:*(Execute device commands)r:scenes:*(Read scenes)x:scenes:*(Execute scenes)
- Select Add Rediction URI. and press Enter.
- Add this redirect URI:
https://streamdeck-smartthings-oauth.vercel.app/oauth-callback.html(If you don't trust the URL or are curious about the code, head over to this repo. You can even host it yourself)
-
Save and copy your Client ID and Client Secret
- Add an action to your Stream Deck (Light, Switch, Garage Door, or Scene)
- Enter credentials:
- Paste your Client ID
- Paste your Client Secret
- Click "Open Authorization Page"
- Your browser will open to the SmartThings authorization page
- Sign in and authorize the plugin
- You'll be redirected to a page showing your authorization code
- Copy the code from the webpage
- Back in Stream Deck:
- Paste the code into the "Authorization Code" field
- Click "Complete Authorization"
- You should see "✓ Connected to SmartThings"
- Select your device or scene from the dropdown menu
That's it! Your action is now ready to use.
The plugin uses PKCE (Proof Key for Code Exchange), a secure OAuth 2.0 flow designed for browser-based apps:
- Plugin generates a random secret (code verifier) and its hash (code challenge)
- Opens SmartThings authorization with the hash (not the secret)
- You authorize the app
- SmartThings returns an authorization code
- Plugin exchanges the code + original secret for tokens
- Tokens are stored locally and refreshed automatically
This plugin is built with TypeScript and uses the SmartThings API for device control. It was created from typescript-streamdeck-boilerplate.
Current capabilities:
- Control any SmartThings "switch" devices (lights, switches, outlets, etc.)
- Execute SmartThings scenes
- Garage door control
- More device types possible (but not tested due to lack of hardware)
- Node.js (v20 or later recommended)
- npm
- Stream Deck software
# Clone the repository
git clone https://github.com/thibautsabot/streamdeck-plugin-smartthings.git
cd streamdeck-plugin-smartthings
# Install dependencies
npm install
# Build the plugin
npm run buildContributions are welcome! Here's how you can help:
- Create a new action class in
src/actions/extendingBaseDevice - Implement device-specific logic (capabilities, commands)
- Add property inspector HTML in
src/actions/your-device/property-inspector/ - Add device icon to
com.thibautsabot.streamdeck.smartthings.sdPlugin/imgs/actions/ - Register action in
manifest.json - Add tests in
src/actions/__tests__/
- Check existing issues first
- Include Stream Deck software version
- Include plugin version
- Include relevant logs (check Stream Deck console)
- Describe expected vs actual behavior
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes with tests
- Run linting and tests (
npm run lint && npm test) - Commit with clear messages
- Push to your fork
- Open a Pull Request

