From trawling the group it looks like several people have raised the issue of multiple users accessing node-red in different contexts, including myself. Toby Jaffey may have been one of the first where he raised the desire to allow his users to use node-red for data processing in his system. There have been other discussions about collaborative flow development
Nick clarified that Node-RED has been developed as a single user system and has suggested that we consider a runtime that spawns node-red instances. "My inclination is to not make the core node-red runtime multi-user aware as there are a number of issues with that model - it would be too easy for one user's flows to adversely affect the performance of another user's for example. My preferred approach is a runtime that can spawn individual node-red instances on a per-user basis, with the UI updated to be user-aware.”
Toward addressing this we’ve been we’re working on a couple of prototypes to address the scenario where we would like a single system (device, server, or cluster) to host multiple user’s flows. One use case is to make it really easy for people to spin up their own Node-RED in the cloud for integration and backend processing.
The first prototype was developed by Alexander Futász (cc'd) for Fraunhofer FOKUS institute in Berlin. This prototype does use a single Node-RED instance for deploying flows from multiple users, which works, and surprisingly isn’t that much of a big change to Node-RED itself. Of course the possible performance problem with one flow affecting others mentioned above is evident here. An open task for this prototype is also the pub/sub comms system which isn’t yet multi-user aware as it needs to track websockets per user. The guys from Fraunhofer are interested in multi-user and collaborating for this feature to hit upstream as they also want/need a cloud deploy feature for Node-RED.
A second prototype I've been working on takes Nick’s suggestion and implements a front end run time that manages separate processes, spawning one Node-RED instance for each user. The front end manages security for the instances proxying communications for the UI and access to HTTP inputs to flows. It can be developed independently from Node-RED allowing it to evolve. This seems to work well, but is more resource hungry.
Our question to the community is whether there are other approaches to consider, and whether others are working on this issue. If so, is there an appetite to collaborate on a solution?