Node-RED is particularly popular in home automation. For example, the free framework can be used to playfully create processes (“turn on light”) that react dynamically to events (“if it’s evening”) – and that with low-code. The logic clicked together via drag & drop can then be exported via JSON, for example, and saved as a backup – if you think of it.
Backing up the logic is done with a few mouse clicks – so individual or all flows can be exported and also imported again. However, it is a manual process that tends to be forgotten. Once an export is done, the files still need to be stored and versioned in a meaningful way afterwards.
Whenever possible, I always use Git to version files and document changes. Unfortunately, there doesn’t seem to be much usable Git extensions for Node-RED – a semi-useful one is node-red-contrib-git-ui. This is installed as follows:
$ npm i -S node-red-contrib-git-ui
After restarting the application/container, the extension is active.
An SSH key should now be generated for the container/application user so that content can be maintained without entering a password:
A Git repository is now created in the application folder (/data when using the Docker container) and a staging branch is created. This is necessary because the extension unfortunately only updates flow changes in this branch.
$ cd /data $ git init . $ git checkout -b staging
Then the URL of an empty remote repository is configured:
$ git remote add ssh://...
Since the extension unfortunately automatically deposits all changed files in Git, the overview suffers. The remedy is to create a .gitignore allowlist that only allows flow-relevant files:
* !flows.json !package.json !settings.js !staging/* !.gitignore
Afterwards, a git-ui entry can be found in the dropdown menu on the right – a commit can simply be triggered here. In the log submenu, past commits can also be viewed, compared and restored:
If you are looking for an easy way to backup flows regularly with Git, you should take a look at the extension. However, it would be nice if the documentation was better and there were more settings options.