0.3.0 (exported graph ports)

@bergie bergie released this Jul 5, 2013 · 1399 commits to master since this release

User interface:

  • NoFlo's web-based user interface has been moved to a separate noflo-ui repository

  • The noflo shell command now uses STDOUT for debug output (when invoked with --debug) instead of STDERR

    • Events from subgraphs are also visible when the noflo command is used with the additional -s switch
    • Contents of packets are shown when the noflo command is used with the additional -v switch
    • Shell debug output is no colorized for easier reading
  • DOT language output from NoFlo was made more comprehensive

  • NoFlo graphs can now alias their internal ports to more user-friendly names when used as subgraphs. When aliases are used, the other free ports are not exposed via the Graph component. This works in both FBP and JSON formats:

    For FBP format graphs:


    For JSON format graphs:

      "exports": [
          "private": "INTERNALPROCESS.PORT",
          "public": "EXTERNALPORT"

NoFlo internals:

  • All code was migrated from 4 spaces to 2 space indentation as recommended by CoffeeScript style guide. Our CI environment safeguards this via CoffeeLint
  • Events emitted by ArrayPorts now contain the socket number as a second parameter
  • Initial Information Packet sending was delayed by process.nextTick to ensure possible subgraphs are ready
  • The debug flag was removed from NoFlo Network class, and the networks were made EventEmitters for more flexible monitoring
  • The isSubgraph method tells whether a Component is a subgraph or a regular code component
  • Subgraphs loaded directly by ComponentLoader no longer expose their graph port
  • The addX methods of Graph now return the object that was added to the graph
  • NoFlo networks now emit start and end events
  • Component instances have the ID of the node available at the nodeId property
  • Empty strings and other falsy values are now allowed as contents of Initial Information Packets

Changes to core components:

  • ReadGroup now sends the group to a group outport, and original packet to out port
  • GetObjectKey can now send packets that don't contain the specified key to a missed port instead of dropping them
  • SetPropertyValue provides the group hierarchy received via its in port when sending packets out
  • Kick can now optionally send out the packet it received via its data port when receiving a disconnect on the in port. Its out port is now an ArrayPort
  • Concat only clears its buffers on disconnect when all inports have connected at least once
  • SplitStr accepts both regular expressions (starting and ending with a /) and strings for splitting
  • ReadDir and Stat are now AsyncComponents that can be throttled

New core components:

  • MakeDir creates a directory at a given path
  • DirName sends the directory name for a given file path
  • CopyFile copies the file behind the path received via the source port to the path received via the destination port
  • FilterPacket allows filtering packets by regular expressions sent to the regexp port. Non-matching packets are sent to the missed port
  • FirstGroup allows you to limit group hierarchies of packets to a single level
  • LastPacket sends the last packet it received when getting a disconnect to the inport
  • MergeGroups collects grouped packets from its inports, and sends them out together once each inport has sent data with the same grouping
  • SimplifyObject simplifies the object structures outputted by the CollectGroups component
  • CountSum sums together numbers received from different inports and sends the total out
  • SplitInSequence sends each packet to only one of its outports, going through them in sequence
  • CollectUntilIdle collects packets it receives, waits a given time if there are new packets, and if not, sends them out

New component libraries: