Documentation · v1.1.0

n8n Workflow
Controller

Control, monitor and command your n8n automation infrastructure directly from physical buttons. Zero latency, self-hosted, real bidirectional control.

Stream Deck + / XL n8n self-hosted Windows · macOS Free + Pro
Getting Started

Setup in 5 minutes

Follow these steps once after installing the plugin from the Elgato Marketplace.

1

Install the plugin

Download and install n8n Workflow Controller from the Elgato Marketplace. Restart the Stream Deck app if prompted.

2

Create an n8n API Key

In your n8n instance, go to Settings → API → Create API Key. Copy the key — you'll need it in the next step. Keep it safe: it grants full access to your n8n instance.

3

Configure Global Settings

Drag the n8n Settings action onto any button. Click the button to open the Property Inspector. Enter your Base URL (e.g. https://your-n8n.example.com) and API Key. Click Test Connection — it should turn green.

4

Add your first action

Drag Trigger Workflow onto a button. In the Property Inspector, paste the webhook URL of an n8n workflow. Press the physical button — the workflow fires.

5

Explore the other actions

All actions share the Global Settings you entered in step 3. You never need to re-enter the API key per-button.

Configuration

Global Settings

Entered once, used by every action. Stored securely on your local machine — never exported in profiles.

Base URL

The root URL of your n8n instance. No trailing slash.

https://your-n8n.example.com
http://localhost:5678

API Key

From n8n → Settings → API. Stored encrypted, never visible in profile exports.

Internal Email / Password

Pro Required only for live execution monitoring via the internal REST API. Optional.

Default Poll Interval

Fallback polling speed for monitoring actions if no per-action interval is set.

Never put your API key in per-button settings. Button settings are exported when you share a Stream Deck profile. Global settings are not.
Free Action

Trigger Workflow

Trigger Workflow Free
Fires a webhook with one button press

Sends an HTTP POST (or GET) request to any n8n webhook URL. The simplest and most versatile action: one press, one workflow execution. No API key required — webhooks are public by default.

Parameters
Field Description
Webhook URL The full webhook URL from your n8n workflow. Supports both production and test webhook URLs.
Method POST (default) or GET. Use GET only if your webhook node is configured to accept GET requests.
Button label Text displayed on the key. Leave empty to show no label.
Custom body Optional JSON body sent with POST requests. Useful for passing parameters to the workflow.
Timeout (s) How long to wait for a response before showing an alert. Default: 10 seconds.
Short press → fires webhook → green flash ✓
Long press (600ms) → shows last execution result for 3s
Error or timeout → yellow alert ✗
Example — Deploy workflow
Webhook URL: https://n8n.example.com/webhook/deploy-production
Method: POST
Custom body: {"branch": "main", "env": "prod"}
Label: Deploy
Free Action

Toggle Workflow On/Off

Toggle Workflow On/Off Free
Enable/disable with live status indicator

Shows the real-time active/inactive state of a workflow directly on the button. Press once to toggle. Perfect for scheduled workflows, scrapers, or any automation you want to pause and resume quickly.

Parameters
Field Description
Workflow Select from the dropdown list of your n8n workflows. Loaded automatically from your instance.
Button label Auto-filled from the workflow name. You can override with a custom label.
Poll interval How often to refresh the status from n8n (5s to 5min). Lower = more accurate, more API calls.
🟢 Workflow active
🔴 Workflow inactive
Long press → opens workflow in browser
n8n offline → shows last known state with · dot
💡
On Stream Deck +, tap the LCD strip to see a quick status overlay without pressing the dial.
Free Action

Stop Execution

Stop Execution Free
Emergency stop for running workflows

Stops a running n8n execution immediately. The button polls every 15 seconds and shows a red indicator when an execution is in progress. By default requires a long press to prevent accidental stops.

Parameters
Field Description
Workflow Target a specific workflow, or leave empty to stop any active execution on your instance.
Button label Text on the key. Default: Stop.
Confirm (hold) When enabled (recommended), a long press is required to execute the stop. Short press shows "Hold to stop" for 2 seconds.
Idle — no execution running
🔴 Execution in progress
Long press → stops execution → green flash
Nothing running → shows "Nothing running" for 2s
Do not use in Multi Action sequences. This action is an emergency control and is intentionally blocked from firing inside sequences.
Free Action

Execution Counter

Execution Counter Free
Live count of today's executions

Shows the number of executions for a workflow (or all workflows) today or this week. Updates automatically on each poll cycle.

Parameters
Field Description
Workflow Select a specific workflow, or choose "Count all workflows" to count across your entire instance.
Button label Auto-filled from workflow name. Displayed above the count number.
Poll interval Refresh frequency. 30s is a good default for most uses.
💡
On Stream Deck +, the LCD strip shows the count with a progress bar layout ($B1). Place 4 counters on 4 dials to monitor your key workflows at a glance.
Free Action

Status Monitor

Status Monitor Free
Three rotating status views in one button

Cycles automatically between three views: last execution result and timestamp, today's execution count, and a live active/inactive indicator. A single button that tells you everything about a workflow.

Parameters
Field Description
Workflow The workflow to monitor. Select from the dropdown.
Button label Auto-filled from workflow name.
Poll interval How often to fetch fresh data from n8n.
View 1: last run (✅ or ❌ + time ago)
View 2: today's execution count
View 3: live active/inactive check
n8n offline → shows cached data with · dot
Free Action

Instance Health

Instance Health Free
Monitor your n8n server status

Pings the n8n health endpoint and shows whether your instance is up, degraded, or offline. On Stream Deck + shows Prometheus metrics on the LCD strip if available.

🟢 Instance healthy
🔴 Offline or unreachable
n8n offline → cached state with · dot
Prometheus metrics (CPU, memory, queue depth) are only available if your n8n instance has Prometheus enabled. This is not enabled by default on most cloud-hosted instances.
Free Action

Add Node

Add Node Free
Insert pre-mapped nodes with one keystroke

Sends a keyboard shortcut sequence to n8n to open the node picker and instantly insert a node. The node name is pasted via clipboard — it appears all at once, not typed character by character. n8n must be the active window when you press the button.

Available nodes (pre-mapped) — Free: 25 nodes
Node Category
HTTP Request Core
Webhook Core
Respond To Webhook Core
Merge Data
Aggregate Data
Sort Data
Limit Data
Remove Duplicates Data
Split Out Data
Summarize Data
Item Lists Data
Compare Datasets Data
Convert To File Files
Extract From File Files
Readwrite Files From Disk Files
HTML Transform
Markdown Transform
AI Transform AI
Git Dev Tools
n8n n8n
n8n Form n8n
n8n Form Trigger n8n
n8n Trigger n8n
MCP Server Trigger AI
Microsoft Agent 365 Trigger AI

The Pro version includes 200+ additional nodes with custom icons (Slack, Gmail, Notion, OpenAI, Google Sheets, Postgres, and many more).

Options
Field Description
Node picker already open If enabled, skips the N keystroke. Use when you clicked the + button on an existing node — the picker is already open.
n8n must be the active window. Click on the n8n canvas before pressing the button. If the node picker is already open (clicked +), enable the Node picker already open flag above.
Free Action

Canvas Shortcut

Canvas Shortcut Free
Common n8n canvas operations

Executes a keyboard shortcut in the n8n canvas: save, undo, run workflow, zoom to fit, and more. Requires n8n to be the active window.

Available shortcuts
Action Shortcut sent
Save Ctrl+S
Undo Ctrl+Z
Redo Ctrl+Shift+Z
Run workflow Ctrl+Enter
Zoom to fit Ctrl+Shift+H
Select all Ctrl+A
Pro Action — Stream Deck + Dial

Workflow Browser

Workflow Browser Pro
Browse and trigger workflows from the dial

Designed for the Stream Deck + dial. Rotate to scroll through your workflow list on the LCD strip, push to trigger or toggle the selected workflow. The most ergonomic way to manage many workflows.

Rotate → scroll workflow list on LCD
Push → trigger / toggle selected workflow
Touch LCD → show workflow details
Pro Action

Quick Retry

Quick Retry Pro
Retry the last failed execution instantly

Finds the most recent failed execution for a workflow and retries it with one button press. Saves you from navigating to n8n, finding the execution, and clicking retry manually.

Parameters
Field Description
Workflow The workflow to check for failed executions.
Button label Default: Retry.
Pro Action

Variable Injector

Variable Injector Pro
Send a webhook with custom key-value pairs

Like Trigger Workflow, but lets you configure a set of key-value pairs that are injected into the webhook body. Useful for workflows that behave differently based on parameters.

Example — Environment switcher
Webhook URL: https://n8n.example.com/webhook/deploy
Variables: env=staging, branch=develop
Body sent: {"env": "staging", "branch": "develop"}
Pro Action

Data Table Monitor

Data Table Monitor Pro
Live values from n8n Data Tables

Reads rows from an n8n Data Table via a webhook bridge workflow and displays an aggregated value on the button with configurable color thresholds. Shows the last known value if the connection drops.

n8n does not expose a public API for Data Tables. This action requires a simple bridge workflow that reads table data via webhook. One bridge workflow serves all your Data Table Monitor buttons — the table name is sent automatically as a query parameter.
Setup
  1. Download the bridge template: data-table-bridge.json (or click Download Bridge Template in the Property Inspector)
  2. In n8n, go to Workflows → Import from File and select the downloaded JSON file
  3. Open the imported workflow. In the "Get Table Rows" node, set Data table to ={{ $json.query.table }} and select By Name
  4. Activate the workflow (toggle ON) and copy the Production webhook URL from the Webhook node
  5. Back in Stream Deck, paste the webhook URL in the Webhook URL field of the Property Inspector
Parameters
Field Description
Webhook URL Production webhook URL from the bridge workflow.
Table name The n8n Data Table name. Sent to the webhook as ?table= parameter and shown on the key.
Column The column to aggregate.
Mode Auto-detect (sum if numeric, count if string), Sum, Count rows, or First value.
Display format Template for the displayed value. Use {{value}} as placeholder. Example: {{value}} leads
Warning if ≥ Value threshold for yellow badge. Leave empty to disable.
Error if ≥ Value threshold for red badge. Leave empty to disable.
Poll interval How often to refresh. Default: 30 seconds.
Example — Lead counter dashboard
Table: leads · Column: count · Mode: Count rows
Format: {{value}} leads · Warning: 50 · Error: 100
Result on key: 47 leads (green) → 73 leads (yellow) → 112 leads (red)
Pro Action

JSON Display

JSON Display Pro
Universal metric monitor via JSON endpoint

The most versatile monitoring action. Calls any URL that returns JSON, extracts a value using dot-notation path, and displays it on the key with color thresholds. Use it to monitor CPU, API quotas, prices, container counts — anything expressible as a number.

Parameters
Field Description
Data source Webhook URL: calls a URL directly. Workflow run: executes an n8n workflow and reads the output.
Webhook URL Any URL returning JSON. Must be accessible from your machine. Used when Data source = Webhook URL.
Workflow ID ID of the n8n workflow to execute. Used when Data source = Workflow run.
JSON path Dot-notation path to the value. Supports array indexing. Examples below.
Display format Template using {{value}}. Example: {{value}}% or {{value}} ms
Button label Top label (e.g. "CPU", "API quota", "Latency").
Warning if ≥ Threshold for 🟡 indicator.
Error if ≥ Threshold for 🔴 indicator.
Poll interval Refresh frequency.
JSON path examples
JSON response Path Extracted value
{"cpu": 73} cpu 73
{"data": {"metrics": {"cpu": 73}}} data.metrics.cpu 73
{"results": [{"count": 42}]} results[0].count 42
{"status": "ok"} status ok
Example — Server CPU monitor
Webhook URL: https://myserver.example.com/metrics
JSON path: data.cpu · Format: {{value}}%
Warning: 70 · Error: 90 · Label: CPU
Pro Action

AI Agent Status

AI Agent Status Pro
Trigger an AI agent and see the response on LCD

Press the button to send a request to an AI agent workflow. The LCD strip shows "Thinking…" while the workflow runs, then displays the first 80 characters of the response. Press again to cancel and restart.

Parameters
Field Description
Webhook URL The webhook URL of your n8n AI agent workflow.
Button label Displayed on the key. Default: AI Agent.
Show streaming When enabled, the LCD updates as soon as the response arrives.
Max chars How many characters of the response to show on the LCD strip. Default: 80.
💡
Your workflow must return a JSON response with one of these fields: output, response, text, or message. The action picks the first one it finds.
Pro Action

Parameter Prompt

Parameter Prompt Pro
Collect inputs before firing a workflow

When pressed, opens a small form in your browser to collect parameters at runtime. After you fill in the form and click Submit, the values are sent to the configured webhook. Useful for workflows that need a dynamic input each time (branch name, recipient, message text, etc.).

Parameters
Field Description
Webhook URL Where to send the collected parameters.
Prompt title Title shown on the input form. Default: Parameters.
Fields Up to 3 configurable input fields. Each field has: key (sent in JSON body), label (shown in form), type (text or select), and optional default value.
The form times out after 60 seconds. If you close the browser tab without submitting, no webhook is sent.
Pro Action

Add Custom Node

Add Custom Node Pro
Search and insert any node by name

Like Add Node, but lets you type any node name to search for — not limited to the pre-mapped nodes. Configure the node name in the Property Inspector once, then press to insert it instantly. The name is pasted via clipboard — it appears all at once, not typed character by character.

Parameters
Field Description
Node name The name to search for in the n8n node picker (e.g. Airtable, OpenAI, Supabase).
Node picker already open If enabled, skips the N keystroke. Use when you clicked the + button on an existing node — the picker is already open.
Button label Label on the key. Default: the node name.
n8n must be the active window. Click on the n8n canvas before pressing the button. If the node picker is already open (clicked +), enable the Node picker already open flag above.
💡
Example — Add connected node: Click the + button on an existing node → picker opens → enable Node picker already open in the PI → press the button → Airtable appears instantly and is selected.
Included Resources

Workflow Templates

Ready-to-import n8n workflows included with the plugin. Import via n8n → File → Import from file.

backup-system.json
Scheduled backup with Slack notification

Schedule Trigger → Execute Command (rsync/backup) → IF success → Slack notification. Configure source path, destination, and Slack channel.

Best paired with: Trigger Workflow or Canvas Shortcut
slack-notifier.json
Send formatted Slack messages via webhook

Webhook trigger → Set (format message) → Slack. Send {"message": "...", "channel": "#general"} from any Trigger Workflow button.

deploy-hook.json
One-button deploy: git pull, build, restart

Webhook trigger → Execute Command (git pull + npm build + pm2 restart) → HTTP Request to report status. The classic "deploy button" on your Stream Deck.

social-publish.json
Publish to multiple social platforms

Webhook trigger → Switch (by platform) → Twitter / LinkedIn / Telegram nodes. Send {"text": "...", "platform": "twitter"}.

Best paired with: Parameter Prompt (Pro)
Help

Troubleshooting

Common issues and how to fix them.

The plugin doesn't appear in the Stream Deck action list
Fully quit the Stream Deck app (right-click tray icon → Quit) and restart it. The plugin must be installed in %APPDATA%\Elgato\StreamDeck\Plugins\. If you installed via CLI link, verify the symlink is there.
"Connection test" fails in Global Settings
Check these in order:

1. Base URL has no trailing slash — correct: https://n8n.example.com
2. n8n is reachable from your machine (open the URL in a browser)
3. API Key is correct — generate a new one in n8n → Settings → API if unsure
4. Your n8n instance version supports the /api/v1 endpoint (requires n8n v0.188+)
Workflow dropdown shows empty or "0 workflows loaded"
Global Settings are missing or incorrect. Open the n8n Settings action, verify Base URL and API Key, and run the connection test. The workflow dropdown loads its list from your n8n instance using these credentials.
Trigger Workflow shows a yellow alert instead of green
This means the webhook call failed or timed out. Check:

1. The webhook URL is correct and the workflow is active in n8n
2. The workflow has a Webhook node (not a Schedule or other trigger)
3. Your machine can reach the n8n host
4. Try increasing the timeout setting in the Property Inspector
Toggle Workflow shows a dot · next to the status
The dot indicates the value is from cache — n8n was unreachable during the last poll. The value is from within the last 5 minutes. Check your n8n instance connectivity. The dot disappears as soon as the connection is restored.
Add Node / Canvas Shortcut does nothing
The n8n browser window must be in focus (active window) when you press the button. Click on the n8n canvas first, then press the Stream Deck button. On Windows, some browser security settings can block keystroke injection — try running the browser as standard user (not admin).
Stop Execution says "Nothing running" even though a workflow is running
The n8n public API currently reports executions with status=waiting for in-progress executions. If your execution is very short-lived, it may complete before the next 15-second poll. For live execution status, consider upgrading to Pro which includes Internal REST API support.
JSON path returns nothing or shows "—"
Test your JSON path against the actual response first. Open your webhook URL in a browser or Postman, copy the response, then trace the path manually.

Common mistakes:
• Path starts with the wrong key: response is {"data": {"value": 42}} but path is just value — should be data.value
• Array index missing: results.count instead of results[0].count