Flow-based Diagramming Tool (DrawFBP)

Panta rhei (Panta rhei) - Everything flows.

Example of diagram being built

DrawFBP is a picture-drawing tool that allows users to create multi-level diagrams implementing the technology and methodology known as Flow-Based Programming (FBP). Diagrams are saved in DrawFBP XML format, and can actually be used to generate JavaFBP networks, which can then be compiled and run on an IDE such as Eclipse.

DrawFBP supports "stepwise refinement" or "top-down development" by supporting subnets - blocks in the diagram that can specify lower level diagrams, which can in turn specify lower level ones, and so on. DrawFBP allows the user to draw a diagram just using short, descriptive names for blocks (nodes) and to fill in either component or subnet names later. Multiple levels can be held under separate tabs, allowing the user to jump back and forth between different levels of a design.

Alternatively, complex diagrams can be turned into multi-level diagrams by using the "excise" function of the Enclosure block: a group of blocks can be converted into a separate subnet and replaced by a "subnet" block, containing appropriate "external port" blocks, in one operation (see Youtube DrawFBP 5 - https://www.youtube.com/watch?v=5brTDk8cpNo around 9:06).

DrawFBP can generate networks for Java, C#, and NoFlo (JSON). These are kept separate in the DrawFBP dialogs and typically use different libraries.

DrawFBP also generates a network definition in .fbp notation. This was originally defined by Wayne Stevens, and has been somewhat modified for NoFlo. It will also be usable as input to the C++ implementation, called CppFBP.

For information about FBP in general, see the FBP web site - http://www.jpaulmorrison.com/fbp .

Six Youtube videos are currently available showing how to use DrawFBP, for drawing diagrams, and generating running JavaFBP networks, using the Eclipse IDE:


DrawFBP supports a number of features, including:

  • Variety of block types, including "Initial IP", Report, File, Legend (text with no boundary), External ports (for subnets), Human (!)
  • Top-down design supported - although bottom-up is also supported (blocks can be placed on the diagram and connected, and class names filled in later)
  • Display subnets in separate tabs
  • Convert portion of diagram to subnet ("excise")
  • Specify connection capacity
  • "Automatic" ports
  • Checking for valid port names
  • Indicate "drop oldest" attribute for given connection
  • Generate complete networks in Java, C#, JSON, or .fbp notation
  • Pan, zoom in/out
  • Drag portion only of diagram (using Enclosure block)
  • Go to folder from diagram (as of v2.14.1)
  • Keyboard-only usage (except positioning of blocks)
  • Choose fonts (fixed size and variable size, indicating support for Russian, Hindi (Devanagari), and Chinese)
  • Change font size
  • Structured Help facility
  • Export diagram as image
  • Print diagram
  • Drag blocks, sections of diagram (using "Enclosure"), heads or tails of arrows; create or drag bends in arrows
  • "Grid" positioning on/off
  • Extra arrowhead (one per arrow)
  • New Functions (as of v2.16.1): - Compile Java program - Run Java program
  • New Functions (as of v2.16.5): - Compile C# program - Run C# program

J Paul Rodker Morrison