<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <generator uri="http://jekyllrb.com" version="3.10.0">Jekyll</generator>
  <link href="https://nodered.jp/feed.xml" rel="self" type="application/atom+xml" />
  <link href="https://nodered.jp/" rel="alternate" type="text/html" />
  <updated>2026-06-09T06:22:32+00:00</updated>
  <id>https://nodered.jp//</id>

  
    <title type="html">Node-RED</title>
  

  

  

  
  
    <entry>
      <title type="html">Version 3.1 released</title>
      <link href="https://nodered.jp/blog/2023/09/06/version-3-1-released" rel="alternate" type="text/html" title="Version 3.1 released" />
      <published>2023-09-06T00:00:00+00:00</published>
      <updated>2023-09-06T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2023/09/06/version-3-1-released</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Node-RED 3.1 is now available to &lt;a href=&quot;https://npmjs.org/package/node-red&quot;&gt;install&lt;/a&gt;. If upgrading, please read the &lt;a href=&quot;http://nodered.org/docs/getting-started/upgrading.html&quot;&gt;upgrade instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;These delays have had a knock-on effect to our &lt;a href=&quot;https://nodered.org/about/releases/&quot;&gt;release plan&lt;/a&gt;.
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.&lt;/p&gt;

&lt;p&gt;We’ll also get back to more regular maintenance releases to keep things moving.&lt;/p&gt;

&lt;p&gt;With all that said, and without our usual accompanying video, lets dig into what
3.1 has to offer. As ever, the &lt;a href=&quot;https://github.com/node-red/node-red/releases/tag/3.1.0&quot;&gt;Change Log&lt;/a&gt; has the full list of changes in
this release.&lt;/p&gt;

&lt;hr /&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#editor-updates&quot;&gt;Editor Updates&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#change-notifications-on-tabs&quot;&gt;Change notifications on tabs&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#a-bigger-workspace&quot;&gt;A bigger workspace&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#locking-flows&quot;&gt;Locking Flows&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#hiding-flows&quot;&gt;Hiding Flows&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#new-group-user-experience&quot;&gt;New Group User Experience&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#group-level-scope-for-the-catchstatus&quot;&gt;Group-level scope for the Catch/Status&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#updated-context-menu&quot;&gt;Updated Context Menu&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#adding-images-to-nodeflow-descriptions&quot;&gt;Adding images to node/flow descriptions&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#mermaid-diagrams&quot;&gt;Mermaid Diagrams&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#global-environment-variables&quot;&gt;Global Environment Variables&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#new-subflow-environment-variables&quot;&gt;New subflow environment variables&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#changes-to-how-environment-variables-are-evaluated&quot;&gt;Changes to how Environment Variables are evaluated&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#linking-to-node-help&quot;&gt;Linking to Node Help&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#deprecating-synchronous-access-to-jsonata&quot;&gt;Deprecating synchronous access to JSONata&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#improved-wiring-for-horizontally-aligned-nodes&quot;&gt;Improved wiring for horizontally aligned nodes&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#runtime-updates&quot;&gt;Runtime Updates&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#individual-http-middleware-for-httpstatic-routes&quot;&gt;Individual http middleware for httpStatic routes&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#whats-next&quot;&gt;What’s next?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;editor-updates&quot;&gt;Editor Updates&lt;/h2&gt;

&lt;h3 id=&quot;change-notifications-on-tabs&quot;&gt;Change notifications on tabs&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2023/09/tab-changes.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;a-bigger-workspace&quot;&gt;A bigger workspace&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id=&quot;locking-flows&quot;&gt;Locking Flows&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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’.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2023/09/locking-flows-01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2023/09/locking-flows-02.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;del&gt;sneaky&lt;/del&gt; 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).&lt;/p&gt;

&lt;h3 id=&quot;hiding-flows&quot;&gt;Hiding Flows&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id=&quot;new-group-user-experience&quot;&gt;New Group User Experience&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;And in response to a particular piece of feedback, if you hold down &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alt&lt;/code&gt; whilst dragging a selection of nodes inside a group, you can drag them &lt;strong&gt;out&lt;/strong&gt; of the group.&lt;/p&gt;

&lt;p&gt;Overall, this should make for a much for intuitive user experience.&lt;/p&gt;

&lt;h3 id=&quot;group-level-scope-for-the-catchstatus&quot;&gt;Group-level scope for the Catch/Status&lt;/h3&gt;

&lt;p&gt;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).&lt;/p&gt;

&lt;p&gt;This gives you more options for organising your flows and their error handling.&lt;/p&gt;

&lt;h3 id=&quot;updated-context-menu&quot;&gt;Updated Context Menu&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2023/09/context-menu-01.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;adding-images-to-nodeflow-descriptions&quot;&gt;Adding images to node/flow descriptions&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id=&quot;mermaid-diagrams&quot;&gt;Mermaid Diagrams&lt;/h3&gt;

&lt;p&gt;We’ve also added support for &lt;a href=&quot;https://github.com/mermaid-js/mermaid&quot;&gt;Mermaid&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2023/09/mermaid.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;global-environment-variables&quot;&gt;Global Environment Variables&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;So with this release you can now define global env vars via the User Settings dialog:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2023/09/global-env-vars.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id=&quot;new-subflow-environment-variables&quot;&gt;New subflow environment variables&lt;/h3&gt;

&lt;p&gt;Within a subflow, you can now use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_SUBFLOW_NAME&lt;/code&gt; &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_SUBFLOW_ID&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_SUBFLOW_PATH&lt;/code&gt; to access those properties of the subflow instance node.&lt;/p&gt;

&lt;p&gt;These join the existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_NODE_*&lt;/code&gt;/&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_FLOW_*&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_GROUP_*&lt;/code&gt; equivalents.&lt;/p&gt;

&lt;h3 id=&quot;changes-to-how-environment-variables-are-evaluated&quot;&gt;Changes to how Environment Variables are evaluated&lt;/h3&gt;

&lt;p&gt;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 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$now()&lt;/code&gt; that would get re-evaluated every time it was referenced.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;This should not cause any changes in behaviour, unless you were relying on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$now()&lt;/code&gt; trick that was not an intentional behaviour.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id=&quot;linking-to-node-help&quot;&gt;Linking to Node Help&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2023/09/node-help-link.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;deprecating-synchronous-access-to-jsonata&quot;&gt;Deprecating synchronous access to JSONata&lt;/h3&gt;

&lt;p&gt;This is one for node authors rather than end users.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Since we introduced JSONata into Node-RED, we’ve provided a set of standard APIs for nodes to use. Notably:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RED.util.evaluateNodeProperty&lt;/code&gt; - used to evaluate all sorts of standard types of property&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RED.util.evaluateJSONataExpression&lt;/code&gt; - used to evaluate a prepared JSONata expression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both of these functions accept an optional callback parameter which allows them to evaluate asynchronously - however they both also allow synchronous behaviour.&lt;/p&gt;

&lt;p&gt;With this release we have &lt;em&gt;deprecated&lt;/em&gt; calling &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;evaluateJSONataExpression&lt;/code&gt; without a callback argument. By extension, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;evaluateNodeProperty&lt;/code&gt; will require a callback &lt;em&gt;if&lt;/em&gt; being used with JSONata.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;h3 id=&quot;improved-wiring-for-horizontally-aligned-nodes&quot;&gt;Improved wiring for horizontally aligned nodes&lt;/h3&gt;

&lt;p&gt;Following &lt;a href=&quot;https://discourse.nodered.org/t/feature-request-little-tweak-on-wires/79336&quot;&gt;this&lt;/a&gt; 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.&lt;/p&gt;

&lt;p&gt;Here is a before/after pair of screenshots:&lt;/p&gt;

&lt;p&gt;
  &lt;img width=&quot;40%&quot; src=&quot;/blog/content/images/2023/09/node-wiring-01.png&quot; alt=&quot;&quot; /&gt;
  &lt;img width=&quot;40%&quot; src=&quot;/blog/content/images/2023/09/node-wiring-02.png&quot; alt=&quot;&quot; /&gt;
&lt;/p&gt;

&lt;h2 id=&quot;runtime-updates&quot;&gt;Runtime Updates&lt;/h2&gt;

&lt;h3 id=&quot;individual-http-middleware-for-httpstatic-routes&quot;&gt;Individual http middleware for httpStatic routes&lt;/h3&gt;

&lt;p&gt;It is now possible to configure separate middleware functions for different &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;httpStatic&lt;/code&gt; configured routes.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;https://github.com/node-red/node-red/pull/4229&quot;&gt;#4229&lt;/a&gt; for the details.&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;

&lt;p&gt;As I mentioned at the start, this release is overdue and has pushed back the existing
release plan.&lt;/p&gt;

&lt;p&gt;With Node.js 16.x reaching its end-of-life &lt;em&gt;next week&lt;/em&gt;, 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.&lt;/p&gt;

&lt;p&gt;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
&lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forums&lt;/a&gt;. It’s great to see the support the community
provides each other.&lt;/p&gt;

&lt;p&gt;If you’re interested in contributing to Node-RED, now is a good time to come over
and chat with us in either the &lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forum&lt;/a&gt; or &lt;a href=&quot;https://nodered.org/slack&quot;&gt;slack&lt;/a&gt;.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Node-RED 3.1 is now available to install. If upgrading, please read the upgrade instructions.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">2023 Community Survey</title>
      <link href="https://nodered.jp/blog/2023/02/23/community-survey" rel="alternate" type="text/html" title="2023 Community Survey" />
      <published>2023-02-23T00:00:00+00:00</published>
      <updated>2023-02-23T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2023/02/23/community-survey</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; the results are now available &lt;a href=&quot;/about/community/survey/2023/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Once the survey has been completed, we will publish the results for the entire community to see.&lt;/p&gt;

&lt;p&gt;The survey should take less than 10 minutes to complete. Thank you in advance for your feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; The survey is now closed.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Update: the results are now available here. 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. 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. 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. Once the survey has been completed, we will publish the results for the entire community to see. The survey should take less than 10 minutes to complete. Thank you in advance for your feedback. Update: The survey is now closed.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">Version 3.0 released</title>
      <link href="https://nodered.jp/blog/2022/07/14/version-3-0-released" rel="alternate" type="text/html" title="Version 3.0 released" />
      <published>2022-07-14T00:00:00+00:00</published>
      <updated>2022-07-14T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2022/07/14/version-3-0-released</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Node-RED 3.0 is now available to &lt;a href=&quot;https://npmjs.org/package/node-red&quot;&gt;install&lt;/a&gt;. If upgrading, please read the &lt;a href=&quot;http://nodered.org/docs/getting-started/upgrading.html&quot;&gt;upgrade instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/node-red/node-red/blob/1b94cc3ac027bfc38a300867a0b0fd635bf273b8/CHANGELOG.md&quot;&gt;Change Log&lt;/a&gt; has the full list of changes in this release, but here are the highlights.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/R9bV2MytHr0&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;hr /&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#migrating-from-node-red-2x&quot;&gt;Migrating from Node-RED 2.x&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#editor-features&quot;&gt;Editor Features&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#context-menu&quot;&gt;Context Menu&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#junctions&quot;&gt;Junctions&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#debug-path-tooltip&quot;&gt;Debug Path Tooltip&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#continuous-search&quot;&gt;Continuous Search&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#default-node-names&quot;&gt;Default node names&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#monaco-text-editor&quot;&gt;Monaco Text Editor&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#remembering-cursor-position&quot;&gt;Remembering cursor position&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#accessing-previous-welcome-tours&quot;&gt;Accessing previous welcome tours&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#runtime-features&quot;&gt;Runtime Features&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#editing-stopped-flows&quot;&gt;Editing stopped flows&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#diagnostic-report&quot;&gt;Diagnostic Report&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#multiple-static-folders&quot;&gt;Multiple static folders&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#node-updates&quot;&gt;Node updates&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#dynamic-link-call-node&quot;&gt;Dynamic Link Call node&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#environment-variables-in-the-template-node&quot;&gt;Environment Variables in the Template node&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#debug-node-message-count&quot;&gt;Debug node message count&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#predefined-http-request-headers&quot;&gt;Predefined HTTP Request headers&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#whats-next&quot;&gt;What’s next?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;migrating-from-node-red-2x&quot;&gt;Migrating from Node-RED 2.x&lt;/h2&gt;

&lt;p&gt;Here are the key points you need to know when migrating to Node-RED 3.x.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Node.js 14.x or later required&lt;/li&gt;
  &lt;li&gt;Internet Explorer no longer supported&lt;/li&gt;
  &lt;li&gt;Choose if you want to enable the &lt;a href=&quot;#editing-stopped-flows&quot;&gt;Stopping Flows&lt;/a&gt; feature&lt;/li&gt;
  &lt;li&gt;Choose if you want to &lt;em&gt;disable&lt;/em&gt; the &lt;a href=&quot;#diagnostic-report&quot;&gt;Runtime Diagnostics&lt;/a&gt; feature&lt;/li&gt;
  &lt;li&gt;Choose if you want to switch to the &lt;a href=&quot;#monaco-text-editor&quot;&gt;Monaco editor&lt;/a&gt; (if you haven’t already).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;editor-features&quot;&gt;Editor Features&lt;/h2&gt;

&lt;h3 id=&quot;context-menu&quot;&gt;Context Menu&lt;/h3&gt;

