Browse Source

docs: list the nodes worth building next

A shortlist of what this platform does not have yet, ordered by how much each
would change day-to-day use. Records which entries are a JavaScript file and
which need engine work, so the cheap wins are not mistaken for the important
ones - Respond to Webhook and Execute Sub-workflow are worth more than any ten
integrations, and both need C++.
fszontagh 1 month ago
parent
commit
4ed020546a
3 changed files with 101 additions and 0 deletions
  1. 2 0
      CLAUDE.md
  2. 2 0
      README.md
  3. 97 0
      docs/node-roadmap.md

+ 2 - 0
CLAUDE.md

@@ -113,6 +113,8 @@ Nodes are loaded by the Runner service and executed in QuickJS. Hot-reload is su
 
 **See [docs/nodes.md](docs/nodes.md) for complete node creation guide.**
 
+**See [docs/node-roadmap.md](docs/node-roadmap.md) for nodes worth building next.**
+
 ### Migrating Nodes to Database
 
 After creating or modifying nodes in `nodes/`, migrate them to the running database:

+ 2 - 0
README.md

@@ -243,6 +243,8 @@ Workflow nodes are JavaScript modules located in the `nodes/` directory. Each no
 
 **See [docs/nodes.md](docs/nodes.md) for a complete guide on creating nodes.**
 
+**See [docs/node-roadmap.md](docs/node-roadmap.md) for nodes worth building next.**
+
 #### Example Node
 
 ```javascript

+ 97 - 0
docs/node-roadmap.md

@@ -0,0 +1,97 @@
+# Nodes Worth Building
+
+A shortlist of nodes this platform does not have yet, ordered by how much each
+would change day-to-day use rather than by how interesting it is to write.
+
+Everything here is a JavaScript file in `nodes/` unless marked **needs C++**.
+The runner already exposes `http`, `storage` (including the file store),
+`credentials`, `crypto`, `fs`, `process.exec`, `imap`, `smtp`, `mysql`,
+`postgresql` and `utils` - see [nodes.md](nodes.md) for the full API.
+
+## What exists today
+
+40 node definitions across: triggers (click, get/post/put, imap, schedule with
+cron and overlap control, error), flow control (if-condition, loop, wait), data
+(rss-reader, the six storage nodes), email (four imap nodes plus smtp-send), AI
+(ollama-chat, comfyui-prompt), integration (telegram-send, nextcloud-talk),
+media (image, via ImageMagick), OCR (seven nodes), database (mysql, postgresql),
+security (crypto), http (http-request) and developer (code).
+
+## Tier 1 - data shaping and flow control
+
+The gap felt on every workflow. Anything non-trivial currently becomes a Code
+node, which is why `35photo2anime` contains five of them.
+
+| Node | What it does | Notes |
+| --- | --- | --- |
+| **Set / Edit Fields** | Build an output object from expressions, keeping or dropping the rest | The single biggest win. Replaces most Code nodes |
+| **Switch** | Branch several ways on one value | `if-condition` only does true/false. Multiple outputs are already supported by the engine |
+| **Filter** | Drop items that do not match | Complements Loop; today this is an IF with a dead end |
+| **Merge** | Join two branches: append, combine by key, or wait for both | The engine already merges inputs by `targetInput` |
+| **Split Out / Aggregate** | Array field to items, and back again | Loop iterates but cannot reshape |
+| **Sort / Limit / Dedupe** | Ordering, top-N, unique by key | Small, and constantly needed |
+| **Template** | Render text from a template | Email bodies, chat messages. `utils.interpolate` does the work |
+| **JSON** | Parse, stringify, extract by path | Failures are readable now that `JSON.parse` is wrapped per script context |
+| **Date & Time** | Parse, format, add and subtract, timezones | Endless small Code nodes today |
+| **Stop and Error** | Fail deliberately with a message | Pairs with the existing error-trigger |
+
+## Tier 2 - triggers
+
+| Node | Notes |
+| --- | --- |
+| **Respond to Webhook** | **Needs C++.** `webhook_controller` fires and forgets, so there is no way to return a computed body. Without it the GET/POST/PUT triggers cannot back a real API |
+| **Database Change** | Poll a collection for new or changed documents. Pure JS over `storage.query` plus a stored cursor |
+| **File Watch** | Poll a directory through `fs.stat`. Pure JS when paired with a schedule |
+| **Queue / Manual Approval** | **Large.** Needs resumable executions; the engine currently runs a workflow to completion in one pass |
+
+Cron and interval scheduling are already covered by `schedule-trigger`,
+including its overlap policy.
+
+## Tier 3 - integrations
+
+All pure JavaScript over `http` and `credentials`, in the same shape as
+`telegram-send`.
+
+- **Nextcloud Files (WebDAV)** - upload, download, list, share. Note that
+  `http.request` silently turns any method outside its list into GET
+  (`src/runner/engine/script_engine.cpp`, `performHttpRequest`), so PROPFIND,
+  MKCOL and MOVE need a small engine fix first. Worth doing regardless.
+- **ntfy / Gotify** - self-hosted push, trivial
+- **Discord / Slack / Matrix** - webhook POST nodes, trivial
+- **Home Assistant** - REST plus a long-lived token
+- **Paperless-ngx** - pairs directly with the OCR nodes
+- **Immich / PhotoPrism** - pairs with the image pipeline
+- **S3 / MinIO** - needs SigV4 signing, which `crypto.hmac` can carry. Medium
+- **SFTP / FTP** - **needs C++**, though libcurl already speaks both
+- **Redis**, **MongoDB** - **needs C++**, a client each
+
+## Tier 4 - AI
+
+- **OpenAI-compatible Chat** - one node covers OpenAI, OpenRouter, vLLM, LM
+  Studio and llama.cpp. The most reach for the least work, built like
+  `ollama-chat`
+- **Embeddings + Vector Search** - store vectors in the database and do cosine
+  search in JS, turning the database into a small RAG store
+- **Speech to Text** - Whisper over HTTP
+- **A1111 / Forge** - the same shape as `comfyui-prompt`, for people not running
+  ComfyUI
+- **ComfyUI Upload Image** - `comfyui-prompt` submits graphs but cannot push an
+  input image to `/upload/image`, so image-to-image is out of reach
+
+## Tier 5 - operations
+
+- **Execute Sub-workflow** - **needs C++.** Call another workflow and use its
+  result. The main thing standing between this and reusable building blocks
+- **Execute Command** - wraps `process.exec` with arguments, a timeout and
+  captured output
+- **Sticky Note** - canvas annotation, WebUI only
+
+## Where to start
+
+Set / Edit Fields, Switch, and the OpenAI-compatible chat node. Those three
+would remove the most Code nodes from workflows that already exist.
+
+Two entries are ranked below their worth, purely because they need engine work
+rather than a JavaScript file: **Respond to Webhook** and **Execute
+Sub-workflow**. For the platform to feel finished rather than merely
+well-stocked, those matter more than any ten integrations.