Skip to content

Fork with Apple Silicon (ARM64) support — .NET 8 migration #63

@lucheol

Description

@lucheol

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions