Zebflow Documentation

Node Catalog

Complete catalog of built-in pipeline nodes

Node Catalog

Zebflow includes 67+ built-in nodes across 9 categories. For detailed flags on any node, use help(topic="pipeline/nodes/n.{kind}") via MCP.

Triggers

NodePurposeKey flags
trigger.webhookHTTP endpoint--path --method [--auth-type jwt|hmac|api_key] [--auth-credential] [--auth-required-role]
trigger.cronScheduled execution--schedule "cron-expr" [--timezone]
trigger.manualRun on demand(none)
trigger.wsWebSocket room event--event name --room id
trigger.ws.clientOutbound WebSocket--url wss://... --event message
trigger.kv.subscribeReact to KV changes--prefix key: [--durable]
trigger.mcpMCP tool invocation--tool-name name --tool-description desc

Web

NodePurposeKey flags
web.responseServe HTTP response (JSON, TSX page, redirect, cookie)--template --status --location --body --set-cookie --header
web.docs.generateGenerate static docs site from markdown--docs-root --output-dir --template-folder [--site-title] [--deploy-base-url]
web.static.generateRender TSX to static HTML file--template --output-path [--route] [--on-conflict]

web.response decision matrix

IntentDSL
JSON (full payload)| web.response
JSON (specific field)| web.response --body $.rows
Render TSX page| web.response --template pages/home.tsx
Redirect| web.response --location /somewhere
Error with message| web.response --status 403 --message "Access denied"
Error page| web.response --template pages/404.tsx --status 404
Set session cookie| web.response --set-cookie name=session,value=$.token,http-only,max-age=86400

Database

NodeCredential?Example
pg.queryYes--credential main-db -- "SELECT * FROM users"
pg.mutateYes--credential main-db -- "INSERT INTO ..."
mysql.queryYes--credential my-mysql -- "SELECT ..."
mysql.mutateYes--credential my-mysql -- "INSERT ..."
sekejap.queryNo (built-in)-- "SELECT * FROM posts"
sekejap.mutateNo (built-in)-- "INSERT INTO posts ..."

Parameterized queries: --params-expr "{{ [$trigger.params.id] }}" with $1, $2 placeholders.

Auth

NodePurpose
auth.token.createCreate JWT — --credential key [--expires-in] [--claim k=$.field]
auth.token.verifyVerify JWT — --credential key

Webhook-level auth: trigger.webhook --auth-type jwt --auth-credential key --auth-required-role admin,editor

File System (ZebFS)

NodePurposeKey flags
fs.saveSave uploaded file--field name --folder path
fs.thumbnailGenerate image thumbnail--width N --height N --format jpg|png --folder path
fs.getRead file content--path file/path
fs.putWrite file content--path file/path
fs.listList directory--path dir/
fs.headFile metadata--path file/path
fs.deleteDelete file--path file/path
fs.copyCopy file--from path --to path
fs.moveMove/rename--from path --to path
fs.mkdirCreate directory--path dir/path

Files served at GET /fs/{owner}/{project}/{path}.

Key-Value Store

NodePurposeKey flags
kv.setWrite value--key K [--durable] [--ttl secs]
kv.getRead value--key K
kv.deleteDelete key--key K
kv.listList by prefix--prefix P [--durable]
kv.existsCheck existence--key K
kv.incrAtomic counter--key K [--amount N]
kv.publishPub/sub send--channel name

--durable persists to disk. Without it, entries are in-memory only.

Table Processing

NodePurpose
table.convertConvert between CSV, JSON, Parquet formats
table.querySQL query over tabular data (DataFusion engine)

Logic (graph mode only)

NodeOutput pinsKey flags
logic.if:true :false--expr "js expression"
logic.match:case1 :case2 :default--expr "js" --cases a,b --default x
logic.collect:outWaits for all parallel branches
logic.foreach:item--items-path /array [--dispatch seq]
logic.reduce:out--init-expr "{}" --step-expr "{}"
logic.retry:retry :failed--max-attempts N [--delay-ms]

MapServer (geospatial)

NodePurpose
ms.publishPublish GeoJSON as vector tile layer
ms.unpublishRemove a published layer
ms.getGet layer details
ms.listList published layers

Layers served at GET /ms/{owner}/{project}/{path}. Use with zeb/deckgl for rendering.

WebSocket

NodePurposeKey flags
ws.emitPush event to room--event name --to all|session|others
ws.sync_statePatch room state--op set|merge|delete --path /ptr --value-path /ptr
ws.client.sendSend via outbound WS--message-path /

AI & Agents

NodePurpose
ai.promptLLM text generation — --credential key --model name
ai.embeddingGenerate embeddings — --credential key
ai.agentAgentic loop with tool pipelines — --credential key --tools fn1,fn2
ai.ttsText-to-speech — --provider piper

Other

NodePurpose
scriptInline JS — -- "return { ok: true };"
http.requestExternal HTTP — --url URL --method GET|POST [--header k=v]
transform.setSet fields — --field name --value val
n.c.*Composite node packages
n.wasm.*WASM node packages