Skip to content

About

Elgato Stream Deck plugin for Sienci gSender CNC control

Resources

Stars

1 star

Watchers

1 watching

Forks

Repository files navigation

gSender Stream Deck Plugin

Control your CNC machine running gSender directly from an Elgato Stream Deck. Supports all Stream Deck models including the Stream Deck + with dial/encoder actions.

The plugin connects to gSender via its built-in Socket.IO server (port 8000) and piggybacks on the existing serial connection, so you can use it alongside the gSender UI without conflict.

Requirements

  • gSender running with remote access enabled (default port 8000)
  • Elgato Stream Deck software v6.4+
  • A GRBL or grblHAL based CNC controller

Installation

From source

npm install
npm run build
npx streamdeck link com.sienci.gsender.sdPlugin

Restart Stream Deck software after linking.

Bundled profiles

The plugin ships with pre-configured profiles for the Stream Deck +. On first install, both an Idle and Running profile are added to your profile list. You can switch between them manually or customize them to your liking.


Actions Overview

Actions are organized into three categories based on typical usage:

  • Idle/Setup — Actions you'll use most when the machine is idle: jogging, zeroing, positioning
  • Running a Program — Actions you'll use during a running G-code job: pause, stop, overrides
  • Advanced — Additional actions for power users and custom workflows

Idle / Setup Actions

These are the actions you'll reach for most when setting up a job — positioning the machine, zeroing axes, and getting ready to cut.

Position Display

Shows the current machine position (absolute coordinates) on the button face. Displays OFFLINE when not connected to gSender.

Type Keypad (read-only display)
Settings None

Home Machine

Initiates a homing cycle ($H). The machine moves to its limit switches to establish a known position.

Type Keypad
Settings None

Unlock

Clears an alarm state and unlocks the machine ($X). Use after homing or after an alarm.

Type Keypad
Settings None

Jog

Jogs the machine in a configured axis and direction. Uses the current jog distance and feedrate.

Type Keypad
Settings Axis (X, Y, Z), Direction (+ or -), Skip if jogging (prevents command stacking)

Tip: Set up 6 jog buttons for X+, X-, Y+, Y-, Z+, Z- for full directional control.

Jog (Dial)

Jog an axis using the Stream Deck + dial. Rotate to jog, push to cancel. Shows current axis position on the touchscreen.

Type Encoder (Stream Deck +)
Settings Axis (X, Y, Z), Skip if jogging
Rotate Jog in configured axis
Push Cancel current jog

Cancel Jog

Immediately cancels any in-progress jog movement.

Type Keypad
Settings None

Cycle Jog Distance

Cycles through a list of preset jog distances. Each press advances to the next distance in the list. The current distance is shown on the button.

Type Keypad
Settings Axis group (XY or Z), Distances (comma-separated list, e.g. 0.1, 1, 10, 50)

Zero X / Zero Y / Zero Z

Sets the current position as zero for the respective axis. Uses G10 L20 P1.

Type Keypad
Settings None

Zero All

Sets the current position as zero for all axes (X, Y, Z) simultaneously.

Type Keypad
Settings None

Go To Zero X / Go To Zero Y / Go To Zero Z

Rapid moves to the zero position on the respective axis (G0).

Type Keypad
Settings None

Go To Zero All

Rapid moves to zero on all axes simultaneously.

Type Keypad
Settings None

Go To Zero XY (Safe)

Safely moves to XY zero by first raising Z to a safe height (G28 Z), then rapid moving X and Y to zero. Prevents dragging the bit across the workpiece.

Type Keypad
Settings None

Important: Requires G28 safe position to be set. Configure with G28.1 in gSender first.


Running a Program

These actions are designed for use while a G-code job is executing. They give you real-time control over the running program.

Start / Resume Job

Smart button that starts a loaded G-code file when idle, or resumes the job when paused/held. The button title updates dynamically: START, RUNNING, or RESUME.

Type Keypad
Settings None

Pause / Resume Toggle

Toggles between pausing and resuming. When running, it engages feed hold and pauses the sender. When paused, it sends cycle start and resumes. The button title shows PAUSE or RESUME.

Type Keypad
Settings None

This combines GRBL feed hold (firmware-level) with gSender's sender pause (software-level) for reliable pause/resume behavior.

Stop Job

Performs a full program abort sequence:

  1. Feed hold (stops motion immediately)
  2. M5 (stops spindle)
  3. M9 (turns off coolant)
  4. Force stops the gSender sender
  5. Resets the controller after 500ms (returns to Idle state)
Type Keypad
Settings None

Emergency Stop

Brutal instant stop. Immediately resets the GRBL controller, which:

  • Kills all motion instantly
  • Stops the spindle
  • Releases stepper motors (machine enters Alarm state)
  • Force stops the gSender sender
Type Keypad
Settings None

Warning: The machine will lose its position reference after an E-Stop. You'll need to home and re-zero.

