The developers of this week’s highlighted project say their idea isn’t new, harkening back to a 1970s development paradigm from IBM, but that its support for any JavaScript transpiling language and its ecosystem of existing tools and integrations makes flow-based programming of JavaScript components more accessible. NoFlo is an open-source flow-based programming implementation for JavaScript,
The project pulls its explanation of flow-based programming from Wikipedia, which states: “In computer science, flow-based programming (FBP) is a programming paradigm that defines applications as networks of ‘black box; processes, which exchange data across predefined connections by message passing, where the connections are specified externally to the processes. These black box processes can be reconnected endlessly to form different applications without having to be changed internally. FBP is thus naturally component-oriented.”
On the project’s GitHub repository, the developers highlight how the modular nature of flow-based programming emulates Alan Kay’s original definition of object-oriented programming, as well as the well-known Unix philosophy of writing programs that do one thing well and work well together.
“NoFlo is not a web framework or a UI toolkit,” the developers explained. “It is a way to coordinate and re-organize data flow in any JavaScript application. As such, it can be used for whatever purpose JavaScript can be used for. We know of NoFlo being used for anything from building web servers and build tools, to coordinating events inside GUI applications, driving robots, or building Internet-connected art installations.”
NoFlo isn’t a standalone implementation, but part of the Flowhub platform of IDE and consulting services for development of IoT systems and web services. And NoFlo already has a number of tools in its ecosystem:
- Flowhub — browser-based visual programming IDE for NoFlo and other flow-based systems
- noflo-nodejs — command-line interface for running NoFlo programs on Node.js
- MsgFlo — for running NoFlo and other FBP runtimes as a distributed system
- fbp-spec — data-driven tests for NoFlo and other FBP environments
- flowtrace — tool for retroactive debugging of NoFlo programs. Supports visual replay with Flowhub
NoFlo can be installed via NPM for Node.js and more information about the JavaScript implementation can be found at the project’s GitHub repository.