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.
Developers used to the Unix philosophy should be immediately familiar with FBP:
This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.
It also fits well in Alan Kay's original idea of object-oriented programming:
I thought of objects being like biological cells and/or individual computers on a network, only able to communicate with messages (so messaging came at the very beginning -- it took a while to see how to do messaging in a programming language efficiently enough to be useful).
Read more at https://noflojs.org/.
Tools and 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
- noflo-browser-app -- template for building NoFlo programs for the web
- noflo-assembly -- industrial approach for designing NoFlo programs
- fbp-spec -- data-driven tests for NoFlo and other FBP environments
- flowtrace -- tool for retroactive debugging of NoFlo programs. Supports visual replay with Flowhub
See also the list of reusable NoFlo modules on NPM.
Requirements and installing
NoFlo is available for Node.js via NPM, so you can install it with:
$ npm install noflo --save
You can make a browser build of NoFlo using webpack. For webpack builds, you need configure the component loader statically with noflo-component-loader. For projects using Grunt, grunt-noflo-browser plugin makes this easy.
Installing from Git
$ npm run build
Then you can install everything needed by a simple:
$ npm link
NoFlo is available from GitHub under the MIT license.
NoFlo development happens on GitHub. Just fork the main repository, make modifications and send a pull request.
We have an extensive suite of tests available for NoFlo. Run them with:
$ npm run build$ npm test
By default, the tests are run for both Node.js and the browser. You can also run only the tests for a particular target platform:
$ npm run test:node
$ npm run test:browser