With 0.19 out the way, work is already well underway on 0.20. I wanted to share a bit of the plans for 0.20, how we're going about it and provide guidance to anyone wanting to contribute.
Runtime/Editor split
The headline feature of 0.20 will be a complete restructuring of how Node-RED is packaged. We're splitting the one node-red
npm module into seven separate modules. This introduces a more formal API for the runtime component and opens up a number of interesting ways that Node-RED can be embedded and extended. To the end-user, this change should be completely invisible. The node-red
module will still exist and be what is installed via npm - but with this change, it will pull in the new component modules under the covers.
This work is incredibly disruptive to the code base - pretty much every file moves around in someway. We need to minimise the overhead of dealing with PRs against the existing code layout, versus how they will look moving forward.
There are two main branches in git - and its important to understand their role whenever a PR is raised:
-
master
- this is the default branch and is for the current release -0.19
. If a PR is fixing a bug, it should targetmaster
so the fix can be included in the next maintenance release. -
dev
- this is the development branch - what will eventually be shipped as0.20
. If a PR provides new functionality, it should target this branch.
We also have a branch called repackage
where the repacking work is being done. This work is largely complete and that branch will merge to dev
in the next few days. At which point, many of the existing PRs will no longer be able to merge cleanly. We'll work on a case-by-case basis with the authors of those PRs to resolve any problems.
It's also true we have a large backlog of open pull-requests that needs tidying up. There's lots on there we realistically won't ever merge - they have either been long-since outdated, or they pull in the wrong direction.
The Design Note for this feature contains more details.
Node Message API
One of those PRs introduces a new messaging API for nodes to use - this defines how a node handles the messages it receives and, crucially, requires a node to tell the runtime it has finished handling a message.
This will allow new features such as timeout handling, better logging and correlation of flow activity, and introduces a new node (name TBD) that can be used to trigger a flow whenever a node finishes with a message. This feature will mean a flow can be triggered when a node that doesn't have an output, finishes its work.
Of course, introducing the new API is just the first step. There are 1600 modules in the flow library and they won't update overnight to take advantage of this API. The existing API will continue to work (of course), but we will be updating the docs for the new api once it is available. The complication, of course, is once a node updates to the new API, it will not work on older versions of Node-RED - so this does need to be done with some care.
There's more work to be done here - it is possible we choose to bump this to 0.21 depending on the progress we're able to make.
The Design Note for this feature contains more details.
What else...
We don't plan to have any other headline items in the release. That's mostly due to the fact there's no-one left to work on anything else.
There will be the usual assortment of incremental enhancements to the editor and nodes - but given the amount of work on the above items, it may be we don't throw too much else into the release.
When...
We want to minimise churn of major releases, but we also need to continue to make good progress on the roadmap to 1.0. There's a balance to be struck between shipping regularly and giving users a stable base to work on. The 6-month gap we had between .17 and .18, and again to .19 was never the plan.
One of the reasons for writing this post is to put a stake in the ground for the 0.20 release.
The goal is to have 0.20 ready to ship by the end of September - although there are a couple factors outside of our control on that (specifically, getting access to the @node-red npm organisation that sits registered but unused - we're working with npm support on that).
Contributing
If you're interesting in contributing, get in touch. Either here, or on slack. We have a healthy backlog of ideas on the whiteboard and there's always things we haven't thought of.
The one golden rule is that we ask you to talk to us before opening a pull-request.
All of the items in the roadmap have basic designs behind them - not all of which we've written down. Some have design notes on the wiki, some don't. No-one should start implementing anything on there without talking to us. This is simply because those design notes don't always stay up to date with our current thinking.
There are plenty of other ways to contribute beyond lines of code.
- The cookbook is in need of recipes.
- The documentation in general can always do with more input
- We recently published a user guide to the Editor which covers the basics, but there's still lots more to cover
Whatever you are interested in, get in touch.
Nick