@topcs/node-red-contrib-surrealdb 0.1.0
Node-RED nodes for SurrealDB (query + live queries)
node-red-contrib-surrealdb
Node-RED nodes to interact with SurrealDB, including a Live Query node.
Features:
- Config node for connection and authentication
- Query node for arbitrary SurrealQL (with variables)
- Live query node (table or custom
LIVE SELECT
) that emits change events
Install
From your Node-RED user directory:
npm install node-red-contrib-surrealdb
This package depends on surrealdb
.
Nodes
surrealdb-config
– connection to SurrealDB. For live queries, use a WebSocket RPC URL likews://127.0.0.1:8000/rpc
and set Namespace/Database.surrealdb-query
– run any SurrealQL. Put the query in the node or setmsg.query
. Optional variables frommsg.vars
.surrealdb-live
– subscribe to live updates.- Mode "Table": subscribes via
db.live(table, cb)
and emits{ action, payload }
. - Mode "Custom": executes a
LIVE SELECT ...
statement and keeps the subscription id. - Control with
msg.action
ofstart
,stop
, orrestart
. EnableAutostart
to subscribe on deploy.
- Mode "Table": subscribes via
Example
- Add a
surrealdb-config
node pointing tows://localhost:8000/rpc
, set NS/DB and user/password. - Add
SurrealDB live
in Table mode with tableperson
and connect to a Debug node. - Create/update/delete rows in
person
; events will stream into Node-RED.
Notes
- Live queries require a WebSocket RPC endpoint and a SurrealDB server version that supports live queries.
- The library API may differ slightly between versions of
surrealdb
. If you see connection orlive()
errors, updatesurrealdb
to the latest version.
Query Variables
You can bind variables into SurrealQL using $name
placeholders in the query. The Query node reads variables from a message field (default msg.vars
). This avoids string concatenation and prevents injection.
Configure
- In the Query node, set Variables → “From msg” and Msg field →
vars
(default). - Use
$varName
in your SurrealQL where you want the bound value.
- In the Query node, set Variables → “From msg” and Msg field →
SELECT example
- Query:
SELECT * FROM person WHERE age >= $min AND city = $city
. - Inject msg:
msg.vars = { min: 21, city: "Rome" }
- Query:
CREATE with CONTENT
- Query:
CREATE person CONTENT $data
. - Inject msg:
msg.vars = { data: { name: "Ada", age: 31 } }
- Query:
UPDATE/MERGE example
- Query:
UPDATE person:john MERGE $patch
. - Inject msg:
msg.vars = { patch: { age: 33 } }
- Query:
Using msg.query
- You can override the node’s Query field by setting
msg.query
at runtime and still passmsg.vars
for variables.
- You can override the node’s Query field by setting
Notes
- Variable names are case-sensitive and must match the
$placeholder
in the query. - Variables can be primitives, arrays, or objects (used with
CONTENT
/MERGE
). - Variables cannot replace identifiers (e.g., table or field names). For dynamic table/record operations, prefer the Record node.
- Variable names are case-sensitive and must match the
Local Development (no publish)
Develop and run this module locally in Node-RED without publishing to npm.
Prerequisites
- Install dependencies in this repo:
npm install
- Have Node-RED installed (globally or via npx). Example:
npm install -g node-red
- Install dependencies in this repo:
Option 1: npm link (recommended)
- In this repo:
npm link
- In your Node-RED user dir (usually
~/.node-red
):npm link node-red-contrib-surrealdb
- Start Node-RED (verbose helps during dev):
node-red -v
- After code changes, restart Node-RED to reload nodes.
- To unlink: in
~/.node-red
runnpm unlink node-red-contrib-surrealdb
, then in this repo runnpm unlink
.
- In this repo:
Option 2: Local path install
- In this repo:
npm install
- In
~/.node-red
:npm install /absolute/path/to/node-red-contrib-surrealdb
- Start or restart Node-RED. Re-run step 2 after changes (or switch to Option 1 for faster iteration).
- In this repo:
Tips
- Ensure the SurrealDB connection URL uses
ws://
orwss://
and points to/rpc
for live queries. - Use Node-RED debug logs: run with
-v
and check the console for node status and errors.
- Ensure the SurrealDB connection URL uses
Example Flow
An importable example for testing the Live node is provided at examples/live-query-basic.json
.
Import
- In Node-RED, menu → Import → select file → choose
examples/live-query-basic.json
. - Open the
SurrealDB Live Demo
tab. - Double-click the connection node and set URL/NS/DB and credentials.
- The
SurrealDB live
node subscribes to tableperson
with Autostart enabled. - Use the
Start
/Stop
inject nodes to control the subscription if needed.
- In Node-RED, menu → Import → select file → choose
Test
- Create/update/delete records in the
person
table (e.g., from SurrealQL console or another flow). - Watch events appear in the
Live Out
Debug node. Messages containmsg.action
andmsg.payload
.
- Create/update/delete records in the