&lt;p&gt;We have (finally) added a right-click context menu in the workspace. This gives
you quick access to a lot of built-in actions in the editor and should help users
discover more of the features available.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/context.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Picking what options should be in the menu hasn’t been a simple task. There are
a lot of things that could have been included - so we had to get the right balance
between having the right options there and making it too long and hard to find.&lt;/p&gt;

&lt;h3 id=&quot;junctions&quot;&gt;Junctions&lt;/h3&gt;

&lt;p&gt;We have introduced a new special node type called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;junction&lt;/code&gt; that can make it
easier to route the wires in a flow.&lt;/p&gt;

&lt;p&gt;Unlike the various ‘no-op’ nodes that have been published to the community to help
achieve similar results, the Junctions are far more compact and less obtrusive
in the flow.&lt;/p&gt;

&lt;p&gt;When you hover over a Junction, it expands to show input and output ports. You can
move the junction by dragging its body, or add a wire by click/dragging on one of
its ports - just as you do with nodes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/junctions.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Junctions do not appear as regular nodes in the palette or flow outline, but can be
added through the quick-add dialog (Ctrl-click in the workspace) or the new Context Menu.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/jucntion-quick-add.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;You can also insert a Junction into an existing wire by slicing through it with the
mouse by holding &lt;kbd&gt;alt-shift&lt;/kbd&gt; when dragging across the wire. Note that some OS might
use that same combination to move the active window, so this won’t work there. We
don’t yet have a way to allow the mouse actions to be customised, so users affected
by that would have to use the other methods to add Junctions.&lt;/p&gt;

&lt;h3 id=&quot;debug-path-tooltip&quot;&gt;Debug Path Tooltip&lt;/h3&gt;

&lt;p&gt;When hovering over a node name in the Debug sidebar, a new tooltip shows the full
location of the node. This is useful when working with subflows, making it much
easier to identify exactly which node generated the message.&lt;/p&gt;

&lt;p&gt;Clicking on any item in the list will reveal it in the workspace.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/debug-tooltip.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;continuous-search&quot;&gt;Continuous Search&lt;/h3&gt;

&lt;p&gt;When searching for things in the editor, a new toolbar in the workspace provides
options to quickly jump between the search results.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/search.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We’ve added a pair of new actions to help navigate the results:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core:search-next&lt;/code&gt; - shortcut: &lt;kbd&gt;f&lt;/kbd&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core:search-previous&lt;/code&gt; - shortcut: &lt;kbd&gt;shift-f&lt;/kbd&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We’ve also added some more predefined searches, including the ability to restrict
the search to the current flow.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/search-options.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;default-node-names&quot;&gt;Default node names&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Debug&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Function&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Link&lt;/code&gt; nodes are now given unique default names when
they are added to the workspace.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/node-names.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This capability could be added to any node, including contrib nodes, via their
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;onadd&lt;/code&gt; function. We chose just this initial set as they were the ones that would
most benefit from having a name applied.&lt;/p&gt;

&lt;p&gt;A new action has also been added that will apply an appropriate default name to
any selected nodes that don’t currently have a name:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core:generate-node-names&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;monaco-text-editor&quot;&gt;Monaco Text Editor&lt;/h3&gt;

&lt;p&gt;We added the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;monaco&lt;/code&gt; editor component as an alternative to the default &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ace&lt;/code&gt;
editor a year ago in the 2.x release. It has proven to be very stable and provides
a much richer user experience.&lt;/p&gt;

&lt;p&gt;With 3.0, we have switched over to monaco as the default editor. New installs of
Node-RED will pickup the change - existing installs will need to update (or remove) the
&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;codeEditor&lt;/code&gt; entry in their settings file.&lt;/p&gt;

&lt;p&gt;The ultimate goal will be to remove &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ace&lt;/code&gt; entirely in the 4.0 release next year.&lt;/p&gt;

&lt;h3 id=&quot;remembering-cursor-position&quot;&gt;Remembering cursor position&lt;/h3&gt;

&lt;p&gt;The editor now tries to restore your cursor position when you reopen a node’s
edit dialog. This is super handy with the Function node, amongst others, where
you don’t want to have to scroll back to where you were working each time you
open the edit dialog.&lt;/p&gt;

&lt;h3 id=&quot;accessing-previous-welcome-tours&quot;&gt;Accessing previous welcome tours&lt;/h3&gt;

&lt;p&gt;We introduced the Welcome Tour back in 2.1.0 and it has been updated for each
release. With this release, we’ve added a way to access the tours of the previous
releases in the Help sidebar:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/tours.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;runtime-features&quot;&gt;Runtime Features&lt;/h2&gt;

&lt;h3 id=&quot;editing-stopped-flows&quot;&gt;Editing stopped flows&lt;/h3&gt;

&lt;p&gt;We’ve introduced the &lt;strong&gt;optional&lt;/strong&gt; ability to run Node-RED without the flows
themselves running. We already had Safe Mode that achieved a similar result, but
with this new feature, you can stop and start the flows directly from the editor.
The runtime will remember the state of the flows so when Node-RED starts up, the
flows will stay in the same started/stopped state.&lt;/p&gt;

