0.4 (snow) is all action 0.4 (snow) is all action 0.4 (snow) is all action

August 3, 2015 / Posted By: wotio team

Snow, the freshest, has just been made available through both the public repository and npm, and contains some significant improvements on it's data model, general concepts, user interface and tooling. Many hundreds of improvements have distilled into a stable, easier to use and vastly more powerful tool.

While it doesn't constitute any backwards breaking changes with older installs, the way some concepts are communicated and used may instead just break your brain. Don't worry, its a good thing.

I'm pleased to welcome version 0.4 (Snow). Let me show you what's inside.

Channels, Be Gone!

The concept of Channels is the biggest conceptual pain for users. A 'Channel' has always been a container that can use to hold persistent configuration for an action or event, whether needed or not. The requirement of the old data model was to create a Channel explicitly, and then use that in a bip. In most cases, this configuration wasn't required to begin with as there was no configuration to store. This meant that you would soon fill up your lists of saved actions with junk channels while creating new bips, and feel increased pressure to maintain a mental model of how things were named, where they lived, and what bips they were used for. It's what you might call a leaky abstraction.

With that in mind, Channels have evolved into something new, called 'Presets', which you usually won't have to think about.

An intended side-effect of this change is there's now freedom to use actions how and where you like, multiple times, in the same bip. This is perfect for creating logical gates, performing calculations and transforming data. I have been literally squealing at how easy it is to build functional pipelines now. Dropping channels reduces the barrier to entry significantly, and we've been exploding here with new bip possibilities!

So Where Did They Go?

While Channels still exist under the hood, and this doesn't break any old bips that use them, they are now only necessary in very specific cases, which the User Interface now takes care of for you. All your old channels will still be available after this update, they've just been repackaged as 'Presets', which can be found by entering a node's Personalizations screen.

The way Presets work is they take what were previously configuration options for channels, and merge those configurations with personalization. This does a couple of important things

  • It means that you now have the flexibility to override an otherwise protected configuration option from within a bip itself. Take Tumblr (or any blog integration) for example. Previously you would need to create one channel for every permutation of URL and post status (draft/published/image/video etc etc), appropriately label those channels, and maintain a mental picture of where they all were in the system. Now you can save those permutations as presets, if and only if you want to, or otherwise override them for specific nodes in specific bips in ways which won't have unintended side effects.

  • It clarifies the architectural intent of Channels. Merging of channel configurations and imports already happened on the server side, but this was never clear to users or developers. Aligning the experience with the API expectation means there's fewer surprises in making the leap into development.

Additionally, you'll notice the Pods screen has been completely removed. We're still playing with this idea and it might be re-born as something else in the near future. For now however, it's been disabled. Everything that could be done in the Pods screen can now be done when configuring a Bip itself.

I haven't touched on how this is modeled in the API as that's more of a developer concern. For developers, you can find updated API documentation here, and templating examples here. In a nutshell, Snow templating uses JSONPath exclusively, with channel id's or action pointers (eg: 0e7ab3fc-692e-4875-b484-834620d1c654 or email.smtp_forward) usable interchangeably.

RPC's Overhaul

The RPC's tab has also been dropped, and every RPC available for a channel, action or event appears as its own tab under Personalizations. Additionally, RPC's are displayed inside their own tabs with a link available if you want to break it out into its own window. This means that Pods can start composing their own interactive experiences in the context of an active graph.

Actions Quick Search

The list of saved events and actions in the left sidebar has been emptied and will not show any results until you start searching. Only action and event names will appear now in these results, not the channels themselves. Once you select an action and drag it onto the canvas, you can get to the channel information under the Personalizations dialog, and selecting a Preset.

Search fields have also been added to the Action/Event select dialogs across the board, keyboard shortcutting and tab key awareness are a work in progress.

Native Functions

We've packaged up a handful of native system pods into something called Functions. Functions is a dropdown which you'll find on the bip editing canvas and consists of all actions from Flow Controls, Templating, Time, Math, Crypto, and a brand new Pod called Data Visualization.

You can find the full manifest of Functions in our knowledge base.

Data Visualization

Data Visualization is especially awesome because you now have the ability to track data as it travels through a bip, from raw or structured data to even displaying a chart over time. These logging and visualization functions are perfect for debugging. The actions are View Raw Data, View JSON and View Chart.

Like any other action, data visualizations can be linked to any other node in the bip, capturing and displaying whatever they receive. Once configured, double-click on the node and go to the functions appropriate RPC tab. The nodes will only show data they've received while your edit view is open.

Here's a quick video to show how to get it running. You'll also notice there's no channel or preset management involved, the full library of services is instantly and always available.

Or just install this yourself

Lots Of Love For Web Hooks

Web hooks are getting more and more use as you unlock the power of with your services and devices. We drove through some significant improvements that make integrating web hooks with your applications and devices a truly joyful affair.

Web Hook Parser

An ongoing frustration with Web Hooks is they never really knew what data they would receive, and therefore that data couldn't be transformed very easily between different actions. Parser accepts the expected JSON payload from a device or application, has understand its structure and then makes it available for any personalization. This can be found as a new tab which appears when configuring an Incoming Web Hook

For example :

Makes Unbabel callback attributes available for personalization :

Although this example is simple, the Parser supports fully formed structured JSON, nested documents and arrays etc. Any part of this complex structure can be extracted and personalized per node.


Coupled with the Parser feature, Testing (via the Outbox) has now become much more powerful and easy. When you test a Web Hook, the payload will be pre-filled with a sample payload based on your Parser example, as well as provide a cURL string for the endpoint, including authorization headers that can simply be copied and pasted into your console.

And That's Not All Of It!

Don't think that with so many big features to talk about, we've ignored the smaller stuff. You'll find tons of small tweaks and improvements across the system, and every Pod has also received a once-over. It's fantastic to be able to go back to support tickets with fresh solutions!

In other news, more support is incoming for developers and device integrators via Enterprise ShipIoT. Expect many more pods to appear in the coming months and sign up to ShipIoT to stay abreast of Internet Of Things integrations!

The feedback we've been receiving has been fantastic, please continue to share whatever's on your mind.