API Documentation

On GitHub


NoFlo - Flow-Based Programming for JavaScript
(c) 2013-2016 TheGrid (Rituwall Inc.)
(c) 2011-2012 Henri Bergius, Nemein
NoFlo may be freely distributed under the MIT license

NoFlo is a Flow-Based Programming environment for JavaScript. This file provides the main entry point to the NoFlo network.

Find out more about using NoFlo from http://noflojs.org/documentation/

Main APIs

Graph interface

Graph is used for instantiating FBP graph definitions.

exports.graph = require('./Graph')
exports.Graph = exports.graph.Graph

Graph journal

Journal is used for keeping track of graph changes

exports.journal = require('./Journal')
exports.Journal = exports.journal.Journal

Network interface

Network is used for running NoFlo graphs.

exports.Network = require('./Network').Network

Platform detection

NoFlo works on both Node.js and the browser. Because some dependencies are different, we need a way to detect which we're on.

exports.isBrowser = require('./Platform').isBrowser

Component Loader

The ComponentLoader is responsible for finding and loading NoFlo components.

Node.js version of the Component Loader finds components and graphs by traversing the NPM dependency tree from a given root directory on the file system.

Browser version of the Component Loader finds components and graphs by traversing the Component dependency tree from a given Component package name.

exports.ComponentLoader = require('./ComponentLoader').ComponentLoader

Component baseclasses

These baseclasses can be used for defining NoFlo components.

exports.Component = require('./Component').Component
exports.AsyncComponent = require('./AsyncComponent').AsyncComponent

Component helpers

These helpers aid in providing specific behavior in components with minimal overhead.

exports.helpers = require './Helpers'
exports.streams = require './Streams'

NoFlo ports

These classes are used for instantiating ports on NoFlo components.

ports = require './Ports'
exports.InPorts = ports.InPorts
exports.OutPorts = ports.OutPorts
exports.InPort = require './InPort'
exports.OutPort = require './OutPort'

The old Port API is available for backwards compatibility

exports.Port = require('./Port').Port
exports.ArrayPort = require('./ArrayPort').ArrayPort

NoFlo sockets

The NoFlo internalSocket is used for connecting ports of different components together in a network.

exports.internalSocket = require('./InternalSocket')

Information Packets

NoFlo Information Packets are defined as "IP" objects.

exports.IP = require './IP'

Network instantiation

This function handles instantiation of NoFlo networks from a Graph object. It creates the network, and then starts execution by sending the Initial Information Packets.

noflo.createNetwork(someGraph, function (err, network) {
  console.log('Network is now running!');

It is also possible to instantiate a Network but delay its execution by giving the third delay parameter. In this case you will have to handle connecting the graph and sending of IIPs manually.

noflo.createNetwork(someGraph, function (err, network) {
  if (err) {
    throw err;
  network.connect(function (err) {
    console.log('Network is now running!');
}, true);
exports.createNetwork = (graph, callback, options) ->
  unless typeof options is 'object'
    options =
      delay: options
  unless typeof callback is 'function'
    callback = (err) ->
      throw err if err

  network = new exports.Network graph, options

  networkReady = (network) ->

Send IIPs

    network.start (err) ->
      return callback err if err
      callback null, network

Ensure components are loaded before continuing

  network.loader.listComponents (err) ->
    return callback err if err

Empty network, no need to connect it up

    return networkReady network if graph.nodes.length is 0

In case of delayed execution we don't wire it up

    if options.delay
      callback null, network

Wire the network up and start execution

    network.connect (err) ->
      return callback err if err
      networkReady network


Starting a network from a file

It is also possible to start a NoFlo network by giving it a path to a .json or .fbp network definition file.

noflo.loadFile('somefile.json', function (err, network) {
  if (err) {
    throw err;
  console.log('Network is now running!');
exports.loadFile = (file, options, callback) ->
  unless callback
    callback = options
    baseDir = null

  if callback and typeof options isnt 'object'
    options =
      baseDir: options

  exports.graph.loadFile file, (err, net) ->
    return callback err if err
    net.baseDir = options.baseDir if options.baseDir
    exports.createNetwork net, callback, options

Saving a network definition

NoFlo graph files can be saved back into the filesystem with this method.

exports.saveFile = (graph, file, callback) ->
  exports.graph.save file, -> callback file

This page contains documentation generated automatically on 2017-01-03 from NoFlo's NoFlo.coffee file.