&lt;p&gt;This feature is &lt;strong&gt;not enabled by default&lt;/strong&gt;. To enable it, you need to add the
following to your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.js&lt;/code&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;runtimeState: {
   enabled: true,
   ui: true
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;With that set, you get a new option in the Deploy menu:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/deploy-stop.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Clicking that option will stop the flows running, but you can continue editing
them and deploy changes. Whilst stopped, the Inject/Debug node buttons will be
disabled.&lt;/p&gt;

&lt;p&gt;When the flows are stopped, the menu shows a start option instead:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/07/deploy-start.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;diagnostic-report&quot;&gt;Diagnostic Report&lt;/h3&gt;

&lt;p&gt;We’ve added a new admin endpoint that returns information about the runtime and
the system its running on. This can be used to quickly gather information when
reporting an issue.&lt;/p&gt;

&lt;p&gt;Within the editor you can see the information it returns by running the ‘Show System Info’
action.&lt;/p&gt;

&lt;p&gt;We have taken care to ensure this does not return anything sensitive. In some cases
it will indicate if a particular setting is set, but not what value it has been
set to.&lt;/p&gt;

&lt;p&gt;We realise that not everyone will want to have this exposed depending on how
they use Node-RED. For that reason, the endpoint can be disabled by adding the
following to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.js&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;diagnostics: {
    enabled: false
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;multiple-static-folders&quot;&gt;Multiple static folders&lt;/h3&gt;

&lt;p&gt;The runtime has long-supported the ability to serve a folder of static content
as part of its HTTP handling. Useful for providing static resources to webpages
and the like.&lt;/p&gt;

&lt;p&gt;With this release you can now specify multiple folders to serve from and, more
importantly, to specify the http path each folder should be served from.&lt;/p&gt;

&lt;p&gt;See &lt;a href=&quot;https://github.com/node-red/node-red/pull/3542&quot;&gt;#3542&lt;/a&gt; for details on how it
can be used.&lt;/p&gt;

&lt;h2 id=&quot;node-updates&quot;&gt;Node updates&lt;/h2&gt;

&lt;h3 id=&quot;dynamic-link-call-node&quot;&gt;Dynamic Link Call node&lt;/h3&gt;

&lt;p&gt;We added the Link Call node in Node-RED 2.1. It lets you create a flow that calls
out to a Link In node and get a response back. The main limitation was you had
to hardcode what Link In node you wanted it to call.&lt;/p&gt;

&lt;p&gt;With this release you can now use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.target&lt;/code&gt; to set the name of the Link In node
it should call.&lt;/p&gt;

&lt;h3 id=&quot;environment-variables-in-the-template-node&quot;&gt;Environment Variables in the Template node&lt;/h3&gt;

&lt;p&gt;The Template node can now access environment variables using the syntax:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;My favourite colour is {{env.COLOUR}}.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;debug-node-message-count&quot;&gt;Debug node message count&lt;/h3&gt;

&lt;p&gt;The Debug node has a new option to report how many messages it has received in its
status output.&lt;/p&gt;

&lt;h3 id=&quot;predefined-http-request-headers&quot;&gt;Predefined HTTP Request headers&lt;/h3&gt;

&lt;p&gt;The HTTP Request node now allows you to set request headers in the node’s edit
dialog - rather than having to always pass them in as message properties.&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;

&lt;p&gt;As happened with 2.0, we’ve overrun our plan for getting 3.0 released in April. But
the series of beta releases we have been doing have really helped improve the overall
quality of this release.&lt;/p&gt;

&lt;p&gt;The main challenge has always been getting enough time and attention dedicated
to keep the release cadence going.&lt;/p&gt;

&lt;p&gt;Our next scheduled main release will be 3.1 in late October/November. As ever,
we have a healthy backlog of items to keep us busy - but ultimately it depends
very much on the feedback from the community.&lt;/p&gt;

&lt;p&gt;If you’re interested in contributing to Node-RED, now is a good time to come over
and chat with us in either the &lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forum&lt;/a&gt; or &lt;a href=&quot;https://nodered.org/slack&quot;&gt;slack&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Node-Red 2.x is now in maintenance mode - we won’t be added any new features to it,
but we will do maintenance releases with fixes as needed. In fact, we’ll have a
long overdue 2.2.3 release in the next couple of weeks.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Node-RED 3.0 is now available to install. If upgrading, please read the upgrade instructions.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">Introducing the Node Scorecard</title>
      <link href="https://nodered.jp/blog/2022/01/31/introducing-scorecard" rel="alternate" type="text/html" title="Introducing the Node Scorecard" />
      <published>2022-01-31T00:00:00+00:00</published>
      <updated>2022-01-31T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2022/01/31/introducing-scorecard</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Last year we asked the community what frustrations they were experiencing as both
users and creators of 3rd party nodes. One of the common themes was that it was
hard to judge the quality of a node just from looking at its page on the &lt;a href=&quot;https://flows.nodered.org&quot;&gt;Flow Library&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Based on that feedback, we’re now introducing Node Scorecards.&lt;/p&gt;

&lt;p&gt;The scorecard provides a summary of a Node across a range of things such as whether
it follows our naming guidelines, does it have a valid license applied and does it
clash with other packages in the library.&lt;/p&gt;

&lt;p&gt;When we first introduced the Flow Library, we chose not to act as gatekeepers to
what can be shared, beyond some very basic checks on the nodes. The scorecard
doesn’t change that, but it does help start to highlight where a node may need some additional work to meet the recommended best practices.&lt;/p&gt;

&lt;p&gt;We’ve been running the tool against new submissions to the Flow Library for a
couple months now so there are scorecards for many of the recently updated nodes.
You’ll now see a link to ‘View scorecard’ in the sidebar of a node’s page on the
library, along with a summary of the scorecard.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/node-page.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Click through gives you a more detailed view of the scorecard - listing out all
of the checks made. You can find out more about the purpose of each check by clicking
on the i link on the right hand side.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/node-scorecard.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;changing-our-recommended-naming-convention&quot;&gt;Changing our recommended naming convention&lt;/h3&gt;

&lt;p&gt;As part of the work to improve the overall quality of the Flow Library, we’re making
a change to our &lt;a href=&quot;/docs/creating-nodes/packaging#naming&quot;&gt;naming guidelines for node modules&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Previously, we asked that if a module’s name started with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red-&lt;/code&gt;, that it
use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red-contrib-&lt;/code&gt; to distinguish it from modules maintained by the core project.&lt;/p&gt;

&lt;p&gt;We now recommend that &lt;em&gt;newly published&lt;/em&gt; modules use a &lt;a href=&quot;https://docs.npmjs.com/cli/v8/using-npm/scope&quot;&gt;scoped name&lt;/a&gt; - such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@myScope/node-red-sample&lt;/code&gt;. That can be your own user scope, or an organisation scope.&lt;/p&gt;

&lt;p&gt;If you use a scoped name, there are no further requirements on the name. You could
use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@myScope/node-red-sample&lt;/code&gt; or just &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@myScope/sample&lt;/code&gt; - although having &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red&lt;/code&gt;
in the name does help to associate the module with the project.&lt;/p&gt;

&lt;p&gt;If you are forking an existing package to provide a fix, you can keep the same name but
released under your own scope. But please keep in mind, forking should always be a
last resort if the original maintainer is not responsive to your contributions.&lt;/p&gt;

&lt;p&gt;We won’t be asking anyone to republish their existing modules under this new
naming convention, but the scorecard will flag up any newly added modules
that don’t follow this new convention from today.&lt;/p&gt;

&lt;h3 id=&quot;node-developers&quot;&gt;Node Developers&lt;/h3&gt;

&lt;p&gt;The tool underlying the scorecard is &lt;a href=&quot;https://www.npmjs.com/package/node-red-dev&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red-dev&lt;/code&gt;&lt;/a&gt; - a new command-line tool that
developers can run locally against their own code to check for any possible issues
before publishing to npm. Many of the checks are quick and easy to fix - much better
to do so before sharing with the community.&lt;/p&gt;

&lt;p&gt;You can run the tool either against a path on your local machine or against a package already published to npm using the appropriate flags, and you’ll get the results in the console&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/node-red-dev.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;the-future&quot;&gt;The Future&lt;/h3&gt;

&lt;p&gt;This is the first step in improving the quality of our node ecosystem, over time
we will add more checks to the scorecard. It doesn’t currently examine the code
of a node, but that is certainly something that could be explored.&lt;/p&gt;

&lt;p&gt;There’s also a lot more that &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red-dev&lt;/code&gt; could do for Node Developers beyond
the scorecard check. For example, using it to bootstrap development of a new
node module, with all of the best practices pre-applied.&lt;/p&gt;

&lt;p&gt;If that’s something you’re interested in contributing to, please do come talk to
us in the &lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forum&lt;/a&gt;.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Last year we asked the community what frustrations they were experiencing as both users and creators of 3rd party nodes. One of the common themes was that it was hard to judge the quality of a node just from looking at its page on the Flow Library.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">Version 2.2 released</title>
      <link href="https://nodered.jp/blog/2022/01/27/version-2-2-released" rel="alternate" type="text/html" title="Version 2.2 released" />
      <published>2022-01-27T00:00:00+00:00</published>
      <updated>2022-01-27T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2022/01/27/version-2-2-released</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Node-RED 2.2 is now available to &lt;a href=&quot;https://npmjs.org/package/node-red&quot;&gt;install&lt;/a&gt;. If upgrading, please read the &lt;a href=&quot;http://nodered.org/docs/getting-started/upgrading.html&quot;&gt;upgrade instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/node-red/node-red/blob/3a69af9034a6f3a59f35c17aa16e018807a38e93/CHANGELOG.md&quot;&gt;Change Log&lt;/a&gt; has the full list of changes in this release, but here are the highlights.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/vAS3gK2Wans&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#highlights&quot;&gt;Highlights&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#search-history&quot;&gt;Search History&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#remembering-zoom-position&quot;&gt;Remembering zoom/position&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#aligning-nodes&quot;&gt;Aligning nodes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#detaching-nodes&quot;&gt;Detaching nodes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#selecting-multiple-wires&quot;&gt;Selecting multiple wires&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#slicing-wires&quot;&gt;Slicing wires&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#subflow-output-labels&quot;&gt;Subflow Output labels&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#predefined-environment-variables&quot;&gt;Predefined Environment Variables&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#node-paths&quot;&gt;Node Paths&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#node-updates&quot;&gt;Node Updates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#whats-next&quot;&gt;What’s next?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;highlights&quot;&gt;Highlights&lt;/h2&gt;

&lt;h3 id=&quot;search-history&quot;&gt;Search History&lt;/h3&gt;

&lt;p&gt;The main search dialog now keeps a history of your searches. This makes it easy
to repeatedly search for the same thing.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/search-history.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;remembering-zoomposition&quot;&gt;Remembering zoom/position&lt;/h3&gt;

&lt;p&gt;Under the View section of the main settings dialog, there are a pair of options
to get the editor to remember the zoom level of the workspace, as well as the
scroll position of individual tabs.&lt;/p&gt;

&lt;p&gt;This is helpful if you prefer to have the workspace zoomed in - you don’t have
to reset it every time you reload the editor.&lt;/p&gt;

&lt;h3 id=&quot;aligning-nodes&quot;&gt;Aligning nodes&lt;/h3&gt;

&lt;p&gt;With snap-to-grid enabled, nodes with hidden labels (for example, link nodes) can
now be aligned on either their left or right edge. This will make it easier to
get everything to line up in the workspace&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/align-nodes.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;detaching-nodes&quot;&gt;Detaching nodes&lt;/h3&gt;

&lt;p&gt;You can now delete a node from the middle of a flow and have the wiring automatically
repair itself in the background.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/delete-reconnect.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This is done by holding the Ctrl (or Cmd) key when you press delete.&lt;/p&gt;

&lt;p&gt;You can also detach a node from the flow &lt;em&gt;without&lt;/em&gt; deleting it:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/detach-node.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We haven’t assigned a default shortcut for that, but you can assign one yourself
in the Keyboard pane of the Settings dialog. The action is called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core:detach-selected-nodes&lt;/code&gt;.&lt;/p&gt;

&lt;h3 id=&quot;selecting-multiple-wires&quot;&gt;Selecting multiple wires&lt;/h3&gt;

&lt;p&gt;You can also select multiple wires by ctrl-clicking on them.&lt;/p&gt;

&lt;p&gt;When you select multiple nodes, we also highlight any wires between them. This can make it easier to follow a flow once you have selected it.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/select-wires.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;slicing-wires&quot;&gt;Slicing wires&lt;/h3&gt;

&lt;p&gt;We’ve added the ability to remove wires by slicing through them. You do this by holding the ctrl (or cmd) key, then dragging the mouse with the right-hand button pressed:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/slice-wires.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;subflow-output-labels&quot;&gt;Subflow Output labels&lt;/h3&gt;

&lt;p&gt;If you have set output labels for a subflow template (via the Appearance tab of its
edit dialog), the editor will now display those labels whilst you are editing
the subflow template.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2022/01/subflow-labels.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;predefined-environment-variables&quot;&gt;Predefined Environment Variables&lt;/h3&gt;

&lt;p&gt;We have added a number of predefined Environment Variables that provide access to
information about the node, group and flow at the point they are evaluated.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_NODE_ID&lt;/code&gt; - the ID of the node&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_NODE_NAME&lt;/code&gt; - the Name of the node&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_NODE_PATH&lt;/code&gt; - the Path of the node - this is a new concept that we’ll explain below.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_GROUP_ID&lt;/code&gt; - the ID of the containing group&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_GROUP_NAME&lt;/code&gt; - the Name of the containing group&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_FLOW_ID&lt;/code&gt; - the ID of the flow the node is on&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_FLOW_NAME&lt;/code&gt; - the Name of the flow the node is on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The guide for using Environment Variables in your flow is available &lt;a href=&quot;https://nodered.org/docs/user-guide/environment-variables&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For example, in a Function node, you can do:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;const functionName = env.get(&quot;NR_NODE_NAME&quot;)
const flowName = env.get(&quot;NR_FLOW_NAME&quot;)
msg.payload = `I was sent by Function &apos;${functionName}&apos;, on flow &apos;${flowName}&apos;`
return msg
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 id=&quot;node-paths&quot;&gt;Node Paths&lt;/h3&gt;

&lt;p&gt;This is a new internal property of Nodes we’ve added that helps identify where
exactly any node is within the overall flows.&lt;/p&gt;

&lt;p&gt;The following may sound a bit abstract, and it’s something most users can skip over.
But it can be useful when creating your own subflow modules with custom logging
messages inside.&lt;/p&gt;

&lt;p&gt;If a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NodeA&lt;/code&gt; is on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Flow1&lt;/code&gt;, it will have a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;path&lt;/code&gt; of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Flow1/NodeA&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;That isn’t very interesting, but it gets more interesting when dealing with subflows
and, in particular, nested subflows.&lt;/p&gt;

&lt;p&gt;When we create an instance of a subflow, all of the nodes in the subflow are given
randonly generated ids. If that node logs an error, you see the generated ID, not the
‘true’ id as appears in the editor. It gets harder when you have nested subflows
because you need to be able to identify which instance of the node, in which instance
of the subflow to go looking for.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;path&lt;/code&gt; property can solve that by providing the ids of the top-level flow and
each subflow instance to identify exactly where the node is.&lt;/p&gt;

&lt;p&gt;This property is exposed in the following ways:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;For node authors, it is available as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;this._path&lt;/code&gt; on the node object.&lt;/li&gt;
  &lt;li&gt;Inside the Function node, it is exposed as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node.path&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;It is also available as the environment variable &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NR_NODE_PATH&lt;/code&gt; when evaluated
by a node.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;node-updates&quot;&gt;Node Updates&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;The JSON node will now attempt to parse Buffer objects if they contain a valid string&lt;/li&gt;
  &lt;li&gt;The TCP Client nodes support TLS connections&lt;/li&gt;
  &lt;li&gt;The WebSocket client node now lets you specify a sub-protocol to connect with&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;

&lt;p&gt;Next on the &lt;a href=&quot;/about/releases/&quot;&gt;release plan&lt;/a&gt; is Node-RED 3.0, scheduled for the end of April.&lt;/p&gt;

&lt;p&gt;This coincides with Node.js 12 reaching its end of life.&lt;/p&gt;

&lt;p&gt;As ever, if there are any particular features you’re interested in, now is a great time to jump into the &lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forum&lt;/a&gt; to share your feedback.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Node-RED 2.2 is now available to install. If upgrading, please read the upgrade instructions.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">Version 2.1 released</title>
      <link href="https://nodered.jp/blog/2021/10/21/version-2-1-released" rel="alternate" type="text/html" title="Version 2.1 released" />
      <published>2021-10-21T00:00:00+00:00</published>
      <updated>2021-10-21T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2021/10/21/version-2-1-released</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Node-RED 2.1 is now available to &lt;a href=&quot;https://npmjs.org/package/node-red&quot;&gt;install&lt;/a&gt;. If upgrading, please read the &lt;a href=&quot;http://nodered.org/docs/getting-started/upgrading.html&quot;&gt;upgrade instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/node-red/node-red/blob/21304a695c3450fbf80cee69c84fe71ce753b076/CHANGELOG.md&quot;&gt;Change Log&lt;/a&gt; has the full list of changes in this release, but here are the highlights.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/5DHs7y0zSZo&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;hr /&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#highlights&quot;&gt;Highlights&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#new-welcome-tour-guide&quot;&gt;New Welcome Tour Guide&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#hiding-tabs&quot;&gt;Hiding tabs&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#dynamic-mqtt-nodes&quot;&gt;Dynamic MQTT nodes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#auto-complete-in-msg-typedinputs&quot;&gt;Auto-complete in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg&lt;/code&gt; TypedInputs&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#new-link-call-node&quot;&gt;New Link Call node&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#edit--arrange-menus&quot;&gt;Edit &amp;amp; Arrange menus&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#flowgroup-level-environment-variables&quot;&gt;Flow/Group level environment variables&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#other-node-updates&quot;&gt;Other node updates&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#debug-sidebar-options&quot;&gt;Debug sidebar options&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#deep-copy-option-on-change-node&quot;&gt;Deep copy option on Change node&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#delay-node-updates&quot;&gt;Delay node updates&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#join-node-reset-timeout&quot;&gt;Join node reset timeout&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#tcp-request-node-can-return-strings&quot;&gt;TCP Request node can return Strings&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#file-nodes-renamed&quot;&gt;File nodes renamed&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#documentation-updates&quot;&gt;Documentation Updates&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#whats-next&quot;&gt;What’s next?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;highlights&quot;&gt;Highlights&lt;/h2&gt;

&lt;h3 id=&quot;new-welcome-tour-guide&quot;&gt;New Welcome Tour Guide&lt;/h3&gt;

&lt;p&gt;The first time you open the editor with 2.1.0, you will be greeted with a new Welcome Tour. This will highlight a lot of the new features in this version.&lt;/p&gt;

&lt;p&gt;The Tour will only be shown the first time you open any particular version of Node-RED - and you can opt-out of seeing them in the future in the User Settings dialog.&lt;/p&gt;

&lt;p&gt;If you embed Node-RED in your own application and don’t want the tour to be shown to your users, then it can also be disabled in the settings file.&lt;/p&gt;

&lt;p&gt;The underlying framework for creating the Welcome Tour can be reused to create other interactive tours/tutorials/guides. We’ll have more on this area in the future.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/welcome-tour.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;hiding-tabs&quot;&gt;Hiding tabs&lt;/h3&gt;

&lt;p&gt;We often hear from users who have a &lt;em&gt;lot&lt;/em&gt; of flows. To make it a bit easier to manage, you can now hide their tabs in the editor.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/hide-tabs.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The Info sidebar still lists them all, and indicates which are currently hidden. It also allows them to be shown with a single click.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/hide-tabs-sidebar.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;There’s also a new tab menu that provides more options around managing the tabs.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/hide-tabs-menu.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;For this first release of the feature, the hidden state of a tab is stored in user preferences within the editor - it is &lt;em&gt;not&lt;/em&gt; a property of the flow itself. This means you can’t share a set of flows with another user and have some of the tabs pre-hidden. It is an open point of discussion as to whether we want to allow that behaviour.&lt;/p&gt;

&lt;p&gt;Whilst talking about managing the tabs, shift-clicking on the workspace tab bar scroll arrows will now jump immediately to the start/end of the tab list.&lt;/p&gt;

&lt;h3 id=&quot;dynamic-mqtt-nodes&quot;&gt;Dynamic MQTT nodes&lt;/h3&gt;

&lt;p&gt;The MQTT In node now includes a ‘Dynamic subscription’ option. When selected, the node gets an input so you can pass it messages. Those messages can be used to:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;connect/disconnect the broker&lt;/li&gt;
  &lt;li&gt;subscribe to topics&lt;/li&gt;
  &lt;li&gt;unsubscribe from topics&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/mqtt-out-opts.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The MQTT Out node also supports the connect/disconnect messages as well.&lt;/p&gt;

&lt;p&gt;The MQTT Broker configuration node has a new ‘connect automatically’ option - which is enabled by default. If you disable that, it won’t connect until one of the flow nodes receives a connect message.&lt;/p&gt;

&lt;p&gt;Full details of the formats of those messages are in the node help and summarised in the &lt;a href=&quot;https://github.com/node-red/node-red/pull/3189&quot;&gt;pull-request here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;auto-complete-in-msg-typedinputs&quot;&gt;Auto-complete in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg&lt;/code&gt; TypedInputs&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg&lt;/code&gt; TypedInputs are used widely throughout Node-RED. To make life a bit easier, they now provide auto-complete when typing message property names.&lt;/p&gt;

&lt;p&gt;For now, it offers completions from the list of well-known properties the core nodes use.&lt;/p&gt;

&lt;p&gt;In the future, it will be possible for contrib nodes to register the properties they use so they can be offered as completions as well.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/autocomplete.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We’re also thinking about how best to apply this to flow/global inputs - auto-completing based on the current contents of context.&lt;/p&gt;

&lt;h3 id=&quot;new-link-call-node&quot;&gt;New Link Call node&lt;/h3&gt;

&lt;p&gt;The new Link Call node can be used alongside the Link-In/Out nodes to create subroutine-like flows.&lt;/p&gt;

&lt;p&gt;If you have a flow that starts with a Link-In node and ends with a Link-Out node that has been put into its new ‘return’ mode (giving the node a different icon), the Link Call node can be used to pass that flow a message and the result is passed back to the calling node.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/link-call.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;As an alternative to using subflows, this is great for creating little utility flows that you want to reuse in multiple places.&lt;/p&gt;

&lt;h3 id=&quot;edit--arrange-menus&quot;&gt;Edit &amp;amp; Arrange menus&lt;/h3&gt;

&lt;p&gt;The main menu now has Edit and Arrange submenus.&lt;/p&gt;

&lt;p&gt;The Edit menu has the actions you’d expect - Undo, Redo, Copy and Paste etc.&lt;/p&gt;

&lt;p&gt;The Arrange menu adds tools to help arrange your nodes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/menus.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;All of the menus now also show any keyboard shortcuts that have been set.&lt;/p&gt;

&lt;h3 id=&quot;flowgroup-level-environment-variables&quot;&gt;Flow/Group level environment variables&lt;/h3&gt;

&lt;p&gt;We have supported Environment Variables being set within Subflows for a while now. With this release, you can now also set them at the Flow or Group level.&lt;/p&gt;

&lt;h2 id=&quot;other-node-updates&quot;&gt;Other node updates&lt;/h2&gt;

&lt;h3 id=&quot;debug-sidebar-options&quot;&gt;Debug sidebar options&lt;/h3&gt;

&lt;p&gt;The Debug sidebar options have been reworked.&lt;/p&gt;

&lt;p&gt;The filter options are now a drop-down menu of options, rather than the sliding panel.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/debug-filter.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The ‘clear messages’ button now also has a drop-down that lets you change it to ‘clear filtered messages’ instead. That option is useful if you have the ‘current flow’ filter enabled, and you want to clear the message for the current flow without clearing messages from other flows.&lt;/p&gt;

&lt;p&gt;In other good news, both of these options are now stored in the editor settings - so they are remembered between editor reloads.&lt;/p&gt;

&lt;h3 id=&quot;deep-copy-option-on-change-node&quot;&gt;Deep copy option on Change node&lt;/h3&gt;

&lt;p&gt;The Change node’s “set” action has a new option to create a deep copy of the value when copying from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flow&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;global&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the case of Objects and Arrays, this creates a proper clone of the value, rather than creating a reference to the same object.&lt;/p&gt;

&lt;p&gt;We’ve also updated the label of the “set” action to hopefully help users get the ‘from’ and ‘to’ fields the right way around.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/10/deep-copy.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;delay-node-updates&quot;&gt;Delay node updates&lt;/h3&gt;

&lt;p&gt;When in rate limiting mode, the Delay node supports two new features:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;if &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.toFront&lt;/code&gt; is set, a message is put to the front of the queue of messages waiting to be sent&lt;/li&gt;
  &lt;li&gt;there’s a new option to send rate limited messages to an optional second output on the node. This is useful if you need to rate limit messages &lt;em&gt;and&lt;/em&gt; do some further processing for the messages that have been rate limited, rather than just have them discarded.
For example, if you are creating a rate limited HTTP endpoint, you still want to be able to respond to the rate limited requests rather than just letting them time out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;join-node-reset-timeout&quot;&gt;Join node reset timeout&lt;/h3&gt;

&lt;p&gt;If the Join node has a timeout running and it receives a message with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.restartTimeout&lt;/code&gt; set, it will restart the timeout.&lt;/p&gt;

&lt;h3 id=&quot;tcp-request-node-can-return-strings&quot;&gt;TCP Request node can return Strings&lt;/h3&gt;

&lt;p&gt;The TCP Request node can now be configured to return Strings rather than raw Buffers. This matches the functionality already available with the TCP In node.&lt;/p&gt;

&lt;h3 id=&quot;file-nodes-renamed&quot;&gt;File nodes renamed&lt;/h3&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file in&lt;/code&gt; nodes have new palette labels to make it clearer which writes to files and which reads from files. Even after all this time, I would have to double check which was which.&lt;/p&gt;

&lt;h2 id=&quot;documentation-updates&quot;&gt;Documentation Updates&lt;/h2&gt;

&lt;p&gt;Whilst not really part of the release, we’ve also published lots of updates to the &lt;a href=&quot;https://nodered.org/docs/api/&quot;&gt;API documentation&lt;/a&gt; on the website.&lt;/p&gt;

&lt;p&gt;This includes the hooks and library store APIs in the runtime.&lt;/p&gt;

&lt;p&gt;The docs now cover more of the APIs available to nodes and plugins to &lt;a href=&quot;https://nodered.org/docs/api/ui/&quot;&gt;extend the UI&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There is also documentation on creating custom &lt;a href=&quot;https://nodered.org/docs/api/ui/themes/&quot;&gt;Theme plugins&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;

&lt;p&gt;This release has got us back on schedule for our &lt;a href=&quot;/about/releases/&quot;&gt;release plan&lt;/a&gt;. With that plan, the next release, 2.2 is scheduled for the end of January.&lt;/p&gt;

&lt;p&gt;There are a few features already in development for that release, including tooling to help package subflows as npm modules directly from the editor.&lt;/p&gt;

&lt;p&gt;As ever, if there are any particular features you’re interested in, now is a great time to jump into the &lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forum&lt;/a&gt; to share your feedback.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Node-RED 2.1 is now available to install. If upgrading, please read the upgrade instructions.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">Version 2.0 released</title>
      <link href="https://nodered.jp/blog/2021/07/20/version-2-0-released" rel="alternate" type="text/html" title="Version 2.0 released" />
      <published>2021-07-20T00:00:00+00:00</published>
      <updated>2021-07-20T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2021/07/20/version-2-0-released</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Node-RED 2.0 is now available to &lt;a href=&quot;https://npmjs.org/package/node-red&quot;&gt;install&lt;/a&gt;. If upgrading, please read the &lt;a href=&quot;http://nodered.org/docs/getting-started/upgrading.html&quot;&gt;upgrade instructions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/node-red/node-red/blob/859c0c7f6c7b4692b54f0da97737c1f88fe7973c/CHANGELOG.md&quot;&gt;Change Log&lt;/a&gt; has the full list of changes in this release, but here are the highlights.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/eTEbqZcumz4&quot; title=&quot;YouTube video player&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;hr /&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#nodejs-12-or-later-required&quot;&gt;Node.js 12 or later required&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#runtime-features&quot;&gt;Runtime Features&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#node-red-admin-init-command&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red admin init&lt;/code&gt; command&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#restructured-default-settings-file&quot;&gt;Restructured default settings file&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#default-flows-file-name&quot;&gt;Default flows file name&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#editor-features&quot;&gt;Editor Features&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#monaco-text-editor&quot;&gt;Monaco Text Editor&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#css-theme-variables&quot;&gt;CSS Theme Variables&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#node-updates&quot;&gt;Node updates&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#function-external-module-changes&quot;&gt;Function external module changes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#inject-node-quick-inject-button&quot;&gt;Inject node quick inject button&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#renamed-rbe-node-to-filter-node&quot;&gt;Renamed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RBE&lt;/code&gt; node to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Filter&lt;/code&gt; node&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#removed-tail-node&quot;&gt;Removed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tail&lt;/code&gt; node&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#other-node-updates&quot;&gt;Other node updates&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#improving-the-developer-experience&quot;&gt;Extending the Developer Experience&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#flow-debugger&quot;&gt;Flow Debugger&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#flow-linter---nrlint&quot;&gt;Flow Linter - nrlint&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#whats-next&quot;&gt;What’s next&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The main focus of this release has been dropping support for old versions of Node.js that are themselves no longer supported. This in turn has allowed us to make some major dependency updates internally. This has required time and effort to do properly. As such, there are not a lot of big new features in this release - but there are certainly plenty of useful things to play with.&lt;/p&gt;

&lt;p&gt;We’re also releasing the first versions of the Node-RED Flow Debugger and Linter. These are optional plugins that really step up the developer experience within the Node-RED editor. Before we get to them, lets look at what’s new in the Node-RED core.&lt;/p&gt;

&lt;h2 id=&quot;nodejs-1217x-or-later-required&quot;&gt;Node.js 12.17.x or later required&lt;/h2&gt;

&lt;p&gt;Node-RED 2.0 does &lt;em&gt;not&lt;/em&gt; support anything earlier than Node.js 12.17.x.&lt;/p&gt;

&lt;h2 id=&quot;runtime-features&quot;&gt;Runtime Features&lt;/h2&gt;

&lt;h3 id=&quot;node-red-admin-init-command&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red admin init&lt;/code&gt; command&lt;/h3&gt;

&lt;p&gt;We’ve added a new command-line option to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red&lt;/code&gt; to help you generate a settings file.&lt;/p&gt;

&lt;p&gt;It asks you a series of questions about how you want to configure your Node-RED environment, such as setting up user security.&lt;/p&gt;

&lt;p&gt;This makes it much easier to get started with a well configured, secure Node-RED environment.&lt;/p&gt;

&lt;p&gt;You can run it using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red admin&lt;/code&gt; command:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;node-red admin init
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red-admin/pull/15&quot;&gt;More details&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;restructured-default-settings-file&quot;&gt;Restructured default settings file&lt;/h3&gt;

&lt;p&gt;Along with the new &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red admin init&lt;/code&gt; command, we’ve reorganised the default settings file. The settings are now in a better order, with clearer sections to help users navigate.&lt;/p&gt;

&lt;p&gt;You can see the new default settings file &lt;a href=&quot;https://github.com/node-red/node-red/blob/859c0c7f6c7b4692b54f0da97737c1f88fe7973c/packages/node_modules/node-red/settings.js&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;default-flows-file-name&quot;&gt;Default flows file name&lt;/h3&gt;

&lt;p&gt;We’ve updated the default settings file to hardcode the flow file name to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flows.json&lt;/code&gt;. Previously we left it unset, so the runtime would use the hostname to generate the flow file name. That would catch people out when moving between networks. As this is a change to the default settings file, all existing installs will continue to behave as they did before.&lt;/p&gt;

&lt;h2 id=&quot;editor-features&quot;&gt;Editor Features&lt;/h2&gt;

&lt;h3 id=&quot;monaco-text-editor&quot;&gt;Monaco Text Editor&lt;/h3&gt;

&lt;p&gt;We now have optional support for the Monaco text editor. This gives a much richer code editing experience in the Function node and elsewhere.&lt;/p&gt;

&lt;p&gt;For now, Node-RED will still use the ACE editor by default. To enable Monaco you need to edit the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;editorTheme&lt;/code&gt; section of your settings file to include a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;codeEditor&lt;/code&gt; section like this:&lt;/p&gt;

&lt;div class=&quot;language-javascript highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;editorTheme&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nl&quot;&gt;codeEditor&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;na&quot;&gt;lib&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;monaco&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;},&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;We tested this editor against a lot of the more commonly used nodes to ensure they work with Monaco, but it is possible there are contrib nodes out there that assume the editor uses ACE. If you hit any problems, please let us know so we can raise with the module owner.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/07/monaco.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;css-theme-variables&quot;&gt;CSS Theme Variables&lt;/h3&gt;

&lt;p&gt;To make it easier for nodes/plugins to style their UI elements so they honour any custom theme applied, we’ve added a selection of CSS Variables they can use to pick-up theme colours.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2994/files#diff-efdd418ee8906527e53e0216a513903eb0f5376046f0127f15048b5d65123089&quot;&gt;More details&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;node-updates&quot;&gt;Node updates&lt;/h2&gt;

&lt;h3 id=&quot;function-external-module-changes&quot;&gt;Function external module changes&lt;/h3&gt;

&lt;p&gt;In the last release, we made it easier for the Function node to use external modules. Once enabled in your settings file, you could then configure what modules the Function node used in its edit dialog.&lt;/p&gt;

&lt;p&gt;Based on feedback on the feature we’ve made the following changes in this release:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;The feature is now &lt;strong&gt;enabled by default&lt;/strong&gt; for new installs. To disable it you will need to set &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functionExternalModules&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;The UI has been reworked to give a cleaner list of the modules and what variable they will be available as.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We now support both &lt;strong&gt;CJS modules&lt;/strong&gt; and &lt;strong&gt;ES6 modules&lt;/strong&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We have moved the directory the modules are install in back to the top-level of your user directory. This means there is a single &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;package.json&lt;/code&gt; that lists all of your dependencies. The first time you run 2.0, it will automatically reinstall any external modules in the new location.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/07/function-modules.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;inject-node-quick-inject-button&quot;&gt;Inject node quick inject button&lt;/h3&gt;

&lt;p&gt;The Inject node has a new button in its edit dialog that will trigger the Inject node with the values from the edit dialog, rather than the values currently deployed. That makes it much easier to quickly inject different values whilst testing a flow.&lt;/p&gt;

&lt;p&gt;Note the button in the main flow view will still inject the current deployed values as it always has.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/07/inject-button.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;renamed-rbe-node-to-filter-node&quot;&gt;Renamed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RBE&lt;/code&gt; node to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Filter&lt;/code&gt; node&lt;/h3&gt;

&lt;p&gt;The RBE (Report By Exception) node is one of the hidden gems of the palette. Given how many times its the answer to a question on the forum, it’s clear we needed to make it more discoverable. With this release we have done two things:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;added it to the core palette (it was previously installed via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red-node-rbe&lt;/code&gt; module)&lt;/li&gt;
  &lt;li&gt;rebranded it the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter&lt;/code&gt; node.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the covers it still uses the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rbe&lt;/code&gt; node type, so existing flows will not be affected. Also that means it will still show up if you search for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;rbe&lt;/code&gt; - so users following existing guides will still find it.&lt;/p&gt;

&lt;p&gt;Giving it the name &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;filter&lt;/code&gt; should help users find it and more instinctively understand what it is for. It also opens up the option of adding more filtering options in the future that wouldn’t have fitted under the ‘RBE’ name.&lt;/p&gt;

&lt;h3 id=&quot;removed-tail-node&quot;&gt;Removed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;tail&lt;/code&gt; node&lt;/h3&gt;

&lt;p&gt;We have removed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node-red-node-tail&lt;/code&gt; as a default dependency. This means you may need to manually install that module to get the node back if your flows use it.&lt;/p&gt;

&lt;h3 id=&quot;other-node-updates&quot;&gt;Other node updates&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;A new settings is available, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fileWorkingDirectory&lt;/code&gt; that can be used to define the working directory used by the File nodes to resolve relative paths. If the setting isn’t provided, the nodes will do what they did before - use the current working directory of the Node-RED process.&lt;/li&gt;
  &lt;li&gt;When in rate-limiting mode, the Delay node can now dynamically set its rate using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.rate&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;The TLS node now allows you to specify an ALPN protocol&lt;/li&gt;
  &lt;li&gt;Debug sidebar supports displaying Map/Set type properties&lt;/li&gt;
  &lt;li&gt;The File In node has a new option to include all properties when sending a message per line&lt;/li&gt;
  &lt;li&gt;The Exec node has a new option to hide the console window when running under Windows&lt;/li&gt;
  &lt;li&gt;The Delay node can now be told to flush a set number of queued messages using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.flush&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;The WebSocket client node can be configured to send a heartbeat ping message automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;extending-the-developer-experience&quot;&gt;Extending the developer experience&lt;/h2&gt;

&lt;p&gt;One of the benefits of low-code programming with tools like Node-RED, is it abstracts away a lot of the technical detail of how things are working. It allows you to focus on solving the problem at hand.&lt;/p&gt;

&lt;p&gt;But just because it’s low-code, that doesn’t mean you can’t have the tools you need to make high quality applications and to help debug when things aren’t going as they should.&lt;/p&gt;

&lt;p&gt;To that end, we’re also releasing a pair of new plugins for Node-RED that will bring a step-change to the overall developer experience.&lt;/p&gt;

&lt;h3 id=&quot;flow-debugger&quot;&gt;Flow Debugger&lt;/h3&gt;

&lt;p&gt;First up is a Flow Debugger. This acts like regular code debuggers, but at the flow level. You can set breakpoints on node ports, either inputs or outputs. Then, whenever a message arrives at a breakpoint, it pauses either at that node, or the entire runtime.&lt;/p&gt;

&lt;p&gt;Once paused, it then shows you how many messages are queued up at each point in the flow and in the sidebar you can see the queue of messages in the order they will be processed. From there, you can step each message through the flow, or even delete it mid-flow.&lt;/p&gt;

&lt;p&gt;For more information, you can find the &lt;a href=&quot;https://github.com/node-red/node-red-debugger&quot;&gt;plugin page here&lt;/a&gt;.&lt;/p&gt;

&lt;h3 id=&quot;flow-linter---nrlint&quot;&gt;Flow Linter - nrlint&lt;/h3&gt;

&lt;p&gt;The second plugin we’ve released is the Flow Linter - nrlint. This can be used to identify potential problems in the flow based on a large set of rules the linter provides. For example, it can warn if you have HTTP In nodes that aren’t connected to HTTP Response nodes. Or if you have nodes that are physically overlapping and potentially obscuring each other.&lt;/p&gt;

&lt;p&gt;We’ve modelled the linter after &lt;a href=&quot;https://eslint.org&quot;&gt;eslint&lt;/a&gt; which we also bundle in one of the rules that can be used to lint the JavaScript in your Function nodes.&lt;/p&gt;

&lt;p&gt;We’ve designed the linter to run in the browser using a Worker thread - meaning it doesn’t impact the performance of the editor. The sidebar shows you the linter results and lets you quickly navigate to the areas of the flow that need attention.&lt;/p&gt;

&lt;p&gt;Outside of the editor, nrlint can also be installed and run as a command-line tool against flow json files. This means it can be used to validate flows in build pipelines.&lt;/p&gt;

&lt;p&gt;Today we have a minimal set of rules and a recent call for input from the community has generated a long list of great ideas.&lt;/p&gt;

&lt;p&gt;We’re sure there will be some slightly more esoteric rules that perhaps don’t belong in the core set. For example, some third party nodes may want to introduce guidance about how their nodes are used. So to support that, the linter rules are pluggable - allowing custom rules to be created and shared with the community via npm.&lt;/p&gt;

&lt;p&gt;For more information, you can find the &lt;a href=&quot;https://github.com/node-red/nrlint&quot;&gt;plugin page here&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;whats-next&quot;&gt;What’s next?&lt;/h2&gt;

&lt;p&gt;The release plan we published last year had targeted 2.0 to be released at the end of April and for subsequent milestone releases to happen every 3 months after that. Given we’re already three months beyond that April target, we need to look again at our release planning.&lt;/p&gt;

&lt;p&gt;The 2.0 release has been somewhat unique. It’s our first major version bump that has unblocked a number of internal changes as we no longer have to worry about old versions of Node.js. But it has taken longer than expected to sort out those internal changes, including a couple upstream issues that blocked progress for a while.&lt;/p&gt;

&lt;p&gt;We really want to get back to a regular release cadence - having a predictable release date that is well known and we all work towards. That’s something we’ll be figuring out as we move forward. But today, we reset the clock and shift our attention to 2.1 that will be released in late October.&lt;/p&gt;

&lt;p&gt;If there’s a particular feature you’re interested in seeing in Node-RED, then &lt;em&gt;now&lt;/em&gt; is the time to jump into the &lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forum&lt;/a&gt; and share your feedback.&lt;/p&gt;

&lt;p&gt;As for the 1.x stream, it is now in maintenance mode. That means we will still do maintenance releases as and when needed if there are bugs reported and fixes available.&lt;/p&gt;

&lt;p&gt;For the contributors out there, we’ll be shuffling around our code branches in github to reflect the different streams we now have - we’ll share more details via the &lt;a href=&quot;https://nodered.org/slack&quot;&gt;#core-dev channel in slack&lt;/a&gt;, so do come say hello if you’re interested.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Node-RED 2.0 is now available to install. If upgrading, please read the upgrade instructions.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">バージョン1.3がリリースされました</title>
      <link href="https://nodered.jp/blog/2021/04/08/version-1-3-released" rel="alternate" type="text/html" title="バージョン1.3がリリースされました" />
      <published>2021-04-08T00:00:00+00:00</published>
      <updated>2021-04-08T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2021/04/08/version-1-3-released</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Node-RED 1.3が&lt;a href=&quot;https://npmjs.org/package/node-red&quot;&gt;インストール&lt;/a&gt;できるようになりました。もし、アップデートをしたい場合は、&lt;a href=&quot;http://nodered.jp/docs/getting-started/upgrading.html&quot;&gt;アップグレード手順&lt;/a&gt;を参照してください。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/blob/28bfa8e4186e63c60894d8f34a1ff9a5838fa917/CHANGELOG.md&quot;&gt;Change Log&lt;/a&gt;には、本リリースの全ての変更内容が掲載されています。ここでは、概要を紹介します。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;このリリースは、Node.js 8と10で実行できる最後のリリースであることにご注意ください。&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;これらのバージョンのNode.jsはEnd-of-lifeになるため、来月にリリースするNode-RED 2.0では、これらをサポート外とする予定です。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;*リリースに関する動画は近々公開します - 見逃さないよう、&lt;a href=&quot;https://www.youtube.com/channel/UCQaB8NXBEPod7Ab8PPCLLAA&quot;&gt;チャンネル登録をしてください。&lt;/a&gt;&lt;/p&gt;

&lt;hr /&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#headline-features&quot;&gt;注目機能&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#function-node-use-of-npm-modules&quot;&gt;Functionノードにおけるnpmモジュールの利用&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#referencing-msg-properties-in-change-switch-nodes&quot;&gt;Change/Switchノードでのmsgプロパティの参照&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#node-red-plugins-framework&quot;&gt;Node-REDプラグインフレームワーク&lt;/a&gt;
        &lt;ul&gt;
          &lt;li&gt;&lt;a href=&quot;#adding-extra-resources&quot;&gt;リソースの追加&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#npm-packaged-subflows&quot;&gt;npmパッケージ化されたサブフロー&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#editor-features&quot;&gt;エディタの機能&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#export-preview&quot;&gt;書き出しのプレビュー&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#selecting-nodes&quot;&gt;ノードの選択&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#opening-a-subflow&quot;&gt;サブフローの開き方&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#navigating-around-the-workspace&quot;&gt;ワークスペースのナビゲート&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#keyboard-shortcuts&quot;&gt;キーボードショートカット&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#other-editor-updates&quot;&gt;その他のエディタの更新&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#runtime-features&quot;&gt;ランタイムの機能&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#new-externalmodules-setting&quot;&gt;新しい&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules&lt;/code&gt;設定&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#other-runtime-updates&quot;&gt;その他のランタイムの更新&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#node-features&quot;&gt;ノードの機能&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a name=&quot;headline-features&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;注目機能&quot;&gt;注目機能&lt;/h2&gt;
&lt;p&gt;&lt;a name=&quot;function-node-use-of-npm-modules&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;functionノードにおけるnpmモジュールの利用&quot;&gt;Functionノードにおけるnpmモジュールの利用&lt;/h3&gt;

&lt;p&gt;Functionノードにおいて、外部のnpmモジュールをより簡単に利用できるようになりました。&lt;/p&gt;

&lt;p&gt;settingsファイルで &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functionExternalModules&lt;/code&gt; を &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; に変更することで、functionノードにおいて、利用したい追加モジュールを設定できるようになります。フローをデプロイした際に、ランタイムは自動的にこれらのモジュールのインストールを試みるようになります。&lt;/p&gt;

&lt;p&gt;functionノードでモジュールを使用する前に、グローバルコンテキストからモジュールを取得する必要がある &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functionGlobalContext&lt;/code&gt; のアプローチとは異なり、本新機能では読み込むモジュールはコードに定義され、自動的に取得されます。&lt;/p&gt;

&lt;p&gt;編集ダイアログには新たに &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;設定&lt;/code&gt; タブが追加され、ノードの出力数やノードで用いるモジュールを設定できるようになっています(もし &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functionExternalModules&lt;/code&gt; の設定を有効にしていない場合は、出力数のフィールドのみが表示されます)。&lt;/p&gt;

&lt;p&gt;他のタブにおいては、各タブ内のコードがいつ実行されるか分かりやすくなるように、名前が付け替えられています。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/04/function-modules.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2873&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;referencing-msg-properties-in-change-switch-nodes&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;changeswitchノードでのmsgプロパティの参照&quot;&gt;Change/Switchノードでのmsgプロパティの参照&lt;/h3&gt;

&lt;p&gt;ChangeノードとSwitchノードにおいて、メッセージのプロパティのネストした参照ができるようになりました。&lt;/p&gt;

&lt;p&gt;例えば、複数のセンサーから温度を取得する場合です。
各メッセージは、センサーが設置された部屋が設定された &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.topic&lt;/code&gt; と、値である &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.payload&lt;/code&gt; を持っています。
例えば &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flow.rooms.kitchen&lt;/code&gt; や &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flow.rooms.garage&lt;/code&gt; のような &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flow.rooms&lt;/code&gt; のコンテキストに、各部屋の現在の温度を保存したいとします。&lt;/p&gt;

&lt;p&gt;これを以前のバージョンのNode-REDのChangeノードで行うには、JSONataを使用する必要がありました。例えば:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flow.rooms&lt;/code&gt; に、式 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$merge([$flowContext(&apos;rooms&apos;),{$.topic:$.payload}])&lt;/code&gt; を代入&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;多くの場合、ユーザはfunctionノードでの実装に陥りますが、これは避けた方が良いでしょう。&lt;/p&gt;

&lt;p&gt;1.3では、次のようにChangeノードで設定できるようになりました:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flow.rooms[msg.topic]&lt;/code&gt; に &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.payload&lt;/code&gt; の値を代入&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;実際には &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RED.util.getMessageProperty(...)&lt;/code&gt; ユーティリティを用いる全てのノードが、この機能を持っています。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2822&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;node-red-plugins-framework&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;node-redプラグインフレームワーク&quot;&gt;Node-REDプラグインフレームワーク&lt;/h3&gt;

&lt;p&gt;Node-REDのカスタマイズや新機能追加を容易にするため、プラグインフレームワークを新たに導入しました。この機能は初期段階ですが、将来的には、沢山の新しいもの追加するための基礎となります。追加機能を本体のコードではなくプラグインとして提供することで、本体を小さく保ち、Node-REDを組み込んだアプリケーションが、より簡単に「追加」機能を選択できるようになります。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2779&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この新しいフレームワークを用いた、2つの種類のプラグインが今日利用できます:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;エディタテーマ&lt;/strong&gt; プラグイン　新しいテーマのインストールや、settingsファイルでの有効化を簡単にします。 &lt;a href=&quot;https://github.com/node-red/node-red/pull/2836&quot;&gt;詳細&lt;/a&gt;.&lt;/p&gt;

    &lt;p&gt;コントリビューションされたテーマの良いコレクションが &lt;a href=&quot;https://github.com/node-red-contrib-themes/&quot;&gt;ここ&lt;/a&gt;にあります。これらテーマは更新されるため、プラグインのバージョンに注意してください。&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;ライブラリソース&lt;/strong&gt; プラグイン　エディタ内の読み込み/書き出しダイアログに表示される追加ライブラリを構成できます。最初の例として、ローカルファイルシステムプラグイン (&lt;a href=&quot;https://www.npmjs.com/package/@node-red/library-file-store&quot;&gt;@node-red/library-file-store&lt;/a&gt;) を公開しています。 &lt;a href=&quot;https://github.com/node-red/node-red/pull/2785&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a name=&quot;adding-extra-resources&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&quot;リソースの追加&quot;&gt;リソースの追加&lt;/h4&gt;

&lt;p&gt;プラグインとノードには、エディタに追加のリソースを読み込めるようにするという共通の要件があります。
これは、ヘルプのテキストに画像やJavaScriptライブラリを追加するものです。&lt;/p&gt;

&lt;p&gt;以前は、ノードでリソースを読み込めるようにするために、沢山の追加作業が必要でした。&lt;/p&gt;

&lt;p&gt;プラグインフレームワークでは、これを簡単に実現できます。ノードにおいても同様に適用できるようになっています。&lt;/p&gt;

&lt;p&gt;現在、モジュールが一番上の階層に &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;resources&lt;/code&gt; というフォルダを持つ場合は、ランタイムは自動的にその中のコンテンツをAdmin HTTP APIを介して読み込めるようになっています。&lt;/p&gt;

&lt;p&gt;エディタでコンテンツをロードすることは必要ですが、ノード/プラグインはランタイムにおいてコンテンツを提供するルートを作成する必要はありません。&lt;/p&gt;

&lt;p&gt;ノードの開発に関するドキュメントは、&lt;a href=&quot;https://nodered.jp/docs/creating-nodes/resources&quot;&gt;さらに詳細が追加され更新されています&lt;/a&gt;。&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;npm-packaged-subflows&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;npmパッケージ化されたサブフロー&quot;&gt;npmパッケージ化されたサブフロー&lt;/h3&gt;

&lt;p&gt;現在、サブフローをモジュールとしてパッケージ化してnpmに公開し、他のノードと同じようにパレットにインストールできるようになっています。&lt;/p&gt;

&lt;p&gt;この一環として、サブフローのプロパティ編集ダイアログは、新しい ‘モジュールプロパティ’ タブを持っています。ここに、npmモジュールを生成する際に使われるサブフローに関する任意のメタデータを設定することができます。&lt;/p&gt;

&lt;p&gt;モジュールを生成する手順は、現在は完全に手作業です。手順の詳細は、&lt;a href=&quot;https://nodered.jp/docs/creating-nodes/subflow-modules&quot;&gt;ノードの開発ガイドのセクション&lt;/a&gt;に追加されています。&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2690&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;editor-features&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;エディタの機能&quot;&gt;エディタの機能&lt;/h2&gt;
&lt;p&gt;&lt;a name=&quot;export-preview&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;書き出しのプレビュー&quot;&gt;書き出しのプレビュー&lt;/h3&gt;

&lt;p&gt;書き出しダイアログは、現在書き出そうとしているものを表示する構造化された一覧を表示します。素のJSONは、タブ内の2つ目に引き続き表示されます。これは、ユーザが何を書き出そうとしているか理解するために役立ちます。&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2021/04/export-preview.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;selecting-nodes&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;ノードの選択&quot;&gt;ノードの選択&lt;/h3&gt;

&lt;p&gt;シフトキーを押しながらノードをクリックすると、フロー内の全てのノードが自動的に選択される機能は以前から実現されています。&lt;/p&gt;

&lt;p&gt;このリリースでは、シフトキーを押しながらノードの左側をクリックすると、フローの前側の全てのノードが選択されます。
一方、シフトキーを押しながらノードの右側をクリックすると、フローの後ろ側の全てのノードが選択されます。
シフトキーを押しながらノードの中心をクリックした場合は、以前と同様にフロー全体を選択します。&lt;/p&gt;

&lt;p&gt;これらに対応するデフォルトのキーボードショートカットが追加されています:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core:select-connected-nodes&lt;/code&gt; - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alt-s c&lt;/code&gt; - 現在選択されているノードに接続されている全てのノードを選択&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core:select-upstream-nodes&lt;/code&gt;- &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alt-s u&lt;/code&gt; - 現在選択されているノードの入力から到達可能な全てのノードを選択&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;core:select-downstream-nodes&lt;/code&gt; - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;alt-s d&lt;/code&gt; - 現在選択されているノードの全ての出力から到達できる全てのノードを選択&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2877&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;opening-a-subflow&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;サブフローの開き方&quot;&gt;サブフローの開き方&lt;/h3&gt;

&lt;p&gt;以前は、サブフローを開くために、最初にワークスペース上のインスタンスをダブルクリックする必要がありました。その後、編集ダイアログにある「サブフローを編集」ボタンをクリックしていました。&lt;/p&gt;

&lt;p&gt;このリリースでは、ノードをダブルクリックする時に、Ctrlキー(MacではCmdキー)を押していると、直接サブフローのテンプレートタブに移動できます。同じように、サブフローのインスタンスが選択された状態で、Ctrlキー(Cmdキー)を押しながらエンターキーを押すと、同様の動作となります。&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;navigating-around-the-workspace&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;ワークスペースのナビゲート&quot;&gt;ワークスペースのナビゲート&lt;/h3&gt;

&lt;p&gt;ワークスペース内を移動するのを助けるキーボードショートカットがいくつか追加されています。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;ワークスペースで選択されているノードを矢印キーで切り替え。&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl/Cmd-[&lt;/code&gt; や &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl/Cmd-]&lt;/code&gt; を用いてタブ間を切り替え。&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl-Enter&lt;/code&gt; を用いてサブフローのテンプレートタブへ移動、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl/Cmd-Shift-左矢印キー&lt;/code&gt; を用いて最後に開いていたタブへ移動。元のタブに戻った場合は、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Ctrl/Cmd-Shift-右矢印キー&lt;/code&gt; を用いて、タブの履歴上で前に戻ることもできます。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a name=&quot;keyboard-shortcuts&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;キーボードショートカット&quot;&gt;キーボードショートカット&lt;/h3&gt;

&lt;p&gt;settingsファイルの &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;editorTheme&lt;/code&gt; オプションを介して、カスタムのキーボードショートカットを設定できるようになりました。
これによって、複数のインスタンス間でカスタマイズをより簡単に反映できるようになりました。 &lt;a href=&quot;https://github.com/node-red/node-red/pull/2843&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;other-editor-updates&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;その他のエディタの更新&quot;&gt;その他のエディタの更新&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;エディタをリロードした時に、常に直近使ったタブを表示するようになりました。&lt;/li&gt;
  &lt;li&gt;サブフローを削除する時に、使用中のインスタンスがある場合、確認ダイアログを表示します。&lt;/li&gt;
  &lt;li&gt;情報サイドバーにあるアウトラインビューに、各サブフローが使用されているインスタンスの数を表示するようになりました。この数値をクリックすると、それらを一覧表示する検索ダイアログが表示されます。&lt;/li&gt;
  &lt;li&gt;アウトラインビューでクリックするのみで、グループ内のコンテンツに対して、状態の有効/無効の切り替えができます。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a name=&quot;runtime-features&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;ランタイムの機能&quot;&gt;ランタイムの機能&lt;/h2&gt;
&lt;p&gt;&lt;a name=&quot;new-externalmodules-setting&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;新しいexternalmodules設定&quot;&gt;新しい&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules&lt;/code&gt;設定&lt;/h3&gt;

&lt;p&gt;Node-REDにインストールできるものを管理するための新しい設定、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules&lt;/code&gt; を利用できるようになりました。&lt;/p&gt;

&lt;p&gt;この設定は、2つの別々のものをカバーしています。1つ目は、パレットマネージャを介してインストールできる新しいノードです。2つ目は、functionノードによって読み込むことのできるモジュールです。&lt;/p&gt;

&lt;p&gt;この設定で、ランタイムによって読み込むことのできるモジュールを決定するために使われる &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;allow&lt;/code&gt; と &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deny&lt;/code&gt; リストを提供できます。これらは、パレットマネージャーに表示されるノードの一覧を絞り込むために、エディタにおいても利用されます。&lt;/p&gt;

&lt;p&gt;この新しい設定は、現在非推奨となっているいくつかの既存設定を置き換えるものです。&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;editorTheme.palette.editable&lt;/code&gt; は &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules.palette.allowInstall&lt;/code&gt;　に置き換え&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;autoInstallModules&lt;/code&gt; は、 &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules.palette.allowInstall = true&lt;/code&gt; と &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules.autoInstall = true&lt;/code&gt; に置き換え&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;autoInstallModulesRetry&lt;/code&gt; は &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules.autoInstallRetry&lt;/code&gt; に置き換え&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;editorTheme.palette.upload&lt;/code&gt; は &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;externalModules.palette.allowUpload&lt;/code&gt; に置き換え&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2797&quot;&gt;詳細&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a name=&quot;other-runtime-updates&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;その他のランタイムの更新&quot;&gt;その他のランタイムの更新&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;settingsファイルの &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lang&lt;/code&gt; オプションを介して、ランタイムが使用する言語を明示的に設定できるようになりました。 &lt;a href=&quot;https://github.com/node-red/node-red/pull/2796&quot;&gt;詳細&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;フローが停止される時に、設定ノードは最後に停止されるようになりました。これによってフローのノードは停止される時に、設定ノードに頼る処理を行えます。 &lt;a href=&quot;https://github.com/node-red/node-red/pull/2880&quot;&gt;詳細&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;settingsファイルの &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;editorTheme.projects.workflow&lt;/code&gt; オプションを介して、簡素化されたgitワークフローをデフォルトに設定できます。 &lt;a href=&quot;https://github.com/node-red/node-red/pull/2763&quot;&gt;詳細&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;httpAdminMiddleware&lt;/code&gt; と &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;httpNodeMiddleware&lt;/code&gt; は、1つの関数のみしか使えませんでしたが、現在は配列として複数のミドルウエアを設定できるようになりました。 &lt;a href=&quot;https://github.com/node-red/node-red/pull/2788&quot;&gt;詳細&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a name=&quot;node-features&quot;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;ノードの機能&quot;&gt;ノードの機能&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;MQTTノードはMQTTv5をサポートし、v5で提供されている新機能の大部分を使えるようになりました。&lt;/li&gt;
  &lt;li&gt;Batch、Delay、Split、Join、Triggerなど、多くのコアノードがCompleteノードへトリガできるよう更新が入りました。&lt;/li&gt;
  &lt;li&gt;Execノードは、コマンド引数に &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.payload&lt;/code&gt; をデフォルトで追加しなくなりました。これは、ユーザによってよく除かれているためです。これは &lt;em&gt;新しく追加された&lt;/em&gt; ノードにおいてのみ適用され、既存のノードについては影響を受けません。また、&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.payload&lt;/code&gt; だけではなく、任意のメッセージプロパティを追加できるようExecノードが更新されました。&lt;/li&gt;
  &lt;li&gt;InjectやChangeノードは、編集ダイアログを閉じた時に、設定のエラーをハイライト表示するようになりました。&lt;/li&gt;
  &lt;li&gt;Functionノードでは、設定されたポートの出力数をコードから参照できるように &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;node.outputCount&lt;/code&gt; が利用できるようになりました。&lt;/li&gt;
&lt;/ul&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Node-RED 1.3がインストールできるようになりました。もし、アップデートをしたい場合は、アップグレード手順を参照してください。</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">Version 1.2 released</title>
      <link href="https://nodered.jp/blog/2020/10/15/version-1-2-released" rel="alternate" type="text/html" title="Version 1.2 released" />
      <published>2020-10-15T00:00:00+00:00</published>
      <updated>2020-10-15T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2020/10/15/version-1-2-released</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Node-RED 1.2 is now available to &lt;a href=&quot;https://npmjs.org/package/node-red&quot;&gt;install&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If upgrading, please read the &lt;a href=&quot;http://nodered.org/docs/getting-started/upgrading.html&quot;&gt;upgrade instructions&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/rnM5sfb2qoY&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;

&lt;hr /&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;#editor-updates&quot;&gt;Editor Updates&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#importing-duplicate-nodes&quot;&gt;Importing duplicate nodes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#simplified-git-workflow&quot;&gt;Simplified Git Workflow&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#handling-lost-nodes&quot;&gt;Handling ‘lost’ nodes&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#other-editor-features&quot;&gt;Other editor features&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#runtime-features&quot;&gt;Runtime features&lt;/a&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;#splitting-configjson-into-multiple-files&quot;&gt;Splitting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.config.json&lt;/code&gt; into multiple files&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#introducing-redhooks-api&quot;&gt;Introducing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RED.hooks&lt;/code&gt; api&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#node-updates&quot;&gt;Node updates&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;editor-updates&quot;&gt;Editor Updates&lt;/h2&gt;

&lt;h3 id=&quot;importing-duplicate-nodes&quot;&gt;Importing duplicate nodes&lt;/h3&gt;

&lt;p&gt;In previous releases, when you import a flow, all of its nodes are assigned new
identifiers. This meant that if you imported the flow again, you’d get a second
copy. If that flow included configuration nodes or subflows that were identical
to ones you already had, the editor would avoid importing a duplicate copy and
reuse the existing one.&lt;/p&gt;

&lt;p&gt;That has generally worked well, but on some occasions it wasn’t ideal. In particular,
if you wanted to import an &lt;em&gt;update&lt;/em&gt; to a subflow you are using, there was no easy
way to do it - it would be imported as a new subflow and you’d have to manually
update all the instances to the new subflow.&lt;/p&gt;

&lt;p&gt;With this release, when you import a flow that contains nodes you already have,
the editor will now ask you what to do. In the case of Subflows and Configuration
nodes, it gives you the option of &lt;em&gt;replacing&lt;/em&gt; the instances you already have,
rather than importing a copy.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2020/10/import-dupes.gif&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2698&quot;&gt;More details&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;simplified-git-workflow&quot;&gt;Simplified Git Workflow&lt;/h3&gt;

&lt;p&gt;The projects feature now provides an option for a simplified git workflow. The
option, under User Settings, lets you enable an ‘automatic’ mode where changes
will be automatically committed with every deploy.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/content/images/2020/10/git-workflow.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2035&quot;&gt;More details&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Other project enhancements include:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;the project settings dialog also now lets you edit the project’s version string.&lt;/li&gt;
  &lt;li&gt;the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;flowFilePretty&lt;/code&gt; option is now automatically enabled for projects unless explicitly set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;false&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;handling-lost-nodes&quot;&gt;Handling ‘lost’ nodes&lt;/h3&gt;

&lt;p&gt;We’ve seen a very small number of instances where a node forgets what tab it is
on and its &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;z&lt;/code&gt; property is set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;0&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&quot;&quot;&lt;/code&gt; - causing the node to disappear
from the editor. We’ve never managed to recreate this issue to get to the bottom
of it - something to do with deleting flows. But with this release, the editor
will now help recover those lost nodes by added a ‘recovery’ tab to add them to.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2691&quot;&gt;More details&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;other-editor-features&quot;&gt;Other editor features&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Sidebar tabs can now be reordered (&lt;a href=&quot;https://github.com/node-red/node-red/pull/2655&quot;&gt;details&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;The palette manager has an option to upload a node module tgz file rather than install from the catalog. This can be disabled in the settings. (&lt;a href=&quot;https://github.com/node-red/node-red/pull/2682&quot;&gt;details&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;The ACE edit component has been updated to the latest version which brings much better support for ES6 JavaScript syntax&lt;/li&gt;
  &lt;li&gt;Fixes issues around copy/paste of nodes within groups causing lockups.&lt;/li&gt;
  &lt;li&gt;When merging groups, the style options of the first selected group is used for the combined group.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;runtime-features&quot;&gt;Runtime features&lt;/h2&gt;

&lt;h3 id=&quot;splitting-configjson-into-multiple-files&quot;&gt;Splitting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.config.json&lt;/code&gt; into multiple files&lt;/h3&gt;

&lt;p&gt;The runtime settings file, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.config.json&lt;/code&gt; has been split in to four separate
files to better organise the content and allow the user to be more selective over
what they version control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you have a backup script that includes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.config.json&lt;/code&gt; you will need to update
it to backup these other files instead&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The runtime will leave the existing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.config.json&lt;/code&gt; in place in case you chose to
downgrade, but it will no longer be updated.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2704&quot;&gt;More details&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;introducing-redhooks-api&quot;&gt;Introducing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RED.hooks&lt;/code&gt; api&lt;/h3&gt;

&lt;p&gt;This is part of the pluggable message routing work that has been in our roadmap
for a long time now. It is less relevant to end users at this point in time,
but will underpin a lot of exciting features in the future, such as a proper
flow debugger, distributed node-red runtimes and integrated flow testing.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/node-red/node-red/pull/2665&quot;&gt;More details&lt;/a&gt;&lt;/p&gt;

&lt;h2 id=&quot;node-features&quot;&gt;Node Features&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;The Trigger node can now be configured to set its delay/repeat-interval by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;msg.delay&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;The Function node’s “setup” code can now log and send messages (&lt;a href=&quot;https://github.com/node-red/node-red/pull/2644&quot;&gt;details&lt;/a&gt;)&lt;/li&gt;
  &lt;li&gt;More of the core nodes now implement the ‘done’ api so can be used with the Complete node - yaml, xml, json, html, http, template, range, link, status, catch , complete, inject. Work continues on the remaining nodes.&lt;/li&gt;
&lt;/ul&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Node-RED 1.2 is now available to install.</summary>
      
    </entry>
  
  
  
    <entry>
      <title type="html">What&apos;s next with Node-RED?</title>
      <link href="https://nodered.jp/blog/2020/10/13/future-plans" rel="alternate" type="text/html" title="What&apos;s next with Node-RED?" />
      <published>2020-10-13T00:00:00+00:00</published>
      <updated>2020-10-13T00:00:00+00:00</updated>
      <id>https://nodered.jp/blog/2020/10/13/future-plans</id>
      <content type="html" xml:base="https://nodered.jp">&lt;p&gt;Last week I presented at &lt;a href=&quot;https://nodered.jp/noderedcon2020/index-en.html&quot;&gt;Node-RED Con Tokyo&lt;/a&gt;
to talk about the future of the project. I spoke about the high-level goals for
project and what they translate to in terms of technical features in the roadmap.&lt;/p&gt;

&lt;p&gt;This blog post is the written form of that talk - it provides the context that
is otherwise lacking from just looking through the slides.&lt;/p&gt;

&lt;script async=&quot;&quot; class=&quot;speakerdeck-embed&quot; data-id=&quot;df4c972d06664bbe97b2e66897eba5c4&quot; data-ratio=&quot;1.77777777777778&quot; src=&quot;//speakerdeck.com/assets/embed.js&quot;&gt;&lt;/script&gt;

&lt;hr /&gt;

&lt;p&gt;In my &lt;a href=&quot;/blog/2020/07/01/release-plans&quot;&gt;last post&lt;/a&gt;, I wrote about how we plan to
schedule our releases - with a new major versions being published to coincide
with the Node.js release schedule.&lt;/p&gt;

&lt;p&gt;What I didn’t touch on in that post is the technical side of the roadmap. Aside
from keeping up to date with Node.js, the question is what have we got planned
for the future of the project.&lt;/p&gt;

&lt;p&gt;The roadmap for the 1.0 release gave us something to focus on - it set a reasonably
well-defined target for the project to get to. Looking beyond 1.0 is a much more
open-ended question - there isn’t an equivalent end-point in mind.&lt;/p&gt;

&lt;p&gt;We do have a set of goals of the project - things we know we want to achieve.
We can use those goals to identify and prioritise the technical features we’re
going to work on in the coming releases.&lt;/p&gt;

&lt;p&gt;In this post, I’m going share some of the technical features we have
planned for the project and how they fit in with our goals for the project’s future.&lt;/p&gt;

&lt;p&gt;But first I wanted to share what we see our goals as being.&lt;/p&gt;

&lt;h3 id=&quot;who-are-our-users&quot;&gt;Who are our users?&lt;/h3&gt;

&lt;p&gt;To begin thinking about what the technical roadmap is for the project, we have
to take a step back and think about who our users are - who are we developing
Node-RED for?&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://nodered.org/about/community/survey/2019/&quot;&gt;community survey&lt;/a&gt; we did
last year gave us a good view of the community. Our users come from a very wide
range of backgrounds and experience. We have students who are just starting to
learn about programming. We have retired engineers who are getting back to
building things. We have experienced developers who appreciate the convenience
Node-RED provides over writing code. And we have everyone else in between.&lt;/p&gt;

&lt;p&gt;A large proportion of our users are individuals who run Node-RED on personal devices -
a laptop, a Raspberry Pi or a virtual machine in the cloud. They are building
solutions for themselves - whether it’s home automation, adding skills to their
Alexa or Google Home, or doing the types of online services like IFTTT can provide.&lt;/p&gt;

&lt;p&gt;It’s predominately these users who spend their time in the forum, discussing what
they’ve built, or helping answer questions from newcomers.&lt;/p&gt;

&lt;p&gt;Another group of users come from the companies who have integrated Node-RED into
their own products and services. Hitachi, Siemens, Samsung, Particle and many others.
They have a different set of needs. They want to integrate Node-RED into their
existing platforms. They want to be able to offer a seamless experience to their
end users - hiding away the details of how Node-RED is being run or where the
flows are executed.&lt;/p&gt;

&lt;p&gt;Understanding the different needs of these groups of users is vital to getting
the priorities right in the roadmap.&lt;/p&gt;

&lt;h3 id=&quot;sustainability&quot;&gt;Sustainability&lt;/h3&gt;

&lt;p&gt;There is another reason why we need to understand these different groups of
users. We have a responsibility to ensure Node-RED is a sustainable project - that
it has the resources it needs to continue delivering to our users. Sustainability
in open source is a hard problem.&lt;/p&gt;

&lt;p&gt;Contributors typically come from two places; individuals who chose to invest their
spare time to the project and individuals who have a commercial interest in the
project and contribute as part of their day job.&lt;/p&gt;

&lt;p&gt;As a Growth project of the OpenJS Foundation, we want to grow our contributor
base - getting more people involved with the central parts of the project.&lt;/p&gt;

&lt;p&gt;Whilst some of that will come from individuals, we want to increase the commercial
adoption of Node-RED. This will help increase the commercial investment back into
the project itself.&lt;/p&gt;

&lt;h3 id=&quot;project-goals&quot;&gt;Project goals&lt;/h3&gt;

&lt;p&gt;As we think about the technical roadmap for the project, we have three goals:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Improve the experience for the individual developer&lt;/li&gt;
  &lt;li&gt;Increase commercial adoption of Node-RED&lt;/li&gt;
  &lt;li&gt;Improve the path to production for anyone wanting to use Node-RED&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s these goals that we should use to help us prioritise and focus our efforts
moving forward.&lt;/p&gt;

&lt;p&gt;A lot of this will be familiar if you’ve followed the various discussions in the
forum or slack - but it’s useful to bring it together into one place.&lt;/p&gt;

&lt;h2 id=&quot;improving-the-developer-experience&quot;&gt;Improving the Developer Experience&lt;/h2&gt;

&lt;h3 id=&quot;testing-framework&quot;&gt;Testing Framework&lt;/h3&gt;

&lt;p&gt;One of the most fundamental requirements for any software development is being
able to easily test the code. Whether that is unit-testing individual components,
or system-testing a larger piece.&lt;/p&gt;

&lt;p&gt;This is an entire area that Node-RED does not provide much help to the user with.
Some testing can be done in the editor, using Inject nodes to create test messages,
and the Debug sidebar to check the results. But that’s quite a limited set of tools.
It’s entirely manual testing and not suitable when you want to test against external
systems like databases or web apis, nor is it suitable when you want to automate
the testing as part of a automated Continual Integration workflow.&lt;/p&gt;

&lt;p&gt;One approach would be to create traditional test cases in code; tests that can
run against the externals exposed by the flows. This has two major drawbacks;
it would be hard to do unit testing of internal components of the flows, and it
does not fit the ‘low-code’ idea of Node-RED very well.&lt;/p&gt;

&lt;p&gt;We want our users who are not traditional software developers to be able to
create tests for their flows just as easily as anyone else can.&lt;/p&gt;

&lt;p&gt;There is some initial design work on this item in our designs repository. The
high-level concept is to be able to define suites of test cases in the editor.
Then, for each node in a flow, you will be able to define the desired behaviour
of that node for each test case. The behaviour will be split into three phases:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;beforeNode&lt;/code&gt; - this phase is triggered when a node receives a message, but
before the node is given the message. This can be used to validate the message
arriving at the node has the expected properties.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;testNode&lt;/code&gt; - this phase can be used to define the behaviour of the node in
place of the actual runtime node. This would allow the node to be ’stubbed’
out, for example a node that writes to a database or interacts with an external
system.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;afterNode&lt;/code&gt; - this phase is triggered whenever the node sends a message, but
before the next nodes receive it. This can be used to validate the output of
the node.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Any of these phases will be able to mark the test case as having passed or failed.
That means it would be possible to create test cases that span entire flows, or
that just focus on one or two nodes.&lt;/p&gt;

&lt;p&gt;The editor will have a new sidebar that lists out the test cases, where they can
be run and have their results reported. We’ll also provide a way of running the
test cases using just the command-line so they can be used as part of an automated
pipeline.&lt;/p&gt;

&lt;h3 id=&quot;flow-linter&quot;&gt;Flow Linter&lt;/h3&gt;

&lt;p&gt;Alongside testing, there’s another type of tool that developers have come to
expect and rely on in modern development tools - linters.&lt;/p&gt;

&lt;p&gt;Linters are tools that can analyse the code and generate recommendations, warnings
and errors based on what they find. From checking for basic syntax errors, to
ensuring a consistent format is used in a code base, linters play an important
role.&lt;/p&gt;

&lt;p&gt;There has been some initial work on a Flow Linter from our friends at Hitachi,
and we’ll be looking to accelerate that work in the coming months.&lt;/p&gt;

&lt;p&gt;The Flow Linter will be both command-line and editor based. The command-line
version will allow it to be used as part of deployment pipelines to ensure a
flow meets the required linting rules before it is integrated.&lt;/p&gt;

&lt;p&gt;Within the editor, it’ll give feedback to the user over issues in their flow,
before they have even clicked the Deploy button.&lt;/p&gt;

&lt;p&gt;It will be a pluggable tool, allowing custom linting rules to be written and
shared with the community - so if your organisation has a particular set of
requirements, or maybe you use some custom nodes that must be wired up in very
particular ways, the linter will help catch mistakes before they are deployed.&lt;/p&gt;

&lt;h3 id=&quot;flow-debugger&quot;&gt;Flow Debugger&lt;/h3&gt;

&lt;p&gt;One of the features that I am personally most excited to start working on is a
proper flow debugger.&lt;/p&gt;

&lt;p&gt;Node-RED provides the Debug node to help the developer understand what is happening
in their flow. They are helpful tools, but they have their limits. You can only
debug at the points you have added a node into the flow. Where you have a flow
that involves multiple branches and timing events, it can be hard to see how
messages are flowing in each branch at the same time.&lt;/p&gt;

&lt;p&gt;The Flow Debugger will allow the developer to set breakpoints throughout their
flow. When a message arrives at a breakpoint, the runtime will pause, messages
will stop flowing. The developer can then inspect the flow at different points -
to inspect the messages waiting to be delivered.&lt;/p&gt;

&lt;p&gt;When running with the Debugger enabled, the user will be able to visualise the
performance of their flows - to see where time is being spent, or if there are
any bottlenecks that could be optimised.&lt;/p&gt;

&lt;h3 id=&quot;exportable-subflows&quot;&gt;Exportable Subflows&lt;/h3&gt;

&lt;p&gt;We want to make it easier for users to create their own nodes and share them with
the community. The goal is to allow subflows to be published as proper node
modules that can then be installed just like any other node in the library.&lt;/p&gt;

&lt;p&gt;Work is already well underway on this - there’s a draft PR that adds basic
support for loading subflows into the runtime from a module.&lt;/p&gt;

&lt;h3 id=&quot;projects&quot;&gt;Projects&lt;/h3&gt;

&lt;p&gt;We have had the projects feature in Node-RED for a long time now - bringing the
ability to version control flows directly into the editor. But there’s more to be
done in this area.&lt;/p&gt;

&lt;p&gt;The 1.2 release has introduced a new simplified git workflow - where changes are
automatically committed whenever the deploy button is clicked. That’s important
for users who are less experienced with Git version control - they will benefit
without having to know about committing changes themselves.&lt;/p&gt;

&lt;p&gt;And there are other areas we need to improve:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;em&gt;Managing project dependencies&lt;/em&gt;. At the moment the editor lets you edit the
dependencies yourself, and it tries to give some hints on what needs doing,
but that whole user experience needs to be improved.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Accessing earlier versions of a project&lt;/em&gt;. Having a full history of changes
is not much use if you can’t easily go back to an earlier version. It is
possible to do on the command-line - but that isn’t the right answer if we
want this to be accessible to all users within the editor.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;settings.js&lt;/code&gt; to a project&lt;/em&gt;. For a project to be a complete deployable
artefact, it needs a settings file. At the moment, that has to be created and
added to the project manually. There’s more the editor could do to help with
this - the hard part is managing the project’s settings file versus the runtime
settings file - but that’s a discussion for another time.&lt;/li&gt;
  &lt;li&gt;&lt;em&gt;Adding a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Dockerfile&lt;/code&gt; to a project&lt;/em&gt;. A common pattern for deploying projects
into a production environment is via some form of containerisation. Making
this quick and easy to setup in the editor would be a big step forward - although
very much an optional feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m sure there are other things we could be doing with the Projects feature to
make it much more powerful. As with everything on this roadmap, we’ll be looking
to the community for feedback to help expand on the details.&lt;/p&gt;

&lt;h3 id=&quot;standalone-installer&quot;&gt;Standalone Installer&lt;/h3&gt;

&lt;p&gt;Another area we want to improve is making it easier for users to get started with
Node-RED. At the moment, to install Node-RED a user has to install node.js and npm,
then run some commands they may not be familiar with, and they see a screenful
of output from npm - most of which will mean very little to them.&lt;/p&gt;

&lt;p&gt;There are also the cases where a user doesn’t have a good internet connection -
or any connection at all where they want to install Node-RED.&lt;/p&gt;

&lt;p&gt;To help address these problems, we’re going to create a standalone installer for
Node-RED. Built with Electron to generate native installers for all the common
platforms, this will be a way to install and use Node-RED as a native desktop
application.&lt;/p&gt;

&lt;p&gt;There are existing projects that do this - including Saito-san’s &lt;a href=&quot;https://sakazuki.github.io/node-red-desktop/&quot;&gt;Node-RED Desktop&lt;/a&gt;.
We’ll look to those projects for collaboration and inspiration as we move forward.&lt;/p&gt;

&lt;h2 id=&quot;increasing-commercial-adoption&quot;&gt;Increasing commercial adoption&lt;/h2&gt;

&lt;p&gt;An important goal for the project is to increase its commercial adoption. It’s
through this we can help increase the investment back into the project and help
increase its long-term sustainability.&lt;/p&gt;

&lt;p&gt;All of the developer experience items feed into this as Node-RED will only get
adopted if there is a demand for it - so ensuring it is a delight to use and
provides the tools users want to use is vital.&lt;/p&gt;

&lt;p&gt;But there are also a set of features that are of less immediate relevance to individual
users - but will play an important role when looking at running Node-RED at scale.&lt;/p&gt;

&lt;h3 id=&quot;deploying-node-red-at-scale&quot;&gt;Deploying Node-RED at scale&lt;/h3&gt;

&lt;p&gt;One very common question we get is around multi-tenancy - having multiple users
share a single Node-RED instance without getting in each other’s way.&lt;/p&gt;

&lt;p&gt;Our long-stated recommendation has been that the node-red runtime is not suited
for multi-tenancy. This is down to a number of reasons. Node.js is a single-threaded
runtime - there is only one event loop that must be shared between all of the
flows in the runtime. If one user creates a flow that uses a lot of resources,
it could have a negative impact on the performance of the other flows. Any bugs
in that flow that lock up the event loop would stop everything else from running.
Similarly, we have no mechanism to isolate the global context of each flow.&lt;/p&gt;

&lt;p&gt;This is why we have always said each user’s flows should be put in its own runtime
instance - and we have no immediate plans to change that recommendation.&lt;/p&gt;

&lt;p&gt;But we recognise that hands the responsibility for figuring out how to manage
multiple instances over to those who want to integrate Node-RED into their
environment. That can be quite a barrier to adoption and we don’t currently provide
any guidance on how to do it.&lt;/p&gt;

&lt;p&gt;To begin with, we want to understand how the existing users of Node-RED have
approached deploying it at scale. We know there are lots of different possible
models and approaches taken today. We want to get a better view on questions like
what stacks are being used - is it Kubernetes, OpenShift, Docker Compose or some
other orchestration technology. We want to understand what approaches companies
have taken to manage their user’s flows. Do users edit their flows in a ‘live’
environment or are there separate development and production runtimes.&lt;/p&gt;

&lt;p&gt;This will then feed into a set of architectural patterns we’ll create for deploying
Node-RED at scale. In the first instance, those patterns may be more about
documentation than running code. Over time, there may prove to be some useful
components we can develop that would fill in some of the gaps.&lt;/p&gt;

&lt;h3 id=&quot;scalability-of-flows&quot;&gt;Scalability of flows&lt;/h3&gt;

&lt;p&gt;As workloads increase, we need to ensure the Node-RED runtime can be scaled to
meet the demand.&lt;/p&gt;

&lt;p&gt;As with the multi-tenancy question, we’ve traditionally deferred this question to
say you can horizontally scale your flows by running multiple instances of the runtime,
with some kind of load balancing in front.&lt;/p&gt;

&lt;p&gt;That answer remains largely the same, but there are certainly things we can do
to help with the overall scalability.&lt;/p&gt;

&lt;p&gt;We’ve talked about the idea of a distributed Node-RED architecture many times in
the past. This is where a flow drawn in the editor can be deployed across multiple
runtimes and devices. It is something we’ve been slowing working towards and we’ll
continue to do so.&lt;/p&gt;

&lt;p&gt;It’s a model that can also be used in the context of scalability. For example,
being able to deploy multiple copies of a flow across multiple runtimes.&lt;/p&gt;

&lt;p&gt;In 1.2 we’ve added the hooks API to support pluggable message routing. This will
allow custom code to be added to the message routing between nodes. So if a flow
spans two different runtimes, or different parts can be scaled independently,
that custom code could be used to route the messages between the runtimes.&lt;/p&gt;

&lt;p&gt;In 1.0 we added the Groups feature in the editor. The plan is, in a future release,
to allow a group to have custom meta data associated with it. A user could then
create a flow, and then group the nodes according to &lt;em&gt;where&lt;/em&gt; they should be deployed,
or &lt;em&gt;how&lt;/em&gt; they can be scaled. That group meta data could then be used by the
messaging routing to handle getting the messages to where they need to be. Aside
from the group meta-data, the only other missing piece is a way to deploy the
flow across the multiple runtimes.&lt;/p&gt;

&lt;p&gt;The new hooks api we introduced in 1.2 for the message routing will get extended
in a future release to support hooks at other points of the runtime lifecycle -
such as when the deploy button is pressed.&lt;/p&gt;

&lt;p&gt;The key part here is we’re adding the components and APIs needed to build a
distributed Node-RED. We don’t plan at this stage to produce an out-of-the-box
Distributed Node-RED version - but all the parts will be there to do so.&lt;/p&gt;

&lt;h3 id=&quot;customising-the-node-red-flow-appearance&quot;&gt;Customising the Node-RED flow appearance&lt;/h3&gt;

&lt;p&gt;Another aspect is looking at how easy it is to customise the appearance of Node-RED.
We already provide ways to add custom CSS and modify some aspects of the editor,
but that can only go so far.&lt;/p&gt;

&lt;p&gt;We have had occasional requests to be able to customise the appearance of the
flow itself - the shape and design of the nodes.&lt;/p&gt;

&lt;p&gt;We plan to make the drawing of flows a pluggable component of the editor. It is
only a concept at this stage - I couldn’t say exactly how it would work, but the
idea would be that when the editor needs to draw a node on the screen at a given
position, it calls out to the custom code that does the work needed.&lt;/p&gt;

&lt;p&gt;To be clear, this isn’t about allowing individual nodes to change their own
appearance - its about customising the appearance of the entire flow in a consistent
way.&lt;/p&gt;

&lt;h2 id=&quot;feedback&quot;&gt;Feedback&lt;/h2&gt;

&lt;p&gt;With all of these features, there is a significant amount of development work
needed. As an Open Source project without a large team of full-time developers,
it isn’t possible to put a time-scale on this work as a whole. These items are
only the headlines for future releases - there will be countless smaller
enhancements and features throughout the editor and runtime.&lt;/p&gt;

&lt;p&gt;If there’s anything here you’re excited by, that you’d like to get mored involved
with, then please do come talk to us - either on the &lt;a href=&quot;https://discourse.nodered.org&quot;&gt;forum&lt;/a&gt;
or on &lt;a href=&quot;https://nodered.org/slack&quot;&gt;slack&lt;/a&gt;.&lt;/p&gt;</content>

      
      
      
      
      

      
        <author>
            <name>nick</name>
          
          
        </author>
      

      

      

      
        <summary type="html">Last week I presented at Node-RED Con Tokyo to talk about the future of the project. I spoke about the high-level goals for project and what they translate to in terms of technical features in the roadmap.</summary>
      
    </entry>
  
  
</feed>
