Node-REDA visual wiring tool for the Internet of Thingshttps://nodered.org Node-RED Con 2025 is coming! <p>Node-RED Con 2025 is just a week away! This year’s online conference will showcase how Node-RED is driving innovation across industries — from factory floors and utilities to finance and smart homes.</p> <p>We’ve put together a full schedule of talks from across the community and it’s promising to be a great event.</p> <p>I’ll be giving the opening keynote on the current state of the project and where we’re headed. This includes unveiling the results of our recent community survey and what plans we have for modernizing the Node-RED user experience.</p> <p>I’m really looking forward to the event and I hope you’ll join the 1000+ people who have already registered to attend.</p> <p>Be sure not to miss out and get registered <a href="https://events.zoom.us/ev/AqhqiQ8mTK2lnAoOEH8c8TA1a_9MzVhZq_T7d1-kMHlHDt2_Qh_0~ArONnIcxMjLKoD3Stc16u8yBa38mn0RO4y2nOMx4AZqewgJ1dZm6TAmYyyVgBk3jzn2T5FyGxH2VdIpi_Oe6V7CxaA">here</a>!</p> Tue, 28 Oct 2025 00:00:00 +0000 https://nodered.org/blog/2025/10/28/node-red-con https://nodered.org/blog/2025/10/28/node-red-con Version 4.1 released <p>Node-RED 4.1 is now available to <a href="https://npmjs.org/package/node-red">install</a>. If upgrading, please read the <a href="http://nodered.org/docs/getting-started/upgrading.html">upgrade instructions</a>.</p> <p>The <a href="https://github.com/node-red/node-red/releases/tag/4.1.0">Change Log</a> has the full list of changes in this release.</p> <p>Whilst we have your attention, we’re already thinking about what comes next - and we’re running a community survey over the next couple of weeks to help shape our future roadmap. Please give us 10 minutes of your time and share your thoughts. You can <a href="https://survey.nodered.org">take the survey here</a>.</p> <hr /> <ul> <li><a href="#update-notifications">Update Notifications</a></li> <li><a href="#node-documentation-icon">Node Documentation icon</a></li> <li><a href="#managing-flow-dependencies">Managing flow dependencies</a></li> <li><a href="#palette-manager-updates">Palette Manager Updates</a> <ul> <li><a href="#deprecated-modules">Deprecated modules</a></li> <li><a href="#sorting-nodes-by-downloads">Sorting nodes by downloads</a></li> <li><a href="#links-to-node-docs">Links to node docs</a></li> <li><a href="#better-support-for-plugins">Better support for Plugins</a></li> <li><a href="#event-log-widget">Event log widget</a></li> </ul> </li> <li><a href="#other-updates">Other updates</a></li> <li><a href="#node-updates">Node Updates</a></li> <li><a href="#full-changelog">Full Changelog</a></li> <li><a href="#community">Community</a></li> </ul> <hr /> <h3 id="update-notifications">Update Notifications</h3> <p>One of the first things you’ll see when you start 4.1 is a request to enable update notifications. This enables a notification in the editor when there is a new version of Node-RED available. This ensures you can keep up to date with the latest fixes and features. In return, Node-RED sends back anonymous usage information to the project, covering information on what version of NR is being used and type of OS. No information about your users or flows is shared. More information on what is gathered, why and how it’ll be used is available in the <a href="https://nodered.org/docs/telemetry/">documentation</a>.</p> <p>Separately, it will also notify you when there are updates available for any of the nodes in your palette. This part of the notification is handled by the Palette Manager based on the node catalogues it downloads; as such, it is enabled by default.</p> <p><img src="/blog/content/images/2025/07/update-notification.png" alt="" /></p> <h3 id="node-documentation-icon">Node Documentation icon</h3> <p>An often requested feature has finally made the cut; any node with documentation added in its ‘Description’ field of the edit dialog will now show the Info icon. Clicking on the icon will open up the edit dialog.</p> <p>As before, when a node is selected, any content in its Description is shown in the Info sidebar</p> <p>If you aren’t a fan of the icon, you can turn it off in the Editor Settings dialog.</p> <p><img src="/blog/content/images/2025/07/node-docs.png" alt="" /></p> <h3 id="managing-flow-dependencies">Managing flow dependencies</h3> <p>Whilst Node-RED makes it super simple to share flows via its import/export dialog, a common challenge has been not knowing what additional modules need to be installed for the flow to work.</p> <p>With this release, when you export a flow, it now includes meta-data of which additional modules are used by the flow.</p> <p>When importing the flow, if any of the node types aren’t recognised, the editor can now use this information to let you know what needs to be installed.</p> <p>Note: we chose not to automatically install the modules as it felt important that the user should be able to make that choice and not have things get installed without their knowledge.</p> <p><img src="/blog/content/images/2025/07/missing-modules.png" alt="" /></p> <p>This additional meta-data is held in a global-config node within the export. This is a node type that was introduced in Node-RED 4.0 - so you will still be able to import flows from 4.1 back to 4.0.</p> <h3 id="palette-manager-updates">Palette Manager Updates</h3> <p>The Palette Manager has had a number of small but powerful updates.</p> <h4 id="deprecated-modules">Deprecated modules</h4> <p>If a node module has been deprecated by its author on npm, or flagged as such on the flow library, it will now show a deprecated badge. This will be a sign to avoid the module unless you have a very specific need to use it.</p> <p>The Flow Library has been updated to also show this information on the nodes page.</p> <h4 id="sorting-nodes-by-downloads">Sorting nodes by downloads</h4> <p>By default the list of nodes available to install are now sorted by download count. That helps to prioritise the more widely used and popular nodes.</p> <h4 id="links-to-node-docs">Links to node docs</h4> <p>We’ve added links to a node’s documentation on the Nodes tab (previously this was only on the Install tab)</p> <h4 id="better-support-for-plugins">Better support for Plugins</h4> <p>The list of installed modules now handles plugins better - particular those modules that contain a mix of plugins and nodes</p> <h4 id="event-log-widget">Event log widget</h4> <p>When installing a node from the palette manager, it can sometimes take a while depending on where Node-RED is running and the size of the module being installed. If you close the palette manager, you then lose any feedback of the install still running.</p> <p>We’ve had the Event Log view since the early days of Node-RED (menu -&gt; view -&gt; Event log) but I bet its something most users are unaware of.</p> <p>With this release, if there is an install running in the background, a progress widget is shown in the editor footer. Clicking on it will open up the event log. Once the install completes, the widget will hide itself.</p> <p><img src="/blog/content/images/2025/07/event-widget.png" alt="" /></p> <h3 id="other-updates">Other updates</h3> <p>There’s a lot of other smaller items in the changelog, a few more to highlight:</p> <ul> <li> <p>Deploying when you have a badly configured node has alway asked for confirmation. The logic behind that will now ignore nodes that are disabled - as they won’t impact the deployed flow.</p> </li> <li> <p>A new action is available that will trigger the buttons of any selected nodes. This action (<code class="language-plaintext highlighter-rouge">core:trigger-selected-nodes-action</code>) can be found in the Action Menu (<code class="language-plaintext highlighter-rouge">Ctrl-Shift-P</code>), and can be bound to whatever keyboard shortcut you want.</p> </li> <li> <p>Clicking outside of a Node’s edit dialog will no longer close the dialog.</p> </li> </ul> <h3 id="node-updates">Node Updates</h3> <p>Here’s a list of the various updates made to the individual core nodes.</p> <ul> <li>Complete/Status: Fix complete node to not feedback immediately connected nodes (#5114)</li> <li>Function: Add URL/URLSearchParams to Function sandbox (#5159)</li> <li>Function: Add support for node: prefixed modules in function node (#5067)</li> <li>Function: Add globalFunction timeout (#4985) @vasuvanka</li> <li>Exec: Make encoding handling consistent between stdout and err (#5158)</li> <li>Split: Let split node send original msg to complete node (#5113)</li> <li>Split: Rename Split The field (#5130)</li> <li>MQTT: Ensure generated mqtt clientId uses only valid chars (#5156)</li> <li>HTTP In: provide access to request body as Buffer</li> <li>HTTP Request: Fix the capitisation for ALPN settings in http-request (#5105)</li> <li>HTTP Request: (docs) Recommend HTTPS over HTTP (#5141)</li> <li>HTTP Request: Include URL query params in HTTP Digest (#5166)</li> <li>Catch: Add code to error object sent by Catch node (#5081)</li> <li>Debug: Improve debug display of error objects (#5079)</li> <li>Debug: Improve display of loooooong message properties</li> </ul> <h2 id="full-changelog">Full Changelog</h2> <p>The full set of changes in this release can be found in the <a href="https://github.com/node-red/node-red/releases/tag/4.1.0">changelog</a></p> <p>Thank you to everyone who contributed to this release - we wouldn’t be able to do it without you!</p> <h2 id="community">Community</h2> <p>As an open-source project we are reliant on the contribution of the community. We have a strong and vibrant user community, well demonstrated by the activity on the <a href="https://discourse.nodered.org">forums</a>. It’s great to see the support the community provides each other.</p> <p>If you’re interested in contributing to Node-RED, now is a good time to come over and chat with us in either the <a href="https://discourse.nodered.org">forum</a> or <a href="https://nodered.org/slack">slack</a>.</p> Tue, 29 Jul 2025 00:00:00 +0000 https://nodered.org/blog/2025/07/29/version-4-1-released https://nodered.org/blog/2025/07/29/version-4-1-released Version 4.0 released <p>Node-RED 4.0 is now available to <a href="https://npmjs.org/package/node-red">install</a>. If upgrading, please read the <a href="http://nodered.org/docs/getting-started/upgrading.html">upgrade instructions</a>.</p> <p>We’ve highlighted some of the main highlights of the release below. There have also been a large number of community contributions ranging from bug fixes, features, documentation and translations. We wouldn’t be able to do what we do without these contributions - a big thank you to everyone involved.</p> <p>The <a href="https://github.com/node-red/node-red/releases/tag/4.0.0">Change Log</a> has the full list of changes in this release.</p> <hr /> <ul> <li><a href="#nodejs-18-or-later">Node.js 18 or later</a></li> <li><a href="#editor-updates">Editor Updates</a> <ul> <li><a href="#auto-complete-for-flowglobal-and-env-inputs">Auto-complete for <code class="language-plaintext highlighter-rouge">flow</code>/<code class="language-plaintext highlighter-rouge">global</code> and <code class="language-plaintext highlighter-rouge">env</code> inputs</a></li> <li><a href="#customising-config-nodes-in-subflows">Customising config nodes in Subflows</a></li> <li><a href="#timestamp-formatting">Timestamp formatting</a></li> <li><a href="#multiplayer-mode">Multiplayer Mode</a></li> <li><a href="#better-background-deploy-handling">Better background deploy handling</a></li> <li><a href="#improved-diff-view-for-moved-nodes">Improved Diff view for moved nodes</a></li> <li><a href="#better-feedback-for-read-only-users">Better feedback for read-only users</a></li> <li><a href="#new-config-node-selection-ui">New Config Node selection UI</a></li> <li><a href="#other-updates">Other updates</a></li> </ul> </li> <li><a href="#runtime">Runtime</a> <ul> <li><a href="#faster-deploys-for-large-flows">Faster deploys for <em>large</em> flows</a></li> <li><a href="#updated-jsonata">Updated JSONata</a></li> <li><a href="#other-updates-1">Other updates</a></li> </ul> </li> <li><a href="#node-updates">Node Updates</a> <ul> <li><a href="#a-better-csv-node">A better CSV node</a></li> <li><a href="#updated-proxy-handling">Updated Proxy Handling</a></li> <li><a href="#other-updates-2">Other updates</a></li> </ul> </li> <li><a href="#full-changelog">Full Changelog</a></li> <li><a href="#community">Community</a></li> </ul> <hr /> <h2 id="nodejs-18-or-later">Node.js 18 or later</h2> <p>Node-RED 4.0 requires at least Node.js 18. At the time of release, we recommend using Node 20 as the active LTS release that will continue receiving updates until April 2026.</p> <h2 id="editor-updates">Editor Updates</h2> <h3 id="auto-complete-for-flowglobal-and-env-inputs">Auto-complete for <code class="language-plaintext highlighter-rouge">flow</code>/<code class="language-plaintext highlighter-rouge">global</code> and <code class="language-plaintext highlighter-rouge">env</code> inputs</h3> <p>Node-RED already has simple auto-complete on <code class="language-plaintext highlighter-rouge">msg</code> fields in the editor. We’ve now extended that to also work with <code class="language-plaintext highlighter-rouge">flow</code>/<code class="language-plaintext highlighter-rouge">global</code> context inputs as well as the <code class="language-plaintext highlighter-rouge">env</code> type for accessing environment variables.</p> <p><img src="/blog/content/images/2024/06/auto-complete.png" alt="" /></p> <p>This makes it so much easier to work with these types of properties - being sure you’re using something that exists rather than having to switch between different views in the editor to get the names right.</p> <p>In the case of env vars, it also shows you where the value was set - useful when you have nested groups and subflows which might be overriding a particular value.</p> <h3 id="customising-config-nodes-in-subflows">Customising config nodes in Subflows</h3> <p>This one needs a bit of explaining. Subflows are a way Node-RED lets you create a flow and add multiple reusable instances of it within your flows. For example, a subflow may connect to an MQTT broker and do some standard processing on the messages it received before sending them on. The Subflow can then expose a set of properties that can be customised for each instance. In our example, that could be the topic the MQTT node subscribes to.</p> <p>However, in that example, the MQTT node’s broker configuration would be locked to the same broker config node in every instance - and that’s something we’re solving in Node-RED 4.0.</p> <p>We’re making it possible to expose the choice of a configuration node in the Subflow properties - so each instance can be customised even further.</p> <p><img src="/blog/content/images/2024/06/subflow-config.png" alt="" /></p> <p>Another common use for this will be with Node-RED Dashboard - which uses config nodes to set the location of a widget. With Node-RED today, you cannot really use dashboard nodes inside subflows as you end up with multiple copies of the widgets all packed into the same group. With this update, you’ll be able to configure the subflow instance with exactly what dashboard group to place its contents into.</p> <h3 id="timestamp-formatting">Timestamp formatting</h3> <p>The Inject node has provided the ability to inject a timestamp since the very early days of Node-RED. The value it actually sets is the number of milliseconds since epoch (aka January 1st, 1970). If you’re used to working with JavaScript, then this is a perfectly normal way to pass times around. However, it isn’t always what is needed and flows end up using a Function node to reformat it in some way.</p> <p>With 4.0 we’ve added options to pick what format the timestamp is generated in at the start. Now, formatting times and dates can be a big can of worms of options. So, for this initial release, we’ve kept it simple by offering three options:</p> <p><img src="/blog/content/images/2024/06/timestamp-formats.png" alt="" /></p> <ul> <li><em>milliseconds since epoch</em> - the existing option, just more explicitly labelled for what it is</li> <li><em>YYYY-MM-DDTHH:mm:ss.sssZ</em> - also known as ISO 8601</li> <li><em>JavaScript Date Object</em> - the standard Date object</li> </ul> <p>There is scope to allow custom format strings to be set in the node - but we’ll see what the feedback is on these new options first.</p> <h3 id="multiplayer-mode">Multiplayer Mode</h3> <p>We’ve made a number of changes to improve the user experience when multiple people have the editor open at the same time.</p> <p>When enabled via the settings file, the new Multiplayer Mode lets you see when other users have the editor open and where they are - which tab they have open and whether they are editing a node.</p> <p><img src="/blog/content/images/2024/06/multiplayer.png" alt="" /></p> <p>It’s a small step forward towards a longer-term goal of having a live view of the changes other users are making.</p> <p>This new mode is not enabled by default. To turn it on, you need to set <code class="language-plaintext highlighter-rouge">editorTheme.multiplayer.enabled</code> property to <code class="language-plaintext highlighter-rouge">true</code> in your settings file. We’ve added a placeholder in the default settings file, but for an existing install, you’ll need to add it yourself. You can see how/what it should look like <a href="https://github.com/node-red/node-red/blob/3075b82792be6f9668376e66fe6cf3fc137902ff/packages/node_modules/node-red/settings.js#L440-L443">here</a>.</p> <h3 id="better-background-deploy-handling">Better background deploy handling</h3> <p>In the same theme as the new Multiplayer Mode, we’ve also made some improvements to the existing ‘background deploy’ handling in the editor. This is where someone deploys new flows whilst you are busy working in the editor.</p> <p>Previously, you would get a notification that you couldn’t ignore and would have to interrupt what you were doing to deal with. If your colleague was being particularly productive and deploying frequently, you’d get a new interruption every time.</p> <p>With this release, we’ve made the notification less intrusive. It’s no longer modal, so you can carry on what you were doing without having to take any action. We’ve made it slim line so it doesn’t get in the way, and it will self-close after a short period. As with similar runtime notifications, we now also show a warning icon in the header if there has been a background deploy - as it <em>will</em> need dealing with eventually - clicking on that icon shows the notification so you can take action when you choose to.</p> <p><img src="/blog/content/images/2024/06/background-deploy.png" alt="" /></p> <h3 id="improved-diff-view-for-moved-nodes">Improved Diff view for moved nodes</h3> <p>When reviewing changes in the flows, either as a result of a background deploy, or as part of the Projects feature, we now highlight nodes that have only been moved separately to those that have had configuration changes.</p> <p>When faced with a long list of changes, this will make it easier to spot changes that you care about.</p> <p><img src="/blog/content/images/2024/06/diff-view.png" alt="" /></p> <h3 id="better-feedback-for-read-only-users">Better feedback for read-only users</h3> <p>Previously if a user had read-only access to the editor, they could make changes and click the deploy button - only to be told at that point they cannot make changes.</p> <p>With this release, the Deploy button now shows a lock icon if the current user doesn’t have permission to deploy changes. They can still make changes in the workspace, but the deploy button won’t become enabled.</p> <p><img src="/blog/content/images/2024/06/locked-deploy.png" alt="" /></p> <h3 id="new-config-node-selection-ui">New Config Node selection UI</h3> <p>We’ve updated the UI around config node selection to simplify the task of adding a new config node.</p> <p>Feedback from new users showed some confusion on how to add a <em>second</em> config node when there was one already selected in the list. There is now a dedicated add button alongside the selection of existing nodes</p> <p><img src="/blog/content/images/2024/06/add-config-node.png" alt="" /></p> <h3 id="other-updates">Other updates</h3> <ul> <li>The Palette Manager now lists plugins you have installed alongside nodes.</li> <li>The Palette sidebar now remembers how you have expanded or collapsed the different categories</li> </ul> <h2 id="runtime">Runtime</h2> <h3 id="faster-deploys-for-large-flows">Faster deploys for <em>large</em> flows</h3> <p>We’ve swapped the library we use to clone flow configurations in the runtime. The new library is faster and uses less memory.</p> <p>The gains are less noticeable in ‘typical’ flows, but for those of you with <em>large</em> flows, there should be an improvement.</p> <p>In my testing, a config with a few hundred tabs with a few hundred nodes on each, plus some subflows went from 8 seconds to deploy down to just over 1 second.</p> <h3 id="updated-jsonata">Updated JSONata</h3> <p>The JSONata library is used to provide the <code class="language-plaintext highlighter-rouge">expression</code> types in Node-RED - a really powerful way of working with JSON objects. With this release we’ve updated to the new major release of JSONata that comes with a bunch of performance improvements.</p> <p>But it also comes with a breaking change with how it gets invoked under the covers. We prepared for this in 3.1 by adding a large warning to the log if we ever spotted a node accessing it incorrectly. With this release, that warning becomes an error.</p> <p>Given we didn’t hear a lot of complaints in the 3.1 release about this, either the warning went unnoticed, or it isn’t a wide-spread issue. However, this will be something to keep an eye on as you upgrade.</p> <h3 id="other-updates-1">Other updates</h3> <ul> <li>The following configuration options have been added to the default settings file: <ul> <li><code class="language-plaintext highlighter-rouge">httpAdminCookieOptions</code> can be used to customise the options set on cookies as part of the authentication system.</li> <li><code class="language-plaintext highlighter-rouge">httpStaticCors</code> can be used to set custom cross-origin resource sharing rules for the content served up via the <code class="language-plaintext highlighter-rouge">httpStatic</code> option</li> </ul> </li> <li><code class="language-plaintext highlighter-rouge">node-red --version</code> now reports the Node-RED, node.js and os information without starting Node-RED.</li> </ul> <h2 id="node-updates">Node Updates</h2> <h3 id="a-better-csv-node">A better CSV node</h3> <p>The CSV node has had a big overhaul to make it more standards compliant. It turns out CSV has a whole bunch of tricky edge cases that most users don’t hit - but if you did hit them you would be stuck.</p> <p>The new node follows the <a href="https://www.ietf.org/rfc/rfc4180.txt">RFC4180</a> standard and is also faster - wins all around.</p> <p>Existing flows using the CSV node will stay in ‘legacy’ mode until they are modified to use the new parser.</p> <h3 id="updated-proxy-handling">Updated Proxy Handling</h3> <p>The HTTP Request node’s handling of proxies has been updated to address a number of issues and to bring better support for the various standard environment variables used to configure proxies.</p> <p>Details are in the <a href="https://github.com/node-red/node-red/issues/3904">original issue</a> and the <a href="https://github.com/node-red/node-red/pull/4616">pull request</a> that fixed it.</p> <h3 id="other-updates-2">Other updates</h3> <ul> <li>TCP node - when resetting, if no payload, stay disconnected @dceejay</li> <li>HTML node: add option for collecting attributes and content (<a href="https://github.com/node-red/node-red/pull/4513">#4513</a>)</li> <li>let split node specify property to split on, and join auto join correctly (<a href="https://github.com/node-red/node-red/pull/4386">#4386</a>)</li> <li>Fix change node to return boolean if asked (<a href="https://github.com/node-red/node-red/pull/4525">#4525</a>)</li> <li>Let msg.reset reset Tcp request node connection when in stay connected mode (<a href="https://github.com/node-red/node-red/pull/4406">#4406</a>)</li> <li>Let debug node status msg length be settable via settings (<a href="https://github.com/node-red/node-red/pull/4402">#4402</a>)</li> <li>Feat: Add ability to set headers for WebSocket client (<a href="https://github.com/node-red/node-red/pull/4436">#4436</a>)</li> </ul> <h2 id="full-changelog">Full Changelog</h2> <p>The full set of changes in this release can be found in the <a href="https://github.com/node-red/node-red/releases/tag/4.0.0">changelog</a></p> <p>Thank you to everyone who contributed to this release - we wouldn’t be able to do it without you!</p> <h2 id="community">Community</h2> <p>As an open-source project we are reliant on the contribution of the community. We have a strong and vibrant user community, well demonstrated by the activity on the <a href="https://discourse.nodered.org">forums</a>. It’s great to see the support the community provides each other.</p> <p>If you’re interested in contributing to Node-RED, now is a good time to come over and chat with us in either the <a href="https://discourse.nodered.org">forum</a> or <a href="https://nodered.org/slack">slack</a>.</p> Thu, 20 Jun 2024 00:00:00 +0000 https://nodered.org/blog/2024/06/20/version-4-0-released https://nodered.org/blog/2024/06/20/version-4-0-released Version 3.1 released <p>Node-RED 3.1 is now available to <a href="https://npmjs.org/package/node-red">install</a>. If upgrading, please read the <a href="http://nodered.org/docs/getting-started/upgrading.html">upgrade instructions</a>.</p> <p>This release is a little overdue to say the least. We released the first beta back in February - thinking it would be the only one we did. But one thing lead to another and, four beta releases later, here we are finally with the full release for everyone to enjoy.</p> <p>These delays have had a knock-on effect to our <a href="https://nodered.org/about/releases/">release plan</a>. We’re going to shift things around a bit, but still plan to have Node-RED 4.0 released in the near future to keep up to date with Node.js versions reaching their end-of-life.</p> <p>We’ll also get back to more regular maintenance releases to keep things moving.</p> <p>With all that said, and without our usual accompanying video, lets dig into what 3.1 has to offer. As ever, the <a href="https://github.com/node-red/node-red/releases/tag/3.1.0">Change Log</a> has the full list of changes in this release.</p> <hr /> <ul> <li><a href="#editor-updates">Editor Updates</a> <ul> <li><a href="#change-notifications-on-tabs">Change notifications on tabs</a></li> <li><a href="#a-bigger-workspace">A bigger workspace</a></li> <li><a href="#locking-flows">Locking Flows</a></li> <li><a href="#hiding-flows">Hiding Flows</a></li> <li><a href="#new-group-user-experience">New Group User Experience</a></li> <li><a href="#group-level-scope-for-the-catchstatus">Group-level scope for the Catch/Status</a></li> <li><a href="#updated-context-menu">Updated Context Menu</a></li> <li><a href="#adding-images-to-nodeflow-descriptions">Adding images to node/flow descriptions</a></li> <li><a href="#mermaid-diagrams">Mermaid Diagrams</a></li> <li><a href="#global-environment-variables">Global Environment Variables</a></li> <li><a href="#new-subflow-environment-variables">New subflow environment variables</a></li> <li><a href="#changes-to-how-environment-variables-are-evaluated">Changes to how Environment Variables are evaluated</a></li> <li><a href="#linking-to-node-help">Linking to Node Help</a></li> <li><a href="#deprecating-synchronous-access-to-jsonata">Deprecating synchronous access to JSONata</a></li> <li><a href="#improved-wiring-for-horizontally-aligned-nodes">Improved wiring for horizontally aligned nodes</a></li> </ul> </li> <li><a href="#runtime-updates">Runtime Updates</a> <ul> <li><a href="#individual-http-middleware-for-httpstatic-routes">Individual http middleware for httpStatic routes</a></li> </ul> </li> <li><a href="#whats-next">What’s next?</a></li> </ul> <hr /> <h2 id="editor-updates">Editor Updates</h2> <h3 id="change-notifications-on-tabs">Change notifications on tabs</h3> <p>The tab bar now shows a change icon for any tabs that contain changes. This makes it much easier to find where things have changed in your flows.</p> <p><img src="/blog/content/images/2023/09/tab-changes.png" alt="" /></p> <h3 id="a-bigger-workspace">A bigger workspace</h3> <p>We have occasionally had requests to make the tab canvas bigger. There was even a discussion around making it infinitely large - allowing a flow to be as large as it needs to be. Whilst that’s a nice idea, for this release we’ve simply increased the size of each tab from 5000x5000 to 8000x8000.</p> <p>We’d still recommend using tools like Subflows and Link nodes to help organise your flows, but at least this quick change will give you plenty more space to use if you need it.</p> <h3 id="locking-flows">Locking Flows</h3> <p>You can now lock a flow (tab in the editor) to prevent it from being modified. Whilst locked you cannot edit the nodes, add new nodes, modify the wiring… anything.</p> <p>Why is that useful? You may have a ‘mission critical’ flow that you want to be super careful not to change by accident. You may want to collaborate on some flows with others, but mark some of them as ‘off limits’.</p> <p>With this release anyone is able to lock and unlock flows, but it lays the ground work for a possible future where particular users may not have permission to unlock flows - allowing them to only edit the flows they are allowed to.</p> <p>The options to lock/unlock flows are available in the right-click context menu - as well as a new padlock button in the Info sidebar explorer.</p> <p><img src="/blog/content/images/2023/09/locking-flows-01.png" alt="" /></p> <p><img src="/blog/content/images/2023/09/locking-flows-02.png" alt="" /></p> <p>To make this work, we’ve modified how ‘nodes’ are managed inside the editor to prevent them being modified on locked flows. No apis have changed, but it does mean certain calls might fail if they are attempted on a locked flow. This has had a fair amount of testing across all of the core features of the editor, but 3rd party node authors are a creative bunch and it is possible someone is doing something <del>sneaky</del> unexpected with their node implementation that gets tripped up by this. So if you see any odd/inconsistent behaviour with this feature, please do let us know (and definitely have ready any error messages from the browser’s JavaScript console).</p> <h3 id="hiding-flows">Hiding Flows</h3> <p>We added the ability to hide flows a couple releases ago. This was done use the ‘eye’ icon that appeared when you hovered over the tab.</p> <p>We got plenty of feedback, including our own experience, that it was way too easy to accidentally click that button and make things disappear without realising it.</p> <p>So for this release we’ve gotten rid of that button on the tab. Flows can still be hidden, but you do so via the context menu option when you right-click on the tab bar. You can still use the eye button in the Info sidebar explorer.</p> <h3 id="new-group-user-experience">New Group User Experience</h3> <p>Following feedback from the community on what it was like to work with the groups feature in the editor, they have been given a big overhaul in this release.</p> <p>You can now click on any node, inside or outside of a group, and interact with it directly. No more clicking multiple times to get to a node.</p> <p>Because of that change, you now move a group by clicking on its border and dragging it. But what if you’ve made the border invisible? It now highlights whenever you mouse over it.</p> <p>We’ve also made it possible to drag multiple nodes into a group in one go - previously we only supported dragging one node in at a time.</p> <p>And in response to a particular piece of feedback, if you hold down <code class="language-plaintext highlighter-rouge">alt</code> whilst dragging a selection of nodes inside a group, you can drag them <strong>out</strong> of the group.</p> <p>Overall, this should make for a much for intuitive user experience.</p> <h3 id="group-level-scope-for-the-catchstatus">Group-level scope for the Catch/Status</h3> <p>The Catch/Status nodes could already be configured to handle specific nodes within a flow. They can now also be configured to handle just the nodes in the same group as them (or any nested groups).</p> <p>This gives you more options for organising your flows and their error handling.</p> <h3 id="updated-context-menu">Updated Context Menu</h3> <p>We’ve expanded the usefulness of the Context Menu added in the last release. There are now lots more commonly used options available in the menu, which also provides better options related to what you clicked on to open the menu. This includes right-clicking on the tab bar at the top of the workspace to get flow-specific options.</p> <p><img src="/blog/content/images/2023/09/context-menu-01.png" alt="" /></p> <h3 id="adding-images-to-nodeflow-descriptions">Adding images to node/flow descriptions</h3> <p>All nodes and flows have a Description tab in their edit dialog. This lets you write docs (using markdown) that gets displayed in the Info sidebar when the thing is selected.</p> <p>With this release you can now drag images directly into the markdown editor and they will get inlined. This is done by base64 url encoding the image directly into the description property.</p> <h3 id="mermaid-diagrams">Mermaid Diagrams</h3> <p>We’ve also added support for <a href="https://github.com/mermaid-js/mermaid">Mermaid</a> diagrams. These are diagrams that can be defined directly in the markdown and then rendered out as images when displaying in the sidebar. GitHub recently added support for them, and I’ve found them to be super-useful when documenting things when plain text isn’t quite enough.</p> <p><img src="/blog/content/images/2023/09/mermaid.png" alt="" /></p> <h3 id="global-environment-variables">Global Environment Variables</h3> <p>We’ve supported defining environment variables scoped to individual flows, subflows or groups for a while. But the only way to define an environment variable available to all flows was to do it via your settings file. That wasn’t very accessible or portable.</p> <p>So with this release you can now define global env vars via the User Settings dialog:</p> <p><img src="/blog/content/images/2023/09/global-env-vars.png" alt="" /></p> <p>Under the covers these get added to your flow as a new core configuration node type. That will mean importing a flow from 3.1 with global env vars into an earlier version of Node-RED will lead to an unrecognised node warning - something to be aware of.</p> <h3 id="new-subflow-environment-variables">New subflow environment variables</h3> <p>Within a subflow, you can now use <code class="language-plaintext highlighter-rouge">NR_SUBFLOW_NAME</code> <code class="language-plaintext highlighter-rouge">NR_SUBFLOW_ID</code> and <code class="language-plaintext highlighter-rouge">NR_SUBFLOW_PATH</code> to access those properties of the subflow instance node.</p> <p>These join the existing <code class="language-plaintext highlighter-rouge">NR_NODE_*</code>/<code class="language-plaintext highlighter-rouge">NR_FLOW_*</code> and <code class="language-plaintext highlighter-rouge">NR_GROUP_*</code> equivalents.</p> <h3 id="changes-to-how-environment-variables-are-evaluated">Changes to how Environment Variables are evaluated</h3> <p>Environment variables are statically defined values that cannot be changed whilst the flow is running. There were some edge cases to this, such as using a JSONata expression of <code class="language-plaintext highlighter-rouge">$now()</code> that would get re-evaluated every time it was referenced.</p> <p>Because of the need to make JSONata fully asynchronous in the future, we’ve changed how the env var evaluation is done - their values are now all generated when the flows start and not re-evaluated again.</p> <p>This should not cause any changes in behaviour, unless you were relying on the <code class="language-plaintext highlighter-rouge">$now()</code> trick that was not an intentional behaviour.</p> <p>As nodes can depend on env var values, we’ve also updated the logic around the ‘modified nodes’ and ‘modified flows’ types of deploys. Changing an env var at the flow level will now cause all of the nodes on that flow to be considered modified. This is a bit of a blunt solution for this release and we may refine it to be more selective to only the nodes that reference the changed env var - but that’s for another day.</p> <h3 id="linking-to-node-help">Linking to Node Help</h3> <p>Every node dialog now has a help button in its footer. This will open the Help sidebar and display the… you guessed it… help for the node.</p> <p><img src="/blog/content/images/2023/09/node-help-link.png" alt="" /></p> <h3 id="deprecating-synchronous-access-to-jsonata">Deprecating synchronous access to JSONata</h3> <p>This is one for node authors rather than end users.</p> <p>JSONata 2.0 was recently published and promises a lot of significant performance improvements. However it brings a major breaking change - you can no longer evaluate expressions synchronously. So we can’t upgrade to it quite yet, but we can lay some ground work for it.</p> <p>Since we introduced JSONata into Node-RED, we’ve provided a set of standard APIs for nodes to use. Notably:</p> <ul> <li><code class="language-plaintext highlighter-rouge">RED.util.evaluateNodeProperty</code> - used to evaluate all sorts of standard types of property</li> <li><code class="language-plaintext highlighter-rouge">RED.util.evaluateJSONataExpression</code> - used to evaluate a prepared JSONata expression</li> </ul> <p>Both of these functions accept an optional callback parameter which allows them to evaluate asynchronously - however they both also allow synchronous behaviour.</p> <p>With this release we have <em>deprecated</em> calling <code class="language-plaintext highlighter-rouge">evaluateJSONataExpression</code> without a callback argument. By extension, <code class="language-plaintext highlighter-rouge">evaluateNodeProperty</code> will require a callback <em>if</em> being used with JSONata.</p> <p>Using these APIs without a callback will trigger a warning in the log, along with a full stacktrace that will hopefully help identify the node that caused it.</p> <p>Our intention is to update to JSONata 2.0 in Node-RED 4.0 this summer - so we want to flush out any nodes that need updating.</p> <h3 id="improved-wiring-for-horizontally-aligned-nodes">Improved wiring for horizontally aligned nodes</h3> <p>Following <a href="https://discourse.nodered.org/t/feature-request-little-tweak-on-wires/79336">this</a> discussion on the forum, we’ve made some modifications to the wiring layout logic to improve cases where wires loop back on horizontally laid out nodes.</p> <p>Here is a before/after pair of screenshots:</p> <p> <img width="40%" src="/blog/content/images/2023/09/node-wiring-01.png" alt="" /> <img width="40%" src="/blog/content/images/2023/09/node-wiring-02.png" alt="" /> </p> <h2 id="runtime-updates">Runtime Updates</h2> <h3 id="individual-http-middleware-for-httpstatic-routes">Individual http middleware for httpStatic routes</h3> <p>It is now possible to configure separate middleware functions for different <code class="language-plaintext highlighter-rouge">httpStatic</code> configured routes.</p> <p>See <a href="https://github.com/node-red/node-red/pull/4229">#4229</a> for the details.</p> <h2 id="whats-next">What’s next?</h2> <p>As I mentioned at the start, this release is overdue and has pushed back the existing release plan.</p> <p>With Node.js 16.x reaching its end-of-life <em>next week</em>, we’ll be moving forward with Node-RED 4.0 in the near future. As it stands, we strongly recommend users to be using Node 18 or 20 by now.</p> <p>As an open-source project we are reliant on the contribution of the community. We have a strong and vibrant user community, well demonstrated by the activity on the <a href="https://discourse.nodered.org">forums</a>. It’s great to see the support the community provides each other.</p> <p>If you’re interested in contributing to Node-RED, now is a good time to come over and chat with us in either the <a href="https://discourse.nodered.org">forum</a> or <a href="https://nodered.org/slack">slack</a>.</p> Wed, 06 Sep 2023 00:00:00 +0000 https://nodered.org/blog/2023/09/06/version-3-1-released https://nodered.org/blog/2023/09/06/version-3-1-released 2023 Community Survey <p><strong>Update:</strong> the results are now available <a href="/about/community/survey/2023/">here</a>.</p> <p>Back in 2019 we published the results of the 2019 Node-RED community survey. The results painted an interesting picture of the Node-RED community. We think it is time to refresh these results so we are running the survey again.</p> <p>The 2023 survey is similar to the 2019. We’ve made a few tweaks, removed some questions and added some new ones. The goal is to get a better picture of who our uses are, what they do with Node-RED and to make sure we keep the project pointed in the right direction.</p> <p>The survey will be open until March 31. Of course we would like to get as many respondents as possible. In 2019, we have over 800 individuals respond so hopefully we can meet this number again this year.</p> <p>Once the survey has been completed, we will publish the results for the entire community to see.</p> <p>The survey should take less than 10 minutes to complete. Thank you in advance for your feedback.</p> <p><strong>Update:</strong> The survey is now closed.</p> Thu, 23 Feb 2023 00:00:00 +0000 https://nodered.org/blog/2023/02/23/community-survey https://nodered.org/blog/2023/02/23/community-survey