CoffeeScript C++ C Makefile HTML JavaScript
Latest commit 86f7bcd Mar 17, 2017 @jonnor jonnor Bump
Failed to load latest commit information.
components core: Install via NPM as devdep instead of git submodule Mar 21, 2015
doc typo Mar 11, 2017
examples test: Add test for MsgFlo participant support Apr 19, 2016
lib runtime: Remove unneeded hacks for edge data Mar 16, 2017
microflo Make: Drop separate library/componentlib building Mar 16, 2017
simulator simulator: Use C wrapping in Emscripten to be Chrome-compatible (no e… Jun 29, 2014
test tests: Fix ReferenceError in error handling Jan 15, 2017
thirdparty thirdparty/NewPing: Update, fixes callback bug May 16, 2015
tools Make: Support uploading also to Leonardo Jan 12, 2017
.gitignore Checkin internal definitions, put generated component defs in build dir Feb 26, 2015
.gitmodules engine: Add a NullIO backend Aug 27, 2015
.npmignore Attempt to tweak NPM publish files Oct 12, 2014
.travis.yml Revert "Travis: Test using live programming on" Jan 16, 2017 Move graph definition loading, allow it embedded in .cpp file Dec 12, 2014 package.json: Remove unused deps Dec 18, 2016
LICENSE LICENSE: Update years Apr 19, 2016
Makefile generate: Fix creation of output dir when not existing Mar 16, 2017
Makefile.mbed mbed: Implement host communication over USB/serial Feb 7, 2014 Stellaris/Tiva: Use Energia toolchain instead of old StellarisWare Mar 2, 2015
Makefile.stellaris.driverlib Stellaris/Tiva: Use Energia toolchain instead of old StellarisWare Mar 2, 2015
MicroFlo.config Add QtCreator project files Nov 4, 2013
MicroFlo.creator Add QtCreator project files Nov 4, 2013
MicroFlo.files Move emscripten support to microflo-emscripten Jun 10, 2016
MicroFlo.includes Add QtCreator project files Nov 4, 2013 README: Remove references to Ino, update Arduino to 1.6+ Jan 12, 2017
README.release.txt Travis: Also deploy .zip bundle Mar 7, 2015
component.json Bump 0.3.38 Jun 10, 2016
fbp-config.json Use microflo-emscripten from NPM Jun 10, 2016
makedefs.stellaris Stellaris/Tiva: Use Energia toolchain instead of old StellarisWare Mar 2, 2015 microflo componentlib: Remove command Mar 16, 2017
microflo.js lib: Convert microflo.js to CoffeeScript Mar 3, 2015
package.json Bump Mar 16, 2017
simulator.html Use microflo-emscripten from NPM Jun 10, 2016
startup_gcc.c Stellaris/Tiva: Use Energia toolchain instead of old StellarisWare Mar 2, 2015
stellaris.ld Fix missing C++ support on Tiva-C Mar 15, 2014
stellaris.load.gdb Add make upload-stellaris target Mar 16, 2014

MicroFlo: flow-based programming for microcontrollers

Build Status

Implementation of Flow-based programming for microcontrollers and embedded devices. MicroFlo supports multiple targets, including Arduino, Atmel AVR, ARM Cortex M devices (mbed, TI Tiva/Stellaris), ESP8266 and Embedded Linux.

Unlike most other visually programmable systems, MicroFlo programs runs standalone, does not make use of code generation, can be introspected and reconfigured at runtime, and supports automated testing.

One can program with MicroFlo either:

MicroFlo is designed to integrate with other FBP runtimes, like NoFlo and msgflo


Minimally useful. Simple programs work, components exists for most I/O on standard Arduino devices. Minimal support for automated testing. Suitable for those curious to play with alternative microcontroller programming models. Probably a bit early to use it for general tasks.

MicroFlo in the wild:

  • Jon's fridge thermostat has been running uninterrupted since September 2013.
  • The Ingress table at c-base station, Berlin uses MicroFlo to control the lights. One major upgrade/bugfix since March 2014.
  • The lights on the CNC-milled Christmas tree at Bitraf, Oslo ran for 4 weeks during Christmas 2013.


Use the Google Group Flow Based Programming or IRC channel Alternatively, file issues here on Github.


Past milestones

  • September 2013, 0.1.0 "The Fridge". First deployment of a Microflo-based device
  • November 2013, 0.2.0 "The start of something visual". First version programmable using Flowhub
  • May 2014, 0.3.0 "Node in a Node, to infinity". Suppport for non-Arduino platforms, NoFlo integration

Future roadmap

  • 0.4.0, "Runtime persistable, Introspectable": Uploaded graphs can be persisted to EEPROM, be monitored at runtime, and be composed of sub-graphs
  • 0.5.0, "Simulated": One can program and test MicroFlo programs in a simulator, before putting it on device
  • 0.?.0, "Generally useful": Most of Arduino tutorial have been, or can easily be, reproduced
  • ?.0.0, "Production quality": A commercial product based on MicroFlo has been shipped.
  • ?.0.0, "Device freedom": An open source hardware, free software electronics product based on MicroFlo with an integrated IDE allowing and encouraging the user to customize the code has been shipped.




For visual programming your Arduino, follow the MicroFlo for Arduino tutorial. If interested in extending MicroFlo, using it for other microcontrollers, see the next section.


Instructions below valid for

  • Arch Linux and Ubuntu (any GNU/Linux should be OK),
  • Mac OSX 10.8 Mountain Lion (10.6 -> 10.9 should be OK)

You can however use the Arduino IDE or another tool for flashing your microcontroller.

Note: Mostly tested on Arduino Uno R3 and Arduino Nano R3. Other Arduino devices should however work.

Get the code

git clone
cd microflo
git submodule update --init # only for old git versions

Install prerequsites: Arduino 1.6 or later Download

To build and run tests

npm install && npm test

To flash your Arduino with the MicroFlo runtime, including an embedded graph:

make upload GRAPH=examples/blink.fbp BOARD=arduino:avr:uno

Now you can use Flowhub Chrome app to talk directly to MicroFlo over serial/USB or use:

node microflo.js runtime

Then connect to the runtime (by default at http://localhost:3569) using Flowhub. More details at the getting started guide.

To see existing or add new components, check the files

To see existing or add microcontroller targets, see

Remember to rebuild MicroFlo after changes:

grunt build

When you find issues: file bugs and/or submit pull requests!


MIT for the code in MicroFlo, see ./LICENSE.

Note that some MicroFlo components may be under other licenses!


  1. People should not need to understand text-based, C style programming to be able to program microcontrollers. But those that do know it should be able to use that knowledge, and be able to mix-and-match it with higher-level paradims within a single program.
  2. It should be possible to verify correctness of a microcontroller program in an automated way, and ideally in a hardware-independent manner.
  3. It should be possible to visually debug microcontroller programs.
  4. Microcontroller functionality should be reprogrammable on the fly.
  5. Microcontrollers should easily integrate into and with higher-level systems: other microcontrollers, host computers, and the Internet.
  6. Microcontroller programs should be portable between different uC models and uC architectures.


  • Run on 8bit+ uCs with 32kB+ program memory and 1kB+ RAM
    • Primarily as bare-metal, but embedded Linux also possible in future
    • For initial component implementations, wrap Arduino/LUFA/etc
    • Components that are not tied to a particular I/O system shall have host-equivalents possible
  • Take .fbp/.json flow definition files used by NoFlo as the canonical end-user input
    • Use NoFlo code to convert this to a more compact and easy-to-parse binary format, architecture-independent flow representation
    • Flows in binary format can be baked into the firmware image.
  • Allow to introspect and manipulate graphs at runtime from a host over serial/USB/Ethernet.
    • Use a binary protocol derived from the binary graph representation for this.
  • Allow a flow network to be embedded into an existing C/C++ application, provide API for manipulating
  • Port and I/O configuration is stored in a central place, to easily change according to device/board deployed to.


Jon Nordby