Context
The Stream Deck plugin (decks-vscode) does not work on Apple Silicon Macs (M1/M2/M3/M4/M5). The installer fails because the macOS build targets osx-x64 on .NET Core 3.1 — which has no ARM64 support and reached EOL in December 2022.
I needed this plugin working on my M5 Pro, so I forked the repo and got it fully functional.
Fork
https://github.com/lucheol/decks-vscode — branch fix/apple-silicon-support
What was changed
1. .NET Core 3.1 → .NET 8
- Updated
TargetFramework to net8.0
- Added
osx-arm64 to RuntimeIdentifiers
- Updated all NuGet dependencies to .NET 8 compatible versions
2. StreamDeck-Tools 2.6.0 → 6.4.0
- Migrated from the deprecated
PluginBase class to KeypadBase
- This was required because
PluginBase no longer routes key press events in v6.4.0
3. Replaced Fleck with native System.Net.WebSockets
- Fleck (both 1.1.0 and 1.2.0) fails to deliver server→client WebSocket messages when running on .NET 8/ARM64
- The plugin could receive messages from the VS Code extension, but could never send messages back
- Replaced with
System.Net.WebSockets + HttpListener from the .NET 8 standard library — zero external dependencies, fully functional bidirectional communication
4. Build improvements
- Added a
Dockerfile for cross-compiling from Linux to osx-arm64 (no need to install .NET SDK on the host machine)
- Fixed the PostBuild target to only run on Windows Debug builds (was failing on Linux/macOS)
How to build (Docker)
git clone https://github.com/lucheol/decks-vscode.git
cd decks-vscode
git checkout fix/apple-silicon-support
docker build --target build -t decks-vscode-build .
Then extract the output and install manually:
docker create --name extract decks-vscode-build
docker cp extract:/out ./plugin-output
docker rm extract
PLUGIN_DIR="$HOME/Library/Application Support/com.elgato.StreamDeck/Plugins/com.nicollasr.streamdeckvsc.sdPlugin"
cp -R ./plugin-output/ "$PLUGIN_DIR"
# Required: update manifest for macOS
# Change OS.Platform from "windows" to "mac" and MinimumVersion to "10.11"
# Required: sign all binaries (ARM64 macOS requirement)
codesign --force --deep -s - "$PLUGIN_DIR/com.nicollasr.streamdeckvsc"
find "$PLUGIN_DIR" -name "*.dylib" -exec codesign --force -s - {} \;
Restart the Stream Deck app and you're good to go.
Tested on
- macOS 26.4.0 (Apple M5 Pro)
- Elgato Stream Deck Classic
- Stream Deck software 7.3.1
- Cursor (VS Code fork) with
nicollasr.vscode-streamdeck extension v4.1.5
Context
The Stream Deck plugin (
decks-vscode) does not work on Apple Silicon Macs (M1/M2/M3/M4/M5). The installer fails because the macOS build targetsosx-x64on .NET Core 3.1 — which has no ARM64 support and reached EOL in December 2022.I needed this plugin working on my M5 Pro, so I forked the repo and got it fully functional.
Fork
https://github.com/lucheol/decks-vscode — branch
fix/apple-silicon-supportWhat was changed
1. .NET Core 3.1 → .NET 8
TargetFrameworktonet8.0osx-arm64toRuntimeIdentifiers2. StreamDeck-Tools 2.6.0 → 6.4.0
PluginBaseclass toKeypadBasePluginBaseno longer routes key press events in v6.4.03. Replaced Fleck with native System.Net.WebSockets
System.Net.WebSockets+HttpListenerfrom the .NET 8 standard library — zero external dependencies, fully functional bidirectional communication4. Build improvements
Dockerfilefor cross-compiling from Linux toosx-arm64(no need to install .NET SDK on the host machine)How to build (Docker)
Then extract the output and install manually:
Restart the Stream Deck app and you're good to go.
Tested on
nicollasr.vscode-streamdeckextension v4.1.5