cli icon indicating copy to clipboard operation
cli copied to clipboard

Make the SDK system-agnostic

Open tolik518 opened this issue 5 months ago • 5 comments

Using Linux the SDK steamdeck create crashes after putting in the Plugin UUID with:

node:fs:1583
  const result = binding.readdir(
                         ^

Error: ENOENT: no such file or directory, scandir '/home/tolik/AppData/Roaming/Elgato/StreamDeck/Plugins'
    at readdirSync (node:fs:1583:26)
    at $P (file:///home/tolik/.nvm/versions/node/v22.17.0/lib/node_modules/@elgato/cli/bin/streamdeck.mjs:5:632467)
    at validate (file:///home/tolik/.nvm/versions/node/v22.17.0/lib/node_modules/@elgato/cli/bin/streamdeck.mjs:5:637044)
    at Object.<anonymous> (file:///home/tolik/.nvm/versions/node/v22.17.0/lib/node_modules/@elgato/cli/bin/streamdeck.mjs:5:438128)
    at file:///home/tolik/.nvm/versions/node/v22.17.0/lib/node_modules/@elgato/cli/bin/streamdeck.mjs:5:215867
    at ReadStream.<anonymous> (file:///home/tolik/.nvm/versions/node/v22.17.0/lib/node_modules/@elgato/cli/bin/streamdeck.mjs:5:206730)
    at AsyncResource.runInAsyncScope (node:async_hooks:214:14)
    at ReadStream.bound (node:async_hooks:245:16)
    at ReadStream.emit (node:events:530:35)
    at emitKeys (node:internal/readline/utils:370:14) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'scandir',
  path: '/home/tolik/AppData/Roaming/Elgato/StreamDeck/Plugins'
}

the path is not system-agnostic and expects the user to use Windows. If I create the given path by hand, I can put in all the asked information and it still crashes in the end with

node:internal/child_process:285
      const err = new ErrnoException(exitCode, syscall);
                  ^

Error: spawn reg.exe ENOENT
    at ChildProcess._handle.onexit (node:internal/child_process:285:19)
    at onErrorNT (node:internal/child_process:483:16)
    at process.processTicksAndRejections (node:internal/process/task_queues:90:21) {
  errno: -2,
  code: 'ENOENT',
  syscall: 'spawn reg.exe',
  path: 'reg.exe',
  spawnargs: [ 'QUERY', 'HKLM\\NONEXISTENT' ]
}

tolik518 avatar Jul 11 '25 20:07 tolik518

Hey @tolik518, thank you for the feedback. We’re open to the idea of supporting Linux within the CLI. With a lot of the functionality designed to work with Stream Deck app (and therefore requiring macOS or Windows), it’s important to note that some functionality may be more limited on Linux.

Based on your post, would I be correct in saying you’re running WSL? If so, we could certainly scaffold a plugin, however other features such as hot-reload may require further investigation to see if they are achievable.

GeekyEggo avatar Jul 11 '25 21:07 GeekyEggo

Hey @GeekyEggo, I would like to use the official SDK to create elgato plugins on Linux. While I can't use the official Streamdeck app to run those plugins on Linux, I can use an alternative like Opendeck.

So what I'd need is basically just the skeleton-creation :)

(the culprit seems to be setDeveloperMode btw, or rather the else branch over here, I'd make a PR, but I have no idea about node.js)

Edit: os.platform() returns linux for me, so this might be used in the mentioned place

tolik518 avatar Jul 11 '25 21:07 tolik518

I just saw your edit: I'm running Pop!Os 22.04 and I don't use Windows, but like I mentioned above, I use open source tools to run my streamdeck plugins :) Not having all features is expected of course

tolik518 avatar Jul 11 '25 21:07 tolik518

That’s perfect, thank you. We can definitely look to provide a slimmed down version of the create command to facilitate basic scaffolding on Linux. I’ll add this to our backlog.

GeekyEggo avatar Jul 11 '25 21:07 GeekyEggo

I'm glad to hear that! If you have any questions or need any support, feel free to reach out to me

tolik518 avatar Jul 11 '25 21:07 tolik518