Flowhub and the GNOME Developer Experience

I've spent the last three days in the GNOME Developer Experience hackfest working on the NoFlo runtime for GNOME with Lionel Landwerlin.

GNOME Developer Experience hackfest participants

What the resulting project does is give the ability to build and debug GNOME applications in a visual way with the Flowhub user interface. You can interact with large parts of the GNOME API using either automatically generated components, or hand-built ones. And while your software is running, you can see all the data passing through the connections in the Flowhub UI.

GNOME development in Flowhub

The way this works is the following:

  • You install and run the noflo-gnome runtime
  • The runtime loads all installed NoFlo components and dynamically registers additional ones based on GObject Introspection
  • The runtime pings Flowhub's runtime registry to notify the user that it is available
  • Based on the registry, the runtime becomes available in the UI
  • After this, the UI can start communicating the with runtime. This includes loading and registering components, and creating and running NoFlo graphs
  • The graphs are run inside Gjs

Creating a new NoFlo GNOME project

While there is still quite a bit of work to be done in exposing more of the GNOME API as flow-based components, you can already do quite a bit with this. In addition to building simple UIs with GTK+, working with Clutter animations was especially fun. With NoFlo, every running graph is "live", and so you can easily modify the various parameters and add new functionality while the software is running, and see those changes take effect immediately.

Here is a quick video of building a simple GTK application that loads a Glade user interface definition, runs it as a new desktop window, and does some signal handling:

If you're interested in visual, flow-based programming on the Linux desktop, feel free to try out the noflo-gnome project!

There are still bugs to squish, documentation to write, and more APIs to wrap as components. All help in those is more than welcome.

Read more Flow-Based Programming posts.