Live Z Adjust (Dial)

Adjust the Z offset in real-time while a program is running. Uses G43.1 (dynamic tool length offset) for grblHAL controllers. Push the dial to reset the offset to zero (G49).

Type Encoder (Stream Deck +)
Settings Step size (mm, default 0.01)
Rotate Adjust Z offset (CW = shallower, CCW = deeper)
Push Reset offset to zero

Note: Requires grblHAL. Standard GRBL may not support G43.1.

Adjust Feed Override (Dial)

Adjust the feed rate override using the dial. Push to reset to 100%. Range: 10% - 200%.

Type Encoder (Stream Deck +)
Settings Step size (%, default 10)
Rotate Increase/decrease feed override
Push Reset to 100%

Adjust Spindle Override (Dial)

Adjust the spindle speed override using the dial. Push to reset to 100%. Range: 10% - 200%.

Type Encoder (Stream Deck +)
Settings Step size (%, default 10)
Rotate Increase/decrease spindle override
Push Reset to 100%

Feed Override (Button)

Set the feed rate override to a specific percentage with one press.

Type Keypad
Settings Value (%, e.g. 50, 100, 150)

Spindle Override (Button)

Set the spindle speed override to a specific percentage with one press.

Type Keypad
Settings Value (%, e.g. 50, 100, 150)

Rapid Override (Button)

Set the rapid movement override. GRBL supports three levels: 100%, 50%, or 25%.

Type Keypad
Settings Value (100, 50, or 25)

Advanced Actions

These actions cover additional functionality for power users, custom workflows, and less commonly needed controls.

Run Macro

Runs a gSender macro by name. Macros are loaded automatically when the plugin connects.

Type Keypad
Settings Macro name (must match the name in gSender exactly)

Send G-code

Sends a custom G-code command. The button title shows the first 8 characters of the command.

Type Keypad
Settings G-code (any valid G-code command)

Tip: Use this for custom commands like G28.1 (set safe position), tool changes, or controller-specific commands.

Adjust Spindle Speed (Dial)

Manually control spindle speed using the dial. Sends M3 S<speed> on rotation. Push to stop the spindle (M5).

Type Encoder (Stream Deck +)
Settings Step size (RPM, default 2000), Max speed (RPM, default 24000)
Rotate Increase/decrease spindle RPM
Push Stop spindle (M5)

Stop Spindle

Immediately stops the spindle (M5) and resets the speed to 0.

Type Keypad
Settings None

Reconnect

Disconnects and reconnects to gSender. Useful if the connection gets into a bad state.

Type Keypad
Settings None

Refresh Macros

Manually re-fetches the macro list from gSender. Normally macros are loaded automatically on connection.

Type Keypad
Settings None

Connection Status

Displays the current connection status. Shows ONLINE or OFFLINE with distinct button states.

Type Keypad (read-only display)
Settings None

Machine State

Displays the current GRBL machine state: Idle, Run, Hold, Jog, Alarm, etc.

Type Keypad (read-only display)
Settings None

Reset Controller

Sends a soft reset to the GRBL controller. Use with caution — this will stop all motion and may require re-homing.

Type Keypad
Settings None

Feed Hold

Standalone feed hold command. Immediately pauses motion at the firmware level. Use Cycle Start to resume.

Type Keypad
Settings None

Cycle Start

Standalone cycle start command. Resumes motion after a feed hold at the firmware level.

Type Keypad
Settings None

Resume Job

Standalone resume command. Resumes the gSender sender after a pause. In most cases, use the Start/Resume or Pause/Resume Toggle buttons instead.

Type Keypad
Settings None

Profiles

The plugin includes pre-configured profiles for the Stream Deck +. These are installed automatically and provide a starting point for your own layout.

Included profiles

Profile Description
gSender - Idle Optimized for setup and positioning: jog controls, zeroing, go-to-zero, position display
gSender - Running Optimized for active jobs: start/pause/stop, overrides, live Z adjust, emergency stop

You can customize these profiles or create your own. To export your customized profile for sharing: right-click the profile in Stream Deck software and select Export.

Configuration

Connection settings

The plugin connects to localhost:8000 by default. To change the host or port, configure the global settings in any action's Property Inspector.

How it connects

  1. Plugin connects to gSender's Socket.IO server
  2. Requests the serial port list
  3. If a port is already in use (by gSender UI), it piggybacks on that connection
  4. If no port is in use, it opens the first available port
  5. Status polling begins at 1-second intervals

Supported controllers

  • grblHAL — Full support including G43.1 live Z adjustment
  • GRBL — Full support except live Z adjustment (G43.1 not available)

Development

npm install          # Install dependencies
npm run build        # Build the plugin
npm run watch        # Build on file changes
npx streamdeck link com.sienci.gsender.sdPlugin   # Link for development
npm run restart      # Restart Stream Deck software

License

MIT

About

Elgato Stream Deck plugin for Sienci gSender CNC control

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages