Low-code programming for event-driven applications

Overview

Node-RED

http://nodered.org

Build Status Coverage Status

Low-code programming for event-driven applications.

Node-RED: Low-code programming for event-driven applications

Quick Start

Check out http://nodered.org/docs/getting-started/ for full instructions on getting started.

  1. sudo npm install -g --unsafe-perm node-red
  2. node-red
  3. Open http://localhost:1880

Getting Help

More documentation can be found here.

For further help, or general discussion, please use the Node-RED Forum or slack team.

Developers

If you want to run the latest code from git, here's how to get started:

  1. Clone the code:

     git clone https://github.com/node-red/node-red.git
     cd node-red
    
  2. Install the node-red dependencies

     npm install
    
  3. Build the code

     npm run build
    
  4. Run

     npm start
    

Contributing

Before raising a pull-request, please read our contributing guide.

This project adheres to the Contributor Covenant 1.4. By participating, you are expected to uphold this code. Please report unacceptable behavior to any of the project's core team at [email protected].

Authors

Node-RED is a project of the OpenJS Foundation.

It was created by IBM Emerging Technology.

Copyright and license

Copyright OpenJS Foundation and other contributors, https://openjsf.org under the Apache 2.0 license.

Comments
  • MQTT in Node: Error stopping node: Close timed out

    MQTT in Node: Error stopping node: Close timed out

    What are the steps to reproduce?

    Import the flow in: https://cookbook.nodered.org/mqtt/connect-to-broker, start any MQTT broker (e.g. Mosquitto) and deploy EDIT: The error is not evident with Mosquitto, as initially reported, but e.g. with https://github.com/martin-doyle/node-red-contrib-aedes.

    What happens?

    Every time the flow is deployed, the MQTT in node gets stuck for a while, then output: "Error stopping node: Close timed out"

    What do you expect to happen?

    The MQTT in node is immediately closed without errors and the flow is deployed without error and time wasting.

    Please tell us about your environment:

    • [ ] Node-RED version: 1.3.2
    • [ ] Node.js version: 14.6.1
    • [ ] npm version:
    • [ ] Platform/OS: Win 10
    • [ ] Browser: Chrome
    opened by hybuild-project 61
  • Git SSH-Key based authentication failes, if username contains

    Git SSH-Key based authentication failes, if username contains "AT" character

    Current Behavior

    Hello, Short: Access to a GIT system using ssh-key based authentication seems to fail because the username contains the "@" character.

    I use Header based authentication on node-red and my usernames have the format of an email adress (e.g. [email protected]). If we try to authenticate using ssh-key based authentication it failes.

    Expected Behavior

    Expected behaviour is, that ssh-key authentication works.

    Steps To Reproduce

    Set username (e.g. using reverse-proxy header variable to an email adress and try to fetch branches of a GIT system (e.g. gitea). Configure in the project an ssh based git access ssh://git@... or git@... Set User Email and Name, generate a key. Try to push to the git repo (or first fetch branches). It will fail.

    There are only these log messages:

    4 Nov 16:13:26 - [trace] runGitCommandWithAuth {}
    4 Nov 16:13:26 - [trace] git["fetch","origin"]
    
    

    What I tried: a) Manually try an ssh:

    
     ssh -i /home/nodered/.node-red/projects/.sshkeys/Firstname-secondname.lastname\@example.com_gitea_key [email protected]
    LDAP Login enabled
    PTY allocation request failed on channel 0
    Hi there, Firstname-secondname.lastname_example.com! You've successfully authenticated with the key named TheHiveWorkflow, but Gitea does not provide shell access.
    If this is unexpected, please log in with password and setup Gitea under another user.
    Connection to [email protected] closed.
    

    b) Copied private-key /home/nodered/.node-red/projects/.sshkeys/[email protected]_gitea_key to /home/nodered/.ssh/id_rsa ==> Everything works

    c) I tried to output auth.key_path arround line 577 in: /usr/lib/node-red/node_modules/@node-red/runtime/lib/storage/localfilesystem/projects/git/index.js but it was not set (even it was configured):

    Example flow

    n.a.

    Environment

    • Node-RED version: 2.1.3
    • Node.js version: v14.17.6
    • npm version: 6.14.15
    • Platform/OS: RHEL7
    • Browser: Chrome
    • git version: git version 2.31.1
    needs-triage 
    opened by crackytsi 42
  • mqtt-control

    mqtt-control

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)

    Proposed changes

    Add proposed mqtt-control as specified here and discussed here

    Implementation notes

    I will keep this light as I know your time is limited...

    There is one major difference from the spec - that is using msg.action (string) to simplify the action (as proposed in the forum thread). That means the associated properties are now in a separate object. This permits us to provide a visual cue on what the "actions" are. Additionally, there is a dynamic tip to which property is required when the user selects an action. Lastly, the built in help details what property is used.

    Checklist

    • [x] I have read the contribution guidelines
    • [x] For non-bugfix PRs, I have discussed this change on the forum/slack team.
    • [x] I have run grunt to verify the unit tests pass
    • [ ] I have added suitable unit tests to cover the new/changed functionality

    Demo flow to help test the functionality...

    [{"id":"8c8b272.301f1d8","type":"inject","z":"4b3f21a3.ba434","name":"sub multiple [{test/test3},{test/test4},\"test/test5\"]","props":[{"p":"action","v":"subscribe","vt":"str"},{"p":"subscription","v":"[{\"topic\":\"test/test3\",\"datatype\":\"json\",\"qos\":0},{\"topic\":\"test/test4\",\"datatype\":\"utf8\",\"qos\":1},\"test/test5\"]","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1300,"y":1380,"wires":[["d835cbd0.207b28"]]},{"id":"18724d21.34e9a3","type":"debug","z":"4b3f21a3.ba434","name":"MQTT messages","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1570,"y":2020,"wires":[]},{"id":"15399895.933047","type":"inject","z":"4b3f21a3.ba434","name":"test/test1 (datatype auto)","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test1","payload":"{\"isJSON\":true}","payloadType":"json","x":730,"y":1800,"wires":[["2bb55579.21c2aa"]]},{"id":"e24875ef.314bd8","type":"inject","z":"4b3f21a3.ba434","name":"test/test2 (datatype json)","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test2","payload":"{\"key\": \"value\"}","payloadType":"json","x":730,"y":1840,"wires":[["2bb55579.21c2aa"]]},{"id":"2bb55579.21c2aa","type":"mqtt out","z":"4b3f21a3.ba434","name":"","topic":"","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"7bab12a9.b04bcc","x":990,"y":1880,"wires":[]},{"id":"ef265819.c24d98","type":"inject","z":"4b3f21a3.ba434","name":"sub single string \"test/test1\"","props":[{"p":"action","v":"subscribe","vt":"str"},{"p":"subscription","v":"test/test1","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1240,"y":1300,"wires":[["d835cbd0.207b28"]]},{"id":"105e4283.278b6d","type":"inject","z":"4b3f21a3.ba434","name":"sub single object {test/test2}","props":[{"p":"action","v":"subscribe","vt":"str"},{"p":"subscription","v":"{\"topic\":\"test/test2\",\"datatype\":\"json\",\"qos\":0}","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1240,"y":1340,"wires":[["d835cbd0.207b28"]]},{"id":"8900a759.0712a8","type":"inject","z":"4b3f21a3.ba434","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test3","payload":"{\"key\": \"value\"}","payloadType":"json","x":730,"y":1880,"wires":[["2bb55579.21c2aa"]]},{"id":"ca90115a.593aa","type":"inject","z":"4b3f21a3.ba434","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test4","payload":"{\"key\": \"value\"}","payloadType":"json","x":730,"y":1920,"wires":[["2bb55579.21c2aa"]]},{"id":"400e95b5.50d65c","type":"inject","z":"4b3f21a3.ba434","name":"test/test5 (with v5 props)","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"userProperties","v":"{\"fred\":\"123\"}","vt":"json"},{"p":"responseTopic","v":"test/reply","vt":"str"},{"p":"contentType","v":"JSON","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test5","payload":"{\"key\": \"value\"}","payloadType":"json","x":730,"y":1960,"wires":[["2bb55579.21c2aa"]]},{"id":"e7e02690.7991b8","type":"inject","z":"4b3f21a3.ba434","name":"unsub single test/test1","props":[{"p":"action","v":"unsubscribe","vt":"str"},{"p":"subscription","v":"{         \"topic\": \"test/test5\",         \"datatype\": \"json\",         \"qos\": 0     }","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1220,"y":1480,"wires":[["1e612121.aa6c4f"]]},{"id":"42888285.314b4c","type":"inject","z":"4b3f21a3.ba434","name":"list subscriptions","props":[{"p":"action","v":"list","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":700,"y":1460,"wires":[["47c8c347.17c61c"]]},{"id":"3e957fe6.3a1e8","type":"inject","z":"4b3f21a3.ba434","name":"unsub all [\"test/test1\", ... , \"test/test5\"]","props":[{"p":"action","v":"unsubscribe","vt":"str"},{"p":"subscription","v":"[\"test/test1\",\"test/test2\",\"test/test3\",\"test/test4\",\"test/test5\"]","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1270,"y":1520,"wires":[["1e612121.aa6c4f"]]},{"id":"b7bf8c92.303c3","type":"debug","z":"4b3f21a3.ba434","name":"control messages","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1570,"y":2060,"wires":[]},{"id":"139f8b7c.4fbf15","type":"comment","z":"4b3f21a3.ba434","name":"publish to regular mqtt out","info":"","x":730,"y":1760,"wires":[]},{"id":"357dd410.c98afc","type":"comment","z":"4b3f21a3.ba434","name":"Unsubscribe topics","info":"","x":1210,"y":1440,"wires":[]},{"id":"ff246de5.2a665","type":"comment","z":"4b3f21a3.ba434","name":"Subscribe topics","info":"","x":1200,"y":1260,"wires":[]},{"id":"e12462e5.a3056","type":"inject","z":"4b3f21a3.ba434","name":"connect","props":[{"p":"action","v":"connect","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":670,"y":1340,"wires":[["47c8c347.17c61c"]]},{"id":"558d476b.0ced78","type":"inject","z":"4b3f21a3.ba434","name":"disconnect","props":[{"p":"action","v":"disconnect","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":680,"y":1300,"wires":[["47c8c347.17c61c"]]},{"id":"7fe8eb8f.031624","type":"inject","z":"4b3f21a3.ba434","name":"connect with opts V1","props":[{"p":"options","v":"{\"url\":\"mqtt://192.168.1.50:1883\",\"birth\":{\"topic\":\"test/lwt/birth-V1\",\"qos\":0,\"retain\":false,\"payload\":\"birth-V1\",\"properties\":{\"correlationData\":\"hello birth-V1\",\"userProperties\":{\"prop1\":\"birth-V1\"},\"contentType\":\"application/text\"}},\"close\":{\"topic\":\"test/lwt/close-V1\",\"qos\":0,\"retain\":false,\"payload\":\"close-V1\",\"properties\":{\"correlationData\":\"hello close-V1\",\"userProperties\":{\"prop1\":\"close-V1\"},\"contentType\":\"application/text\"}},\"will\":{\"topic\":\"test/lwt/will-V1\",\"qos\":0,\"retain\":false,\"payload\":\"will-V1\",\"properties\":{\"correlationData\":\"hello will-V1\",\"userProperties\":{\"prop1\":\"will-V1\"},\"contentType\":\"application/text\"}}}","vt":"json"},{"p":"action","v":"connect","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":710,"y":1380,"wires":[["47c8c347.17c61c"]]},{"id":"c5bb1c01.fc48f","type":"inject","z":"4b3f21a3.ba434","name":"test/test1 (datatype auto)","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test1","payload":"a string payload","payloadType":"str","x":730,"y":1540,"wires":[["ff4abd8b.d5d8c"]]},{"id":"1fbb6fb0.2e21c","type":"inject","z":"4b3f21a3.ba434","name":"test/test2 (datatype json)","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test2","payload":"{\"bool\":true,\"string\":\"hello\"}","payloadType":"json","x":730,"y":1580,"wires":[["ff4abd8b.d5d8c"]]},{"id":"13e8f594.bded7a","type":"inject","z":"4b3f21a3.ba434","name":"test/test3 (v5 props)","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"responseTopic","v":"test/reply","vt":"str"},{"p":"userProperties","v":"{\"prop1\":\"val1\",\"prop2\":\"val2\"}","vt":"json"},{"p":"correlationData","v":"this_is_correl_data","vt":"str"},{"p":"contentType","v":"application/json","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test3","payload":"{\"bool\":true,\"string\":\"hello\"}","payloadType":"json","x":710,"y":1620,"wires":[["ff4abd8b.d5d8c"]]},{"id":"94ae6596.a55898","type":"link out","z":"4b3f21a3.ba434","name":"publish->mqtt control","links":["17bbde58.6bd362"],"x":1260,"y":1620,"wires":[],"l":true},{"id":"17bbde58.6bd362","type":"link in","z":"4b3f21a3.ba434","name":"mqtt control","links":["47c8c347.17c61c","94ae6596.a55898","d835cbd0.207b28","1e612121.aa6c4f","e38fb27c.31965","9d777fc1.0cfec"],"x":1170,"y":2040,"wires":[["1ed4d33.7151c2d"]],"l":true},{"id":"47c8c347.17c61c","type":"link out","z":"4b3f21a3.ba434","name":"actions->mqtt control","links":["17bbde58.6bd362"],"x":940,"y":1340,"wires":[],"l":true},{"id":"d835cbd0.207b28","type":"link out","z":"4b3f21a3.ba434","name":"subscribe->mqtt control","links":["17bbde58.6bd362"],"x":1590,"y":1320,"wires":[],"l":true},{"id":"1e612121.aa6c4f","type":"link out","z":"4b3f21a3.ba434","name":"unsubscribe->mqtt control","links":["17bbde58.6bd362"],"x":1590,"y":1500,"wires":[],"l":true},{"id":"9d1fa392.f2af3","type":"comment","z":"4b3f21a3.ba434","name":"publish via mqtt control","info":"","x":720,"y":1500,"wires":[]},{"id":"c36ac379.0b0c2","type":"comment","z":"4b3f21a3.ba434","name":"connect / disconnect / other","info":"","x":720,"y":1260,"wires":[]},{"id":"1ed4d33.7151c2d","type":"mqtt control","z":"4b3f21a3.ba434","name":"","broker":"7bab12a9.b04bcc","action":"setby","x":1350,"y":2040,"wires":[["18724d21.34e9a3"],["b7bf8c92.303c3"]]},{"id":"43229d30.74ea64","type":"mqtt in","z":"4b3f21a3.ba434","name":"","topic":"test/lwt/#","qos":"2","datatype":"auto","broker":"7bab12a9.b04bcc","nl":false,"rap":true,"rh":0,"x":1340,"y":2100,"wires":[["de1ac78e.3de038"]]},{"id":"de1ac78e.3de038","type":"debug","z":"4b3f21a3.ba434","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1530,"y":2100,"wires":[]},{"id":"e6b741ea.22857","type":"inject","z":"4b3f21a3.ba434","name":"publish no topic","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"action","v":"publish","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1200,"y":1800,"wires":[["9d777fc1.0cfec"]]},{"id":"c53e04c6.f38828","type":"inject","z":"4b3f21a3.ba434","name":"subscribe no msg.subscription","props":[{"p":"action","v":"subscribe","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1240,"y":1880,"wires":[["9d777fc1.0cfec"]]},{"id":"5856b83d.3c2938","type":"comment","z":"4b3f21a3.ba434","name":"bad tests","info":"","x":1180,"y":1720,"wires":[]},{"id":"ff4abd8b.d5d8c","type":"change","z":"4b3f21a3.ba434","name":"","rules":[{"t":"set","p":"action","pt":"msg","to":"publish","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1060,"y":1620,"wires":[["94ae6596.a55898"]]},{"id":"1dc959da.08f5c6","type":"inject","z":"4b3f21a3.ba434","name":"subscribe bad msg.subscription","props":[{"p":"action","v":"subscribe","vt":"str"},{"p":"subscription","v":"{\"TOPIC\":\"test/test1\"}","vt":"json"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1250,"y":1920,"wires":[["9d777fc1.0cfec"]]},{"id":"95157fea.89116","type":"inject","z":"4b3f21a3.ba434","name":"publish bad topic","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"action","v":"publish","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"#/#/+/#","payload":"","payloadType":"date","x":1200,"y":1840,"wires":[["9d777fc1.0cfec"]]},{"id":"b9f15f39.e3d4","type":"inject","z":"4b3f21a3.ba434","name":"bad action","props":[{"p":"action","v":"deliberate_error","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1180,"y":1760,"wires":[["9d777fc1.0cfec"]]},{"id":"ce2c4a8f.bb5998","type":"inject","z":"4b3f21a3.ba434","name":"subscribe bad topic in msg.subscription","props":[{"p":"action","v":"subscribe","vt":"str"},{"p":"subscription","v":"#/#/+/#","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":1270,"y":1960,"wires":[["9d777fc1.0cfec"]]},{"id":"e16b3361.47361","type":"complete","z":"4b3f21a3.ba434","name":"","scope":["1ed4d33.7151c2d"],"uncaught":false,"x":1350,"y":2160,"wires":[["f1f605ad.680d88"]]},{"id":"f1f605ad.680d88","type":"debug","z":"4b3f21a3.ba434","name":"mqtt control complete monitor","active":false,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":1610,"y":2160,"wires":[]},{"id":"9d777fc1.0cfec","type":"link out","z":"4b3f21a3.ba434","name":"bad test->mqtt control","links":["17bbde58.6bd362"],"x":1540,"y":1840,"wires":[],"l":true},{"id":"2f9a4f56.30938","type":"inject","z":"4b3f21a3.ba434","name":"connect with opts V2","props":[{"p":"options","v":"{\"broker\":\"192.168.1.50\",\"port\":1883,\"cleansession\":false,\"birth\":{\"topic\":\"test/lwt/birth-V2\",\"qos\":0,\"retain\":false,\"payload\":\"birth-V2\",\"properties\":{\"correlationData\":\"hello birth-V2\",\"userProperties\":{\"prop1\":\"birth-V2\"},\"contentType\":\"application/text\"}},\"close\":{\"topic\":\"test/lwt/close-V2\",\"qos\":0,\"retain\":false,\"payload\":\"close-V2\",\"properties\":{\"correlationData\":\"hello close-V2\",\"userProperties\":{\"prop1\":\"close-V2\"},\"contentType\":\"application/text\"}},\"will\":{\"topic\":\"test/lwt/will-V2\",\"qos\":0,\"retain\":false,\"payload\":\"will-V2\",\"properties\":{\"correlationData\":\"hello will-V2\",\"userProperties\":{\"prop1\":\"will-V2\"},\"contentType\":\"application/text\"}}}","vt":"json"},{"p":"action","v":"connect","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":710,"y":1420,"wires":[["47c8c347.17c61c"]]},{"id":"7f40d44f.03b97c","type":"inject","z":"4b3f21a3.ba434","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test4","payload":"{\"key\": \"value\"}","payloadType":"json","x":730,"y":1660,"wires":[["ff4abd8b.d5d8c"]]},{"id":"269b950a.5744aa","type":"inject","z":"4b3f21a3.ba434","name":"test/test5 (with v5 props)","props":[{"p":"payload"},{"p":"topic","vt":"str"},{"p":"userProperties","v":"{\"fred\":\"123\"}","vt":"json"},{"p":"responseTopic","v":"test/reply","vt":"str"},{"p":"contentType","v":"JSON","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"test/test5","payload":"{\"key\": \"value\"}","payloadType":"json","x":730,"y":1700,"wires":[["ff4abd8b.d5d8c"]]},{"id":"7bab12a9.b04bcc","type":"mqtt-broker","name":"PI","broker":"xxxx","port":"1883","clientid":"","autoConnect":false,"usetls":false,"compatmode":false,"protocolVersion":"5","keepalive":"60","cleansession":true,"birthTopic":"test/lwt/birth","birthQos":"0","birthPayload":"payload of test/lwt/birth","birthMsg":{"contentType":"application/json","userProps":"{\"prop\":\"birth-prop\"}","respTopic":"test/lwt/birthResponse","correl":"test/lwt/birth:Correl","expiry":"60"},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"sessionExpiry":""}]
    
    opened by Steve-Mcl 40
  • Mobile/Tablet Support

    Mobile/Tablet Support

    We want to get the UI working on tablets.

    There is some early support already in there for touch events, but it is not complete. For example, you can start to drag a new link between nodes, but it doesn't end properly.

    The layout could also do with being optimised.

    Function Changes

    • [x] enable dragging out of palette
    • [x] prevent native zoom
    • [x] enable pinch-zoom in workspace ( PR coming from @TJKoury )
    • [x] unable to wire nodes together (a3dea6ec0dc92ae2880a035b2fb4361b697f3ad0)
    • [x] double tap to edit rather than long-touch (ec5985eaa32066c34ecd39bc1099aeb6d6a16e64)
    • [x] how to delete a node (radial menu: e524393d8792e4cd75b6520b727e65b803457792)
    • [x] how to undo change (radial menu: e524393d8792e4cd75b6520b727e65b803457792)
    • [x] how to group select (lasso) - long-touch to disable scroll/enable lasso? (0e8f0735cc207c1503f1ef91a7a9c43604a802c7)
    • [ ] import flow placement - click to place, needs a visual cue to touch as you don't drag the nodes
    • [ ] pinch zoom deselects current selection
    • [x] pinch zoom triggers radial menu (2fa82d9)
    • [x] trigger radialMenu on long-touch with link selected

    Mobile-specific UI changes

    • [ ] decide on server-side or client-side mobile detection (ie serve mobile.html, or insert mobile specific css/javascript adaptations)
    • [x] mobile-only tool bar to enable delete/undo/other? actions (not needed due to radialMenu)
    • [x] sidebar resize target needs to be more obvious (aa4bf4d64060dab47d75c5dfc00dc4dd06429e23)
    • [x] sidebar drag in from RH side (aa4bf4d64060dab47d75c5dfc00dc4dd06429e23)
    • [ ] drop-down menu changed to be slide-in menu
    • [ ] palette drag in from LH side
    enhancement editor 
    opened by knolleary 39
  • Double login prompt - first in browser, second in popup.

    Double login prompt - first in browser, second in popup.

    Current Behavior

    When first logging in (or using incognito), I am presented with the standard Node-RED log Username: Password: and login button page

    image

    After logging in, I get the progress bar and "loading nodes" message and a second modal popup login box appears:

    omg_whoops

    Audit logs don't show any obvious difference whether I log into the second dialog or not.

    So what is it?

    Expected Behavior

    Normal, single, nodered welcome page login. Just one time, without the need to deal with a second popup.

    Steps To Reproduce

    Load nodered web interface, log in as usual.

    Example flow

    example flow not applicable
    

    Environment

    • Node-RED version: 1.3.5
    • Node.js version: v14.18.2
    • npm version: 6.14.15
    • Platform/OS: Raspberry Pi 400 / Debian 10 Buster
    • Browser: Chrome 9

    8.0.4758.82

    sample log where I cancel the second popup

    first load page and log in with credentials:

    11 Feb 12:34:19 - [audit] {"event":"auth.login","username":"admin","client":"node-red-editor","scope":"*","level":98,"timestamp":1644600859288}
    11 Feb 12:34:19 - [audit] {"event":"plugins.list.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/plugins","ip":"192.168.1.200","timestamp":1644600859554}
    11 Feb 12:34:19 - [audit] {"event":"comms.open","level":98,"timestamp":1644600859578}
    11 Feb 12:34:19 - [audit] {"event":"comms.auth","user":{"username":"admin","permissions":"*"},"level":98,"timestamp":1644600859603}
    11 Feb 12:34:19 - [audit] {"event":"plugins.configs.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/plugins","ip":"192.168.1.200","timestamp":1644600859634}
    11 Feb 12:34:19 - [audit] {"event":"nodes.list.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/nodes","ip":"192.168.1.200","timestamp":1644600859665}
    11 Feb 12:34:19 - [audit] {"event":"nodes.icons.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/icons","ip":"192.168.1.200","timestamp":1644600859743}
    11 Feb 12:34:19 - [audit] {"event":"nodes.configs.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/nodes","ip":"192.168.1.200","timestamp":1644600859779}
    
    

    hit cancel:

    11 Feb 12:34:54 - [audit] {"event":"flows.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/flows","ip":"192.168.1.200","timestamp":1644600894457}
    

    Here's the version where I enter the credentials in the popup

    first load page and log in with credentials:

    11 Feb 12:35:47 - [audit] {"event":"auth.login","username":"admin","client":"node-red-editor","scope":"*","level":98,"timestamp":1644600947179}
    11 Feb 12:35:47 - [audit] {"event":"plugins.list.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/plugins","ip":"192.168.1.200","timestamp":1644600947485}
    11 Feb 12:35:47 - [audit] {"event":"comms.open","level":98,"timestamp":1644600947518}
    11 Feb 12:35:47 - [audit] {"event":"comms.auth","user":{"username":"admin","permissions":"*"},"level":98,"timestamp":1644600947559}
    11 Feb 12:35:47 - [audit] {"event":"plugins.configs.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/plugins","ip":"192.168.1.200","timestamp":1644600947627}
    11 Feb 12:35:47 - [audit] {"event":"nodes.list.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/nodes","ip":"192.168.1.200","timestamp":1644600947661}
    11 Feb 12:35:47 - [audit] {"event":"nodes.icons.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/icons","ip":"192.168.1.200","timestamp":1644600947769}
    11 Feb 12:35:47 - [audit] {"event":"nodes.configs.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/nodes","ip":"192.168.1.200","timestamp":1644600947798}
    

    enter same credentials:

    11 Feb 12:36:02 - [audit] {"event":"flows.get","level":98,"user":{"username":"admin","permissions":"*"},"path":"/flows","ip":"192.168.1.200","timestamp":1644600962993}
    
    needs-triage 
    opened by y8s 33
  • RequestError: Parse Error: Missing expected CR after header value

    RequestError: Parse Error: Missing expected CR after header value

    Current Behavior

    When doing a simple GET request with no payload to an endpoint that should return a binary buffer (an image) I get the following error:

    RequestError: Parse Error: Missing expected CR after header value

    The node was working before version 3. Maybe it is related to https://github.com/nodejs/node/issues/43798

    Expected Behavior

    Return a binary buffer.

    Steps To Reproduce

    This is the node:

    [
        {
            "id": "912ff074.7418",
            "type": "http request",
            "z": "61690af24820e126",
            "name": "",
            "method": "GET",
            "ret": "bin",
            "paytoqs": "ignore",
            "url": "http://192.168.7.14:8023/snapshot.cgi",
            "tls": "",
            "persist": false,
            "proxy": "",
            "authType": "",
            "senderr": false,
            "credentials": {},
            "x": 250,
            "y": 40,
            "wires": [
                [
                    "bad44d5a.892d3"
                ]
            ]
        }
    ]
    

    Example flow

    [
        {
            "id": "469f2259.87ca3c",
            "type": "inject",
            "z": "61690af24820e126",
            "name": "",
            "props": [
                {
                    "p": "payload"
                },
                {
                    "p": "topic",
                    "vt": "str"
                }
            ],
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "x": 100,
            "y": 120,
            "wires": [
                [
                    "912ff074.7418"
                ]
            ]
        },
        {
            "id": "912ff074.7418",
            "type": "http request",
            "z": "61690af24820e126",
            "name": "",
            "method": "GET",
            "ret": "bin",
            "paytoqs": "ignore",
            "url": "http://192.168.7.14:8023/snapshot.cgi",
            "tls": "",
            "persist": false,
            "proxy": "",
            "authType": "",
            "senderr": false,
            "credentials": {},
            "x": 250,
            "y": 40,
            "wires": [
                [
                    "bad44d5a.892d3"
                ]
            ]
        }
    ]
    

    Environment

    • Node-RED version: v3.0.0
    • Node.js version: 16.16.0
    • npm version: -
    • Platform/OS: Docker
    • Browser: Chrome
    enhancement upstream fixed 
    opened by fvillena 31
  • i18n Support

    i18n Support

    We haven't decided on what time-scale we want to enable node-red to be internationalized, but it is something we need to have a plan for.

    This needs a high-level design that considers how each of the main components will have to be changed to support i18n. The runtime and editor should be fairly straightforward to add support for message catalogues. The hard part is how nodes can provide localized versions; their current architecture doesn't make it entirely obvious how this will be achieved easily.

    Then there is the question of what library to use. Amongst the libraries that appear to be candidates are:

    epic editor runtime 
    opened by knolleary 31
  • node.warn and node.error functions are printing twice on the debug window (Node-RED v2.2.2)

    node.warn and node.error functions are printing twice on the debug window (Node-RED v2.2.2)

    Current Behavior

    I have node-red v2.2.2 currently installed in different machines with Ubuntu. And I realized that when I use the functions node.warn('any word') or node.error('any word') once, they will print the message on the debug window twice:

    Peek 2022-04-01 01-30

    I have an old version of Node-red 1.2.1 installed on one machine and it doesn't happen there. I'm sure it's an issue with version 2.2.2.

    Expected Behavior

    The expected behavior is printing the message only once when I use the function node.warn once.

    Steps To Reproduce

    No response

    Example flow

    [{"id":"884df64fc0706d1a","type":"function","z":"ff922ddb.76cc18","name":"node.error('printing twice')","func":"node.error('printing twice')\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1470,"y":1900,"wires":[["d16a5938e610505c"]]},{"id":"c84f153b25b2ec5b","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1260,"y":1900,"wires":[["884df64fc0706d1a"]]},{"id":"d16a5938e610505c","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1690,"y":1900,"wires":[]},{"id":"53023a7dd1eb74ea","type":"function","z":"ff922ddb.76cc18","name":"node.warn('printing twice')","func":"node.warn('printing twice')\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1470,"y":1960,"wires":[["30bbcdcf40181b6d"]]},{"id":"d59918f0a0e600ef","type":"inject","z":"ff922ddb.76cc18","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":1260,"y":1960,"wires":[["53023a7dd1eb74ea"]]},{"id":"30bbcdcf40181b6d","type":"debug","z":"ff922ddb.76cc18","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1690,"y":1960,"wires":[]}]
    

    Environment

    • Node-RED version: 2.2.2
    • Node.js version: 16.13.12
    • npm version: 8.5.5
    • Platform/OS: Ubuntu 20.04
    • Browser: Firefox/Chrome
    needs-info 
    opened by ramuyk 29
  • Credential handling improvements

    Credential handling improvements

    Having updated the MySQL and mqtt nodes to make proper use of the credentials file, there are some improvements to be made. #222 added the basic framework for this.

    There are some remaining tasks:

    • [x] document the api and its use

    • [x] Server-side registration of credentials is currently done via RED.nodes.registerCredentials - it should be RED.credentials.register (a bug I didn't spot before merging #222 - my fault) (delivered by @Belphemur in #228)
    • [x] credential validation - as with properties in the defaults array, it should be possible to specify 'required' or 'validate' properties. (delivered by @Belphemur in #228)
    • [x] save on Deploy - only save credentials on Deploy (as other configuration variable) - and allow Undo in same manner (delivered by @Belphemur in #251)
    • [x] Now I can see it in action, the API we provide for a node to register its credentials (RED.credentials.register) doesn't quite feel right. In hindsight, we should move this to be part of RED.nodes.registerType. This should also incorporate what is done with RED.library.registry so there is one function for registering everything in a single call (although doesn't need to be done up front...) (a6a0352b7027c9fbf63a50b1d4b8297da3ab5e33)
    • [x] RED.nodes.createNode should prepopulate the node object with a credentials object containing its values. This removes the need for every node implementation to go get the credentials themselves. This will allow us to remove RED.getCredentials from the external API. (aa35484a301ad5b6f1f2611dd428d1ee08719179)
    • [x] We need a mechanism for a node to take some custom action using the credentials when displaying the edit dialog. http request is a good example of a node that wants to use this new api. It needs to toggle the visible state of the authentication fields depending if they are set or not. Currently oneditprepare is called asynchronously to the credential-loading request - which means this isn't possible. (b604db83f6b57ee6fef5889ac288d197f9bc4dc3 - oneditprepare is now called after creds have been loaded - node.credentials contains them.)
    • [x] how to handle email nodes use of including non-credential flag in its http request to indicate if external creds are being used. (made the global flag a credential... problem solved: 8ddfa9eb29de41757d7e7e4ff1b4281f75e1b418)
    • [x] decide whether RED.getCredentials, RED.addCredentials and RED.deleteCredentials should be removed from the external API. This can only be done once all existing users are migrated to the new API. (The twitter node is an example of out-of-stream credential handling due to oauth workflow that requires these apis - leave them in place)
    epic 
    opened by knolleary 29
  • Labels for Outputs

    Labels for Outputs

    It would be nice if there was a way to label the outputs, so that when I'm connecting nodes I could mouse over the output and see a tooltip pop-up that tells me what the label is.

    editor 
    opened by Humancell 29
  • Function Node Editor Bg gone to White (again)

    Function Node Editor Bg gone to White (again)

    Current Behavior

    After update 3.0 the Function Node Editor background is White (not dark) image

    Expected Behavior

    No response

    Steps To Reproduce

    No response

    Example flow

    paste your flow here
    

    Environment

    • Node-RED version: 3.0
    • Node.js version: v16.15.0
    • npm version:
    • Platform/OS: Home Assistant OS 8.2
    • Browser: Chrome 103.0.5060.114
    upstream 
    opened by 3ative 28
  • Comment node: Clarify where the text will appear

    Comment node: Clarify where the text will appear

    The text will appear in the information tab of the side panel and not in the help tab of the side panel.

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [ ] New feature (non-breaking change which adds functionality)

    Textual change.

    Proposed changes

    The location of the text of the comment node will appear in the help tab of the side panel and not in the information tab of the side panel. This change makes that more clear.

    Checklist

    • [x] I have read the contribution guidelines
    • [x] For non-bugfix PRs, I have discussed this change on the forum/slack team.
    • [ ] I have run grunt to verify the unit tests pass
    • [ ] I have added suitable unit tests to cover the new/changed functionality
    opened by dirkjanfaber 1
  • Context Variables are not shown correctly in the UI

    Context Variables are not shown correctly in the UI

    Current Behavior

    I am massivly working with global context variables. When I set or change variables (does not matter, if its done via function node or a change node). The variables are set correctly and can also be read via a get call. I can also check them for example by looking into the global.json (store).

    But the Editors UI is showing totally different values and even structure there is wrong.

    If I press the global refresh button the values still do not get updated. If I press the local variable based refresh button, the variable is changing to "undefined". That very bad because the work with variables is hard to be debugged like this.

    image

    image

    Expected Behavior

    Expected is that the UI shows the real value and structure of the variables.

    Steps To Reproduce

    relevant part of the settings.json (I am only using "default"):

        contextStorage: {
            default: { module: "localfilesystem"},
            memory: { module: "memory" }
        },
    
    

    Example flow

    paste your flow here
    

    Environment

    Docker based installation:

    • Node-RED version: v3.0.2
    • Node.js version: v16.16.0
    • npm version: 8.11.0
    • Platform/OS: Linux 5.10.103-v7l+ arm LE
    • Browser: google-chrome-stable (108.0.5359.124)
    needs-triage 
    opened by lweberru 0
  • Host the editor elsewhere

    Host the editor elsewhere

    I know Node.Red supports running without an editor, but would it be possible to host the editor elsewhere and connect to node.red instance remotely? For example, having installed node.red on raspberry pi, I would like to install same version on the docker. Tell pi to run without the editor, and configure node.red on the docker to connect to the pi, rather than the local instance.

    opened by ecrode 1
  • Add support for mermaid diagram and image file drag&drop to markdown …

    Add support for mermaid diagram and image file drag&drop to markdown …

    …editor

    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [x] New feature (non-breaking change which adds functionality)

    Proposed changes

    This PR add following inline figure support to the markdown editor of Node-RED editor used for describing node's as documents discussed at this forum thread.

    • writing an inline diagram using mermaid syntax enclosed by ```mermaid and ```,
    • inserting an inline image as data URL (<img src="data:..." />) by drag & drop of an image file.

    スクリーンショット 2022-12-25 1 35 52

    Mermaid diagram can be disabled by setting editorTheme.markdownEditor.mermaid.enabled to false in settings.js. In this case, mermaid rendering is disabled, and mermaid code blocks are shown by expandable code block as shown below.:

    スクリーンショット 2023-01-01 22 35 57

    The code block is closed by default. When mermaid rendering is disabled, the mermaid library is not loaded into Node-RED editor to make editor memory footprint smaller,

    Checklist

    • [x] I have read the contribution guidelines
    • [x] For non-bugfix PRs, I have discussed this change on the forum/slack team.
    • [x] I have run grunt to verify the unit tests pass
    • [x] I have added suitable unit tests to cover the new/changed functionality
    opened by HiroyasuNishiyama 2
  • Split node: avoid duplicate done call for buffer split

    Split node: avoid duplicate done call for buffer split

    Fixes #3982

    When splitting buffers in a stream, the node stores any 'left-over' bits following the split to be joined with the next message in the stream. It stored the done event until that left-over bit was made whole.

    However, if there were no left-over bits (length === 0), it was storing done for later and calling done.

    The fix is to not store the done for later if there is no left-over bit.

    But, this does also raise a question of a difference in behaviour between string and buffer modes. I think for String streams, it always calls done after splitting, regardless of any left-over bits... whereas for Buffer streams, as described above, it waits until left-overs are handled.

    This could do with tidying up, but needs more investigation and test cases to properly figure out the 'expected' behaviour.

    opened by knolleary 1
Releases(3.0.2)
  • 3.0.2(Aug 4, 2022)

    Editor

    • Fix workspace chart bottom property (#3812) @bonanitech
    • Update german translation (#3802) @Dennis14e
    • Support color reset to the default in subflow and group (#3801) @kazuhitoyokoi
    • Allow generateNodeNames to handle names containing regex control chars (#3817) @knolleary
    • Hide scrollbars until they're needed (#3808) @bonanitech
    • Include junctions/groups when exporting subflows plus related fixes (#3816) @knolleary
    • remove console.log (#3820) @Steve-Mcl

    Runtime

    • Register subflow module instance node with parent flow (#3818) @knolleary

    Nodes

    • HTTP Request: Allow HTTP Headers not in spec (#3776) @hardillb
    Source code(tar.gz)
    Source code(zip)
    node-red-3.0.2.zip(7.81 MB)
  • 3.0.1(Jul 22, 2022)

    Editor

    • Allow codeEditor theme to be set even if codeEditor is not set in settings.js (#3794) @Steve-Mcl
    • Sys info (diagnostics report) amendments (#3793) @Steve-Mcl
    • Allow mode and title to be omitted in options argument for createEditor (#3791) @Steve-Mcl
    • Fix focus issues (#3789) @Steve-Mcl
    • Ensure all typedInput buttons have button type set (#3788) @knolleary
    • Do not flag hasUsers=false nodes as unused in search (#3787) @knolleary
    • Properly position quick-add dialog in all cases (#3786) @knolleary
    • Ensure quick-add dialog does not obscure ghost node when shifted (#3785) @knolleary
    • Remove use of Object.hasOwn (#3784) @knolleary
    Source code(tar.gz)
    Source code(zip)
    node-red-3.0.1.zip(7.81 MB)
  • 3.0.0(Jul 14, 2022)

    3.0.0: Milestone Release

    Editor

    • Use theme page and header values if settings.js values are not present (#3767) @Steve-Mcl
    • Focus editor for undo after some actions in menu (#3759) @kazuhitoyokoi
    • Ensure node icon shade has properly rounded corners (#3763) @knolleary
    • Fix storing subflow credential type when input has multiple types (#3762) @knolleary
    • Ensure global-config and flow-config have info in the hierarchy popover (#3752) @Steve-Mcl
    • Include dirty state in history event (#3748) @Steve-Mcl
    • Fix display direction of context sub-menu (#3746) @knolleary
    • Fix clear pinned paths of debug sidebar menu (#3745) @HiroyasuNishiyama
    • prevent exception generating tooltip for deleted nodes (#3742) @Steve-Mcl
    • Fix context menu issues ready for v3 beta.5 (#3741) @Steve-Mcl
    • Do not generate new node-ids when pasting a cut flow (#3729) @knolleary
    • Fix to prevent node from moving out of workspace (#3731) @HiroyasuNishiyama
    • Don't let themes change disabled config node background color (#3736) @bonanitech
    • Move colors left behind in #3692 to CSS variables (#3737) @bonanitech
    • Fix handling of global debug message (#3733) @HiroyasuNishiyama
    • Fix label overflow @ config-node palette (#3730) @ralphwetzel
    • Fix defaulting to monaco if settings does not contain codeEditor (#3732) @knolleary
    • Disable keyboard shortcut mapping when showing Edit[..]Dialog (#3700) @ralphwetzel
    • Update add-junction menu to work in more cases (#3727) @knolleary
    • Ensure importMap is not null when using import UI (#3723) @Steve-Mcl
    • Add Japanese translations for v3.0-beta.4 (#3724) @kazuhitoyokoi
    • Fix "split with" on virtual links (#3766) @Steve-Mcl

    Runtime

    • Do not remove unknown credentials of Subflow Modules (#3728) @knolleary
    • Add missing entries from beta.4 changelog (#3721) @knolleary

    Nodes

    • Change: Fix change node, not handling from field properly when using context (#3754) @Fadoli
    • Link Call: Fix linkcall registry bugs (#3751) @Steve-Mcl
    • WebSocket: Fix close timeout of websocket node (#3734) @HiroyasuNishiyama
    Source code(tar.gz)
    Source code(zip)
    node-red-3.0.0.zip(7.81 MB)
  • 2.2.2(Feb 18, 2022)

  • 2.2.1(Feb 15, 2022)

    Editor

    • Handle mixed-cased filter terms in keyboard shortcut dialog (#3444) @knolleary
    • Prevent duplicate links being added between nodes (#3442) @knolleary
    • Fix to hide tooltip after removing subflow tab (#3391) @HiroyasuNishiyama
    • Fix node validation to be applied to config node (#3397) @HiroyasuNishiyama
    • Fix: Dont add wires to undo buffer twice (#3437) @Steve-Mcl

    Runtime

    • Improve module location parsing (of stack info) when adding hook (#3447) @Steve-Mcl
    • Fix substitution of NR_NODE_PATH (#3445) @HiroyasuNishiyama
    • Remove console.log when ignoring disabled module (#3439) @knolleary
    • Improve "Unexpected Node Error" logging (#3446) @Steve-Mcl

    Nodes

    • Debug: Fix no-prototype-builtins bug in debug node and utils (#3394) @Alkarex
    • Delay: Fix Japanese message of delay node (#3434)
    • Allow nbRateUnits to be undefined when validating (#3443) @knolleary
    • Coding help for recently added node-red Predefined Environment Variables (#3440) @Steve-Mcl
    Source code(tar.gz)
    Source code(zip)
    node-red-2.2.1.zip(7.57 MB)
  • 2.2.0(Jan 27, 2022)

    Editor

    • Add editorTheme.tours property to default settings file (#3375) @knolleary
    • Remember Zoom level and Sidebar tab selection between sessions (#3361) @knolleary
    • Fix timing issue when merging background changes fixes #3364 (#3373) @Steve-Mcl
    • Use a nodes palette label in help tree (#3372) @Steve-Mcl
    • Subflow: Add labels to OUTPUT nodes (#3352) @ralphwetzel
    • Fix vertical align subflow port (#3370) @knolleary
    • Make actions list i18n ready and Japanese translation (#3359) @HiroyasuNishiyama
    • Update tour for 2.2.0 (#3378) @knolleary
    • Include paletteLabel when building search index (#3380) @Steve-Mcl
    • Fix opening/closing subflow template not to make subflow changed (#3382) @HiroyasuNishiyama
    • Add Japanese translations for v2.2.0 (#3353, #3381) @kazuhitoyokoi

    Runtime

    • Add support for accessing node id & name as environment variable (#3356) @HiroyasuNishiyama
    • Clear context contents when switching projects (#3243) @knolleary

    Nodes

    • MQTT: reject invalid topics (#3374) @Steve-Mcl
    • Function: Expose node.path property (#3371) @knolleary
    • Function: Update node declarations in func.d.ts (#3377) @Steve-Mcl

    2.2.0-beta.1: Beta Release

    Editor

    • Add search history to main search box (#3262) @knolleary
    • Check availability of type of config node on deploy (#3304) @k-toumura
    • Add wire-slice mode to delete wires with Ctrl-RHClick-Drag (#3340) @knolleary
    • Wiring keyboard shortcuts (#3288) @knolleary
    • Snap nodes on grid using either edge as reference (#3289) @knolleary
    • Detach node action (#3338) @knolleary
    • Highlight links when selecting nodes (#3323) @knolleary
    • Allow multiple links to be selected by ctrl-click (#3294) @knolleary

    Nodes

    • JSON: Let JSON node attempt to parse buffer if it contains a valid string (#3296) @dceejay
    • Remove use of verbose flag in core nodes - and use node.debug level instead (#3300) @dceejay
    • TCP: Add TLS option to tcp client nodes (#3307) @dceejay
    • WebSocket: Implemented support for Websocket Subprotocols in WS Client Node. (#3333) @tobiasoort
    Source code(tar.gz)
    Source code(zip)
    node-red-2.2.0.zip(7.57 MB)
  • 2.1.6(Jan 18, 2022)

    Editor

    • Revert copy-text change and apply alternative fix (#3363) @knolleary
    • Update marked to latest (#3362) @knolleary
    • fix to make start of property error tooltip messages aligned (#3358) @HiroyasuNishiyama

    Nodes

    • Inject: fix JSON propety validation of inject node (#3349) @HiroyasuNishiyama
    • Delay: fix unit value validation of delay node (#3351) @HiroyasuNishiyama
    Source code(tar.gz)
    Source code(zip)
    node-red-2.1.6.zip(7.45 MB)
  • 2.1.5(Jan 13, 2022)

    Runtime

    • Handle reporting error location when stack is truncated (#3346) @knolleary
    • Initialize passport when only adminAuth.tokens is set (#3343) @knolleary
    • Add log logging (#3342) @knolleary

    Editor

    • Fix copy buttons on the debug window (another method) (#3331) @kazuhitoyokoi
    • Add Japanese translations for hidden flow (#3302) @kazuhitoyokoi
    • Improve jsonata legacy mode detection regex (#3345) @knolleary
    • Fix generating flow name with incrementing number (#3347) @knolleary
    • resume focus after import/export dialog close (#3337) @HiroyasuNishiyama
    • Fix findPreviousVisibleTab action (#3321) @knolleary
    • Fix storing hidden tab state when not hidden via action (#3312) @knolleary
    • Avoid adding empty env properties to tabs/groups (#3311) @knolleary
    • Fix hide icon in tour guide (#3301) @kazuhitoyokoi

    Nodes

    • File: Update file node examples according to node name change (#3335) @HiroyasuNishiyama
    • Filter (RBE): Fix for filter node narrrowbandEq mode start condition failure (#3339) @dceejay
    • Function: Prevent function scrollbar from obscuring expand button (#3348) @knolleary
    • Function: load extralibs when expanding monaco. fixes #3319 (#3334) @Steve-Mcl
    • Function: Update Function to use correct api to access env vars (#3310) @knolleary
    • HTTP Request: Fix basic auth with empty username or password (#3325) @hardillb
    • Inject: Fix incorrect clearing of blank payload property in Inject node (#3322) @knolleary
    • Link Call: add link call example (#3336) @HiroyasuNishiyama
    • WebSocket: Only setup ws client heartbeat once it is connected (#3344) @knolleary
    • Update Japanese translations in node help (#3332) @kazuhitoyokoi
    Source code(tar.gz)
    Source code(zip)
    node-red-2.1.5.zip(7.45 MB)
  • 2.1.4(Dec 2, 2021)

    Runtime

    • fix env var access using $parent for groups (#3278) @HiroyasuNishiyama
    • Add proper error handling for 404 errors when serving debug files (#3277) @knolleary
    • Add Japanese translations for Node-RED v2.1.0-beta.1 (#3179) @kazuhitoyokoi
    • Include full user object on login audit events (#3269) @knolleary
    • Remove styling from de locale files (#3237) @knolleary

    Editor

    • Change tab hide button icon to an eye and add search option (#3282) @knolleary
    • Fix i18n handling of namespaces with spaces in (#3281) @knolleary
    • Trigger change event when autoComplete fills in input (#3280) @knolleary
    • Apply CN i18n fix (#3279) @knolleary
    • fix select menu label of config node to use paletteLabel (#3273) @HiroyasuNishiyama
    • fix removed tab not to cause node conflict (#3275) @HiroyasuNishiyama
    • Group diff fix (#3239) @knolleary
    • Only toggle disabled workspace flag if on activeWorkspace (#3252) @knolleary
    • Do not show status for disabled nodes (#3253) @knolleary
    • Set dimension value for tour guide (#3265) @kazuhitoyokoi
    • Avoid redundant initialisation of TypedInput type (#3263) @knolleary
    • Don't let themes change flow port label color (#3270) @bonanitech
    • Fix treeList gutter calculation to handle floating gutters (#3238) @knolleary

    Nodes

    • Debug: Handle RegExp types in Debug sidebar (#3251) @knolleary
    • Delay: fix 2nd output when in rate limit per topic modes (#3261) @dceejay
    • Link: fix to show link target when selected (#3267) @HiroyasuNishiyama
    • Inject: Do not modify inject node props in oneditprepare (#3242) @knolleary
    • HTTP Request: HTTP Basic Auth should always add : between username and password even if empty (#3236) @hardillb
    Source code(tar.gz)
    Source code(zip)
    node-red-2.1.4.zip(7.44 MB)
  • 2.1.3(Oct 26, 2021)

    Runtime

    • Update gen-publish script to update 'next' tag for main releases
    • Add environment variable to enable/disable tours (#3221) @hardillb
    • Fix loading non-default language files leaving runtime in wrong locale (#3225) @knolleary

    Editor

    • Refresh editor settings whenever a node is added or enabled (#3227) @knolleary
    • Revert spinner css change that made it shrink in some cases (#3229) @knolleary
    • Fix import notification message when importing config nodes (#3224) @knolleary
    • Handle changing types of TypedInput repeatedly (#3223) @knolleary
    Source code(tar.gz)
    Source code(zip)
    node-red-2.1.3.zip(7.44 MB)
  • 2.1.2(Oct 25, 2021)

    Runtime

    • node-red-pi: Remove bash dependency (#3216) @a16bitsysop

    Editor

    • Improved regex for markdown renderer (#3213) @GerwinvBeek
    • Fix TypedInput initialisation (#3220) @knolleary

    Nodes

    • MQTT: fix datatype in node config not used. fixes #3215 (#3219) @Steve-Mcl
    Source code(tar.gz)
    Source code(zip)
    node-red-2.1.2.zip(7.44 MB)
  • 2.1.1(Oct 22, 2021)

    Editor

    • Ensure tourGuide popover doesn't fall offscreen (#3212) @knolleary
    • Fix issue with old inject nodes that migrated topic to 'string' type (#3210) @knolleary
    • Add cache-busting query params to index.mst (#3211) @knolleary
    • Fix TypedInput validation of type without options (#3207) @knolleary
    Source code(tar.gz)
    Source code(zip)
    node-red-2.1.1.zip(7.43 MB)
  • 2.1.0(Oct 21, 2021)

    2.1.0: Milestone Release

    Editor

    • Position popover properly on a scrolled page
    • Fixes from 2.1.0-beta.2 (#3202) @knolleary

    Nodes

    • Link Out: Fix saving link out node links (#3201) @knolleary
    • Switch: Refix #3170 - copy switch rule type when adding new rule
    • TCP Request: Add string option to TCP request node output (#3204) @dceejay

    2.1.0-beta.2: Beta Release

    Editor

    • Fix switching projects (#3199) @knolleary
    • Use locale setting when installing/enabling node (#3198) @knolleary
    • Do not show projects-wecome dialog until welcome tour completes (#3197) @knolleary
    • Fix converting selection to subflow (#3196) @knolleary
    • Avoid conflicts with native browser cmd-ctrl type shortcuts (#3195) @knolleary
    • Ensure message tools stay attached to top-level entry in Debug/Context (#3186) @knolleary
    • Ensure tab state updates properly when toggling enable state (#3175) @knolleary
    • Improve handling of long labels in TreeList (#3176) @knolleary
    • Shift-click tab scroll arrows to jump to start/end (#3177) @knolleary

    Runtime

    • Update package dependencies
    • Update to latest node-red-admin

    Nodes

    • Dynamic MQTT connections (#3189)
    • Link: Filter out Link Out Return nodes in Link In edit dialog Fixes #3187
    • Link: Fix link call label (#3200) @knolleary
    • Debug: Redesign debug filter options and make them persistant (#3183) @knolleary
    • Inject: Widen Inject interval box for >1 digit (#3184) @knolleary
    • Switch: Fix rule focus when switch 'otherwise' rule is used (#3185) @knolleary

    2.1.0-beta.1: Beta Release

    Editor

    • Add Tour Guide component (#3136) @knolleary
    • Allow tabs to be hidden (#3120) @knolleary
    • Add align actions to editor (#3110) @knolleary
    • Add support of environment variable for tab & group (#3112) @HiroyasuNishiyama
    • Add autoComplete widget and add to TypedInput for msg. props (#3171) @knolleary
    • Render node documentation to node-red style guide when written in markdown. (#3169) @Steve-Mcl
    • Allow colouring of tab icon svg (#3140) @harmonic7
    • Restore tab selection after merging conflicts (#3151) @GerwinvBeek
    • Fix serving of theme files on Windows (#3154) @knolleary
    • Ensure config-node select inherits width properly from input (#3155) @knolleary
    • Do better remembering TypedInput values whilst switching types (#3159) @knolleary
    • Update monaco to 0.28.1 (#3153) @knolleary
    • Improve themeing of tourGuide (#3161) @knolleary
    • Allow a node to specify a filter for the config nodes it can pick from (#3160) @knolleary
    • Allow RED.notify.update to modify any notification setting (#3163) @knolleary
    • Fix typo in ko editor.json Fixes #3119
    • Improve RED.actions api to ensure actions cannot be overridden
    • Ensure treeList row has suitable min-height when no content Fixes #3109
    • Refactor edit dialogs to use separate edit panes
    • Ensure type select button is not focussable when TypedInput only has one type
    • Place close tab link in front of fade

    Runtime

    • Improve error reporting with oauth login strategies (#3148) @knolleary
    • Add allowUpdate feature to externalModules.palette (#3143) @knolleary
    • Improve node install error reporting (#3158) @knolleary
    • Improve unit test coverage (#3168) @knolleary
    • Allow coreNodesDir to be set to false (#3149) @hardillb
    • Update package dependencies
    • uncaughtException debug improvements (#3146) @renatojuniorrs

    Nodes

    • Change: Add option to deep-clone properties in Change node (#3156) @knolleary
    • Delay: Add push to front of rate limit queue. (#3069) @dceejay
    • File: Add paletteLabel to file nodes to make read/write more obvious (#3157) @knolleary
    • HTTP Request: Extend HTTP request node to log detailed timing information (#3116) @k-toumura
    • HTTP Response: Fix sizing of HTTP Response header fields (#3164) @knolleary
    • Join: Support for msg.restartTimeout (#3121) @magma1447
    • Link Call: Add Link Call node (#3152) @knolleary
    • Switch: Copy previous rule type when adding rule to switch node (#3170) @knolleary
    • Delay node: add option to send intermediate messages on separate output (#3166) @knolleary
    • Typo in http request set method translation (#3173) @mailsvb
    Source code(tar.gz)
    Source code(zip)
    node-red-2.1.0.zip(7.43 MB)
  • 2.0.6(Sep 2, 2021)

    Editor

    • Fix typo in ko editor.json Fixes #3119
    • Change fade color when hovering an inactive tab (#3106) @bonanitech
    • Ensure treeList row has suitable min-height when no content Fixes #3109

    Runtime

    • Update tar to latest (#3128) @aksswami
    • Give passport verify callback the same arity as the original callback (#3117) @dschmidt
    • Handle HTTPS Key and certificate as string or buffer (#3115) @bartbutenaers
    Source code(tar.gz)
    Source code(zip)
    node-red-2.0.6.zip(7.19 MB)
  • 1.3.7(Sep 2, 2021)

  • 2.0.5(Jul 30, 2021)

    Editor

    • Remove default ctrl-enter keybinding from monaco editor Fixes #3093

    Runtime

    • Update tar dependency
    • Add support for maintenance streams in generate-publish-script

    Nodes

    • Fix regression in Join node when manual joining array with msg.parts present Fixes #3096
    Source code(tar.gz)
    Source code(zip)
    node-red-2.0.5.zip(7.19 MB)
  • 1.3.6(Jul 30, 2021)

    Editor

    • Keep proper track of moved/changed state in undo/redo history Fixes #2999
    • Fix typo in zh-CN translation (#3003) @JiyeYu
    • Do not assign z property to tab node when updating flow Fixes #3010
    • Ensure RED.clipboard.import displays the right library Fixes #3021
    • Handle node icon paths for scoped modules Fixes #3013
    • Emit nodes:change for any updated config node when node deleted/added (#3047) @knolleary
    • Fix padding of compact notification Closes #3045
    • Fix scriptFile handling in themes (#3054) @bonanitech
    • Fix grip on horizontally displayed panels separator (#3055) @bonanitech
    • Avoid prototype pollution in RED.view.calculateTextDimensions
    • Fix focus outline overlap in button-groups Fixes #3070

    Runtime

    • Ensure context get/set key is a string (#2993) @Steve-Mcl
    • Update to latest 6.x ws module
    • Fix handling of boolean subflow module properties Fixes #3000
    • Fix over-greeding matching whilst parsing commit history Fixes #3006
    • Fix allow Flow.getNode to return subflowInstance nodes (#3004) @KazuhiroItoh
    • Update to latest node-red-admin
    • Support loading external module sub path Fixes #3023
    • Add necessary modules and remove unnecessary module in dependencies (#3058) @kazuhitoyokoi
    • Update dependencies

    Nodes

    • CSV: Ensure CSV node tries to parse number when set to do so (trim whitespace)
    • Switch: Fix handling empty rules (#2991) @HiroyasuNishiyama
    • Watch node throws errors if new files deleted (#2997) @hardillb
    • Add full ast parsing in Function node to spot node.done calls Fixes #2998
    Source code(tar.gz)
    Source code(zip)
    node-red-1.3.6.zip(3.82 MB)
  • 2.0.4(Jul 28, 2021)

    Editor

    • Fix tab fade CSS for when using themes (#3085) @bonanitech
    • Handle just-copied-but-not-deployed node with credentials in editor Fixes #3090

    Nodes

    • Filter: Fix RBE node handling of default topi property Fixes #3087
    • HTTP Request: Handle partially encoded url query strings in request node
    • HTTP Request: Fix support for supplied CA certs (#3089) @hardillb
    • HTTP Request: Ensure TLS Cert is used (#3092) @hardillb
    • Inject: Fix inject now button unable to send empty props
    • Inject: Inject now button success notification should use label with updated props
    Source code(tar.gz)
    Source code(zip)
    node-red-2.0.4.zip(7.18 MB)
  • 2.0.3(Jul 23, 2021)

    Nodes

    • HTML: Fix HTML parsing when body is included in the select tag Fixes #3079
    • HTTP Request: Preserve case of user-provided http headers in request node Fixes #3081
    • HTTP Request: Set decompress to false for HTTP Request to keep 1.x compatibility Fixes #3083
    • HTTP Request: Add unit tests for HTTP Request encodeURI and error response
    • HTTP Request: Do not throw HTTP errors in request node Fixes #3082
    • HTTP Request: Ensure uri is properly encoded before passing to got module Fixes #3080
    Source code(tar.gz)
    Source code(zip)
    node-red-2.0.3.zip(7.18 MB)
  • 2.0.2(Jul 22, 2021)

    Runtime

    • Use file:// url with dynamic import
    • Detect if agent-base has patched https.request and undo it Fixes #3072

    Editor

    • Fix tab fade css because Safari Fixes #3073
    • Fix error closing library dialog with monaco
    • Handle other error types in Manage Palette view

    Nodes

    • HTTP Request node - ignore invalid cookies rather than fail request Fixes #3075
    • Fix msg.reset handling in Delay node Fixes #3074
    Source code(tar.gz)
    Source code(zip)
    node-red-2.0.2.zip(7.18 MB)
  • 2.0.1(Jul 20, 2021)

  • 2.0.0(Jul 20, 2021)

    2.0.0: Milestone Release

    Migration from 1.x

    • Node-RED now requires Node.js 12.x or later.

    • The following nodes have had significant dependency updates. Unless stated, they should be fully backward compatible.

      • RBE: Relabelled as 'filter' to make it more discoverable and made part of the core palette, rather than as a separate module.
      • Tail: This node has been removed from the default palette. You can reinstall it from node-red-node-tail
      • HTTP Request: Reimplemented with a different underlying module. We have tried to maintain 100% functional compatibility, but it is possible some edge cases remain.
      • JSON: The schema validation option no longer supports JSON-Schema draft-04
      • HTML: Its underlying module has had a major version update. Should be fully backward compatible.
    • functionExternalModules is now enabled by default for new installs. If you have an existing settings file that contains this setting, you will need to set it to true yourself.

      The external modules will now get installed in your Node-RED user directory, (~/.node-red) rather than in a subdirectory. This means all dependencies will be listed in your top-level package.json. If you have existing external modules, they will get reinstalled to the new location when you first run Node-RED 2.0.

    Runtime

    • Fix missing dependencies (#3052, #2057) @kazuhitoyokoi
    • Ensure node.types is defined if node html file missing
    • Fix reporting of type_already_registered error
    • Move install location of external modules (#3064) @knolleary

    Editor

    • Update translations (#3063) @kazuhitoyokoi
    • Add a slight fade to tab labels that overflow
    • Show config node details when selected in outliner
    • Fix layout of info outliner for subflow entries

    Nodes

    • Delay: let msg.flush specify how many messages to flush from node (#3059) @dceejay
    • Function: external modules is now enabled by default (#3065) @knolleary
    • Function: external modules now supports both ES6 and CJS modules (#3065) @knolleary
    • WebSocket: add option for client node to send automatic pings (#3056) @knolleary
    2.0.0-beta.2: Beta Release

    Runtime

    • Add node-red admin init (via [email protected])
    • Move to GH Actions rather than Travis for build (#3042) @knolleary

    Editor

    • Include hasUser=false config nodes when exporting whole flow (#3048)
    • Emit nodes:change for any updated config node when node deleted/added
    • Fix padding of compact notification Closes #3045
    • Ensure any html in changelog is escaped before displaying
    • Add support for Map/Set property types on Debug (#3040) @knolleary
    • Add 'theme' to default settings file
    • Add RED.view.annotations api (#3032) @knolleary
    • Update monaco editor to V0.25.2 (#3031) @Steve-Mcl
    • Lower tray zIndex when overlay tray being opened Fixes #3019
    • Reduce z-Index of Function expand buttons to prevent overlap Part of #3019
    • Ensure RED.clipboard.import displays the right library Fixes #3021
    • Batch messages sent over comms to prevent flooding (#3025) @knolleary
    • Allow RED.popover.panel to specify a closeButton to ignore click events on
    • Use browser default language for initial page load
    • Add css var for node font color
    • Fix label padding of toggleButton
    • Give sidebar open tab a bit more room for its label
    • Various Monaco updates (#3015) @Steve-Mcl
    • Log readOnly on startup (#3024) @sammachin
    • Translation updates (#3020 #3022) @HiroyasuNishiyama @kazuhitoyokoi

    Nodes

    • HTTP Request: Fix proxy handling (#3044) @hardillb
    • HTTP Request: Handle basic auth with @ in username (#3017) @hardillb
    • Add Japanese translation for file-in node (#3037 #3039) @kazuhitoyokoi
    • File In: Add option for file-in node to include all properties (default off) (#3035) @dceejay
    • Exec: add windowsHide option to hide windows under Windows (#3026) @natcl
    • Support loading external module sub path Fixes #3023
    2.0.0-beta.1: Beta Release

    Runtime

    • [MAJOR] Set minimum node version to 12.
    • [MAJOR] Fix flowfile name to flows.json in settings (#2951) @dceejay
    • [MAJOR] Update to latest i18n in editor and runtime (#2940) @knolleary
    • [MAJOR] Deprecate usage of httpRoot (#2953) @knolleary
    • Add pre/postInstall hooks to npm install handling (#2936) @knolleary
    • Add engine-strict flag to npm install args (#2965) @nileio
    • Restructure default settings.js to be more organised (#3012) @knolleary
    • Ensure httpServerOptions gets applied to ALL the express apps
    • Allow RED.settings.set to replace string property with object property
    • Update debug tests to handle compact comms format
    • Updates to encode/decode message when passed over debug comms link
    • Remove all input event listeners on a node once it is closed
    • Move hooks to util package
    • Rework hooks structure to be a linkedlist
    • Update dependencies (#2922) @knolleary

    Editor

    Nodes

    • [MAJOR] Relabel RBE node as 'filter' and move into core. Also remove tail (#2944) @dceejay
    • [MAJOR] HTTP Request: migrate to 'got' module (#2952) @knolleary
    • [MAJOR] Move Inject node to CronosJS module (#2959) @knolleary
    • [MAJOR] JSON: Update ajv to 8.2.0 - drop support for JSON-Schema draft-04 (#2969) @knolleary
    • [MAJOR] HTML node: cheerio update to 1.x (#3011) @knolleary
    • Join: change default manual mode to object (#2931) @knolleary
    • File node: Add fileWorkingDirectory (#2932) @knolleary
    • Delay node enhancements (#2294) @kazuhitoyokoi (#2949) @dceejay
    • Add Japanese translations for delay node enhancements (#2958) @kazuhitoyokoi
    • Inject node: reorder TypedInput options (#2961) @dceejay
    • HTTP Request: update to work with proxies (#2983) @hardillb (#3009) @hardillb
    • HTTP Request: fix msg.responseUrl (#2986) @hardillb
    • TLS: Add ALPN support to TLS node (#2988) @hardillb
    • Inject: add "Inject now" button to edit dialog (#2990) @Steve-Mcl
    Source code(tar.gz)
    Source code(zip)
    node-red-2.0.0.zip(7.18 MB)
  • 1.3.5(May 18, 2021)

    Editor

    • Open subflow tab next to active tab rather than at the end
    • Shrink default notification box
    • Support mousewheel scroll in tab bar
    • Revert some of #2967 to fix treeList gutter width calculation
    • Prevent unknown node from breaking editor
    • Stop module with missing types from preventing editor load
    • Handle sidebar tab that no longer exists when setting first active
    • Fix plugin loading when browser sends unrecognised lang
    • Prevent error whilst drag/drop importing from leaving dropTarget visible Fixes #2982
    • Fix scaling issues when dragging nodes into scaled workspace
    • Fix incorrect shortcut keys in info tips (#2980) @kazuhitoyokoi
    • Reduce code duplication around node/label generation
    • Fix theme handling when no editorTheme.page setting
    • Fix jshint error in treeList

    Runtime

    • Fix error handling in runtime/lib/api/nodes
    • Add Node 16 with sass fixed
    • Migrate from node-sass to sass (#2984)
    • Fix "installRetry" was declared a constant and changed (#2974) @aheissenberger

    Nodes

    • Function: Fix 'SyntaxError' in Function node when last line of on-stop is a comment
    • Function: Fix Function tab label names in the node help text Closes #2978
    • Function: Update Japanese info text of function node (#2985) @HiroyasuNishiyama
    Source code(tar.gz)
    Source code(zip)
    node-red-1.3.5.zip(3.78 MB)
  • 1.3.4(Apr 29, 2021)

    1.3.4 Maintenance Release

    Editor

    • Allow nodes to access resolved theme files Fixes #2968
    • Fix importing node to currently flow rather than match its old z value
    • Don't let 'escape' whilst moving nodes interrupt things Fixes #2960
    • Sort context stores in TypedInput and ensure default first Fixes #2954
    • Fix margin between nodes on palette (#2947) @kazuhitoyokoi
    • Ensure typedInput option is selected in dropdown menu Part of #2945
    • Ensure typedInput without value has focus class removed Closes #2945
    • TreeList: Fix remove item when depth=0 and wrong gutter calc (#2967) @hanc2006

    Runtime

    • Handle subflow modules that contain subflows
    • Timeout http upgrade requests that are not otherwise handled Fixes #2956
    • Fix error on auto commit for no flow change (#2957) @HiroyasuNishiyama

    Nodes

    • CSV: Fix CSV handling of special chars as separators
    • Delay: Give delay node random mina nd max more space so you can see complete value
    • Exec: fix grunt fail on exec node test (#2964) @HiroyasuNishiyama
    • Function: Ensure function expand button is above vertical scrollbar Fixes #2955
    • Inject: Fix inject node output tooltip extra property count
    Source code(tar.gz)
    Source code(zip)
    node-red-1.3.4.zip(3.78 MB)
  • 1.3.3(Apr 20, 2021)

    Editor

    • Fix package semver comparison to allow >1 version increment
    • Prevent TypedInput label overflowing element Fixes #2941
    • Remove TypedInput from tab focus when only one type available
    • Make typedInput.disable more consistent in behaviour Fixes #2942
    • Fix project credential secret reset handling Part of #2868

    Runtime

    • Export package version in Grunt file so docs template can access

    Nodes

    • CSV: ensure CSV node can send false as string
    • HTTPIn: handle application/x-protobuf as Buffer type (#2935 #2938) @hardillb
    • MQTT: Ensure mqtt-close message is published when closing mqtt nodes
    Source code(tar.gz)
    Source code(zip)
    node-red-1.3.3.zip(3.78 MB)
  • 1.3.2(Apr 13, 2021)

    Runtime

    • Handle package.json without dependencies section

    Editor

    • Fix variable reference error in editableList Fixes #2933
    • Fix handling of user-provided keymap Fixes #2926
    • Ensure theme login image is passed through to api response Fixes #2929
    • Add Japanese translations for Node-RED v1.3.1 (#2930) @kazuhitoyokoi

    Nodes

    • CSV: Fix CSV parsing with other than , separator
    • File out: Fix timing of msg.send to be after close
    • Function: describe node.outputCount in help text
    • MQTT: Fix MQTT Broker TLS config row layout Fixes #2927
    • Split: add comment to info re $N being number of messages arriving
    Source code(tar.gz)
    Source code(zip)
    node-red-1.3.2.zip(3.77 MB)
  • 1.3.1(Apr 8, 2021)

  • 1.3.0(Apr 8, 2021)

    1.3.0: Milestone Release

    Editor

    • Remember TypedInput selected sub option when switching types Fixes #2896
    • Show context store name on TypedInput flow/global types Fixes #2793
    • Add core:go-to-selected-subflow action
    • Ctrl-dbclick on subflow node opens subflow tab
    • Add go-to-previous/next-location actions
    • Fix copy-to-clipboard action in FireFox
    • Fix select up/down stream when zoomed in or out
    • Use cursor keys to change selection in workspace
    • Prevent accidental text selection of subflow toolbar text
    • Update node-sass to 5.x Fixes #2907
    • Allow module to provide resources and automatically expose them (#2903) @knolleary

    Runtime

    • DE language updates (#2806 #2901 #2913) @heikokue
    • Remove Node 8 from travis due to node-sass breakage
    • Allow Flow.getNode to return subflowInstance nodes Related to #2898
    • Fix credential lookup for nested subflows Fixes #2910
    • Add externalModules config to settings.js
    • Add Japanese translations for Node-RED v1.3.0 (#2900)
    • Fix handling encrypted creds on /flows api
    • Properly handle credentials passed to /flows api
    • Fix line-number reporting in errors on node load (#2894) @HiroyasuNishiyama

    Nodes

    • Change: Add property validation to Change node rule set Closes #2911
    • Exec: Allow any property to be appended to command (#2908) @kazuhitoyokoi
    • HTTP Request: set followAllRedirects to work with POSTs Fixes #2017
    • Inject: Flag validation errors in Inject node props config Fixes #2914
    • Function: add node.outputCount to sandbox (#2918) @kristianheljas
    • Switch: Fix Switch node handling of hasKey rule when property is undefined
    • Switch: Handle invalid regex set dynamically in Switch node Fixes #2905

    1.3.0-beta.1: Beta Release

    Editor

    • Add config node to refer to when exporting subflow
    • Add confirm dialog when deleting subflow with instances in use (#2845) @knolleary
    • Add easier ways to find subflow instances
    • Add enable/disable toggle button for groups in info-outliner (#2844) @knolleary
    • Add IE11 polyfill to support URI download scheme (#2871) @HiroyasuNishiyama
    • Add Japanese translations for Node-RED v1.3.0 (#2874) @kazuhitoyokoi
    • Add preview of exported nodes to Export dialog (#2820) @knolleary
    • Add RED.plugins module to editor
    • Add select-connected action (#2877) @knolleary
    • Add select-up/downstream-nodes action to editor (#2877) @knolleary
    • Add subflow edit button to palette tooltip
    • Add subflow meta data edit pane
    • Add support for library source plugins (#2785) @knolleary
    • Adds shift-click support for selecting up/down stream nodes
    • Allow default keymap to be overridden in settings file (#2843) @knolleary
    • Allow EditableList to have custom buttons (#2881) @bartbutenaers
    • Allow filtering of debug node output within subflow (#2870) @HiroyasuNishiyama
    • Ensure the first sidebar tab is shown when editor loads (#2846) @knolleary
    • Ensure TypedInput Change event is passed type/value properties Fixes #2883
    • Escape all user input
    • Filter palette manager nodes based on allow/deny list
    • Fix check for existing config nodes in subflow export set
    • Fix handling of + in shortcuts
    • fix jshint failure (#2850) @HiroyasuNishiyama
    • Fix keymap entries with multiple keys for same action
    • fix line break of exporting nodes to clipboard (#2849) @HiroyasuNishiyama
    • Fix line break of subflow label on palette (#2828)
    • Fix loading individual module catalog
    • Fix removing links when deleting node
    • Fix semver comparison for IE11 (#2888) @knolleary
    • fixed #2790 swapped description of encodeUrl/encodeUrlComponent and d… (#2791)
    • Handle timeouts when trying to load node credentials in editor Fixes #2840 (#2841) @knolleary
    • Hide projects dialog when opening proj with invalid encrypt key
    • hide unused input field (#2823)
    • Implement node property typing (#2812) @knolleary
    • Improve SemVer comparison in Palette Manager (#2821 #2879) @HaKr
    • Library: properly handle symlinked folders (#2768) @natcl
    • make flow download code separate utility instead of polyfill
    • Prevent duplicate keyboard shortcut from being assigned
    • Prevent rogue mouseup on tab from triggering tab change
    • Rename paletteEditorEnabled to installerEnabled
    • Tidy some subflow env props css
    • Tidy up typedInput syntax
    • Use subflow.info for help text and meta.type for node type

    Runtime

    • Deprecate autoInstallModules for externalModules.autoInstall
    • Deprecate editorTheme.palette.editable for externalModules.palette.allowInstall
    • Initial plugin runtime api implementation (#2779) @knolleary
    • Add initial support for ThemePlugins (#2836) @knolleary
    • Support npm subflow modules (#2690) @knolleary
    • Ability to add projects path to the settings file (#2816) @tfmf
    • Add i18n function to editor plugins when they are registered
    • Add optional 'lang' to settings file (#2796) @fellinga
    • Add SubflowModule class for running subflow modules
    • Add support for settings.externalModules (#2797) @knolleary
    • Allow default project workflow to be set via settings (#2763) @knolleary
    • Allow for adding an array of middleware functions (#2788) @kevinGodell
    • Better logging when deprecated editorTheme.palette.* settings used
    • Detect externalModule dependencies inside subflow modules
    • Fix global leak in lib/flows/index.js
    • Fix numeric status not displaying by ensuring it's a string (#2859) @knolleary
    • Fully remove when.js dependency (#2772) @knolleary
    • make nodes with only group change not deployed by nodes deploy mode
    • Move exec and events components to util module
    • Nodes log via parent flow to allow flow-info to be added
    • Restart node only if node's group changes (#2872) @HiroyasuNishiyama
    • Stop config nodes after flow nodes Fixes #2876 (#2880) @knolleary
    • Update marked dependency
    • Use more async funcs in runtime/lib/api to reduce Promise creation
    • Use npm info to check pending install version

    Nodes

    • Allow nested msg properties in msg/flow/global expressions (#2822)
    • Batch: Messaging API support in Batch node (#2738) @k-toumura
    • CSV: Handle commas in msg.columns if quoted.
    • CSV: Fix csv node template reset when array complete (#2854) @dceejay
    • CSV: Messaging API support in CSV node (#2734) @k-toumura
    • Debug: Sanitize Debug node name when display enable/disable message
    • Delay: Add support for Messaging API to delay node (#2733)
    • Exec: Add settings.execMaxBufferSize to control buffer size of exec node (#2819)
    • Exec: Don't append msg.payload to command by default (#2818)
    • Function: Add 'node' object to close scope
    • Function: allow to load external modules (#2873) @knolleary
    • Function: Add functionExternalModules to settings and default to false
    • Join: Fix join node in array mode with repeated messages, and allow reset all (#2869) @dceejay
    • MQTT: Add MQTT v5 support (#2778 #2886) @Steve-Mcl
    • Sort: Messaging API support in Sort node (#2744) @k-toumura
    • Split/Join: Messaging API support in Split/Join nodes (#2750) @k-toumura
    • Trigger: Messaging API support in Trigger node (#2751) @k-toumura
    • Add example flows for storage nodes (#2784) @HiroyasuNishiyama
    • Add example flows for network nodes (#2855) @HiroyasuNishiyama
    • Add example flows for parser nodes (#2749) @HiroyasuNishiyama
    Source code(tar.gz)
    Source code(zip)
    node-red-1.3.0.zip(3.77 MB)
  • 1.2.9(Feb 3, 2021)

  • 1.2.8(Feb 2, 2021)

    Editor

    • Ensure subflow help is picked up for palette tooltip Fixes #2834
    • Improve Ru locale (#2826) @alexk111
    • Fix scrollbars (#2825) @alexk111

    Runtime

    • Restrict project file access to inside the project directory
    • Validate user-provided language parameter before passing to i18n
    • Fix grunt release mkdir issue on Node.js 14 (#2827) @alexk111
    • Prevent crash when coreNodesDir is empty (#2831) @hardillb

    Nodes

    • Batch node: Fixing minor typo in node's documentation (#2848) @matthiasradde
    • Split node: Handle out of order messages as long as one of the messages has msg.parts.count set to the proper value (#2748) @s4ke
    Source code(tar.gz)
    Source code(zip)
    node-red-1.2.8.zip(3.71 MB)
io-ts Typed Event Bus for the runtime of your Node.js application. A core for any event-driven architecture based app.

Typed Event Bus Based on io-ts types, this bus provides a handy interface to publish and consume events in the current runtime of the Node.js process.

Konstantin Knyazev 3 May 23, 2022
💊 Event-driven DOM programming in a new style

Capsule v0.5.3 Event-driven DOM programming in a new style Features Supports event-driven style of frontend programming in a new way. Supports event d

capsid 21 Oct 1, 2022
Low cost, low effort P2P WebRTC serverless signalling using Cloudflare Workers

P2PCF P2PCF enables free (or cheap) serverless WebRTC signalling using a Cloudflare worker and a Cloudflare R2 bucket. The API is inspired by P2PT, bu

Greg Fodor 560 Jan 8, 2023
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
awsrun 189 Jan 3, 2023
An event-driven architecture wrapper for Wechaty that applies the CQS principle by using separate Query and Command messages to retrieve and modify the bot state, respectively.

CQRS Wechaty An event-driven architecture wrapper for Wechaty that applies the CQS principle by using separate Query and Command messages to retrieve

Wechaty 3 Mar 23, 2022
An AWS Cloud Native application using CDK that defines a Serverless Event Driven application for interacting with Twitter and utilising Machine Learning / AI as a Service.

AWS Serverless Event Driven Twitter Bot An AWS Cloud Native application using CDK (Written in TypeScript) that defines a Serverless Event Driven appli

null 4 Dec 18, 2022
Get event details of competitive programming contests, hackathons etc.

UpCoding Mobile App: (https://github.com/sahanmndl/UpCoding-Demo) This project was bootstrapped with Create React App. Available Scripts In the projec

Sahan Mondal 5 Nov 4, 2022
This a programming training app, aimed to help OMRI's students learng the magic world of programming.

OMRI App (fe-omri-app) This a programming training app, aimed to help OMRI's students learng the magic world of programming. Install the dependencies

OMRI Tech 2 Nov 19, 2022
When a person that doesn't know how to create a programming language tries to create a programming language

Kochanowski Online Spróbuj Kochanowskiego bez konfiguracji projektu! https://mmusielik.xyz/projects/kochanowski Instalacja Stwórz nowy projekt przez n

Maciej Musielik 18 Dec 4, 2022
Cookbook Method is the process of learning a programming language by building up a repository of small programs that implement specific programming concepts.

CookBook - Hacktoberfest Find the book you want to read next! PRESENTED BY What is CookBook? A cookbook in the programming context is collection of ti

GDSC-NITH 16 Nov 17, 2022
An open-source, self-hosted, low-code framework to build internal tools, web apps, admin panels, BI dashboards, workflows, and CRUD apps with YAML or JSON.

An open-source, self-hosted, low-code framework to build internal tools, web apps, admin panels, BI dashboards, workflows, and CRUD apps with YAML or JSON.

Lowdefy 2k Jan 4, 2023
ToolJet an open-source low-code framework to build and deploy internal tools quickly without much effort from the engineering teams

ToolJet is an open-source low-code framework to build and deploy internal tools quickly without much effort from the engineering teams. You can connect to your data sources, such as databases (like PostgreSQL, MongoDB, Elasticsearch, etc), API endpoints (ToolJet supports importing OpenAPI spec & OAuth2 authorization), and external services (like Stripe, Slack, Google Sheets, Airtable) and use our pre-built UI widgets to build internal tools.

ToolJet 15.6k Jan 3, 2023
Bitloops is Low-Code Workflow Orchestration platform that helps you build backend systems and APIs 10x faster.

Bitloops Bitloops is a scalable open source Firebase substitute that can support any database and workflow orchestration. We’re building Bitloops usin

Bitloops 21 Aug 9, 2022
A template for site builders and low-code tools.

Platforms Starter Kit The all-in-one starter kit for building platforms on Vercel. Introduction · Guide · Demo · Kitchen Sink · Contributing Deploy Yo

Vercel 2.3k Jan 3, 2023