Official Electron support

Userflow now officially supports Electron apps. Electron is a way to build cross platform desktop apps with JavaScript, HTML, and CSS.

Since it’s just HTML/JS like in regular browser apps, Userflow works perfectly for Electron apps. The only thing that was missing, was the ability to preview flows in draft mode and use the element selector tool.

The only requirement is to use userflow-electron instead of userflow.js when installing Userflow.js.

When previewing flows, there’s a new App type dropdown. It defaults to Browser app , which lets you enter the URL of an app running in a browser. Switch to Electron app to preview in an app running locally on your own machine.

Electron app type

It just works!

Here’s a real-life example of the design documentation tool, ION , using Userflow in their Electron app:

ION modal

ION tooltip

Background color and Standard Dark theme

Light layers on top of very light UIs can sometimes be hard to see. You can now customize the background color of your flows.

We’ve also added a new standard theme, Standard Dark .

Some inspiration:

Background color themes

Navigate to page actions

We’ve added a new kind of action that you can add to buttons, triggers, tooltips and checklist tasks: Navigate to page

With it, you can make Userflow navigate the user to a specific page in your app, e.g. when a button or checklist task is clicked.

Just click the block you want to add the action to, click Add action , click Navigate to page , and enter the URL you want to navigate the user to. The URL field even supports user attributes.

Navigate to page action

By default, a full page load to the given URL will be made. You can override this behavior in your Userflow.js installation using userflow.setCustomNavigate() to e.g. do in-app navigation ins

Checklists

You can now build Checklists in Userflow!

Checklists work great as the anchor of new users’ onboarding experience. If a user leaves your onboarding guide, they always have a chance to get back - or to pick other tours - using the checklist. Giving users a sense of progress also gives them a sense of fulfillment, which they’ll hopefully chase and get even more involved with your product.

How to build checklists

Checklists are created just like regular (step-based) flows, using the New flow button in Userflow. Just pick the new Checklist type here. Checklists work in general a lot like regular flows, in that they can have auto-start conditions, are published and show up in your app through Userflow.js (no extra installation required).

Checklist builder

Checklists contain text (rich content) at the top.

There’s a progress bar, which is automatically updated as users complete tasks.

You can add as many tasks as you want. Each task has a name, an optional subtitle, a completed condition and one or more actions. Example: Completed condition could be when users have created their first project in your app, and the action could be to start a tour showing the user how to do so.

What users see

Once a checklist is triggered for a user, it appears in the lower right corner (by default).

Example checklist

When a task is clicked, it’s actions, such as starting a tour or navigating to a page, are performed.

If the user minimizes it, a launcher button (saying “Get started”) appears in the same corner, containing a circle with a number representing the number of tasks left to do.

When the user completes a task, the checklist is automatically shown and its checkmark is checked with a cool animation.

Bonus: New flow condition

To mark tasks as completed when users have seen or completed a flow, we’ve added a new condition type:

Flow condition

New Flow Builder

This is an update I’ve been excited about for a while… A brand new Flow Builder!

The new Flow Builder is much more visual. It will feel familiar to existing users, and more welcoming and intuitive to new users. Here are the highlights.

Horizontal UI

Steps are now laid out horizontally. You scroll horizontally to get to them. It feels more like a storyboard.

I think it’s nice that all the content is at the same horizontal line of sight. It makes it easier to scan through. For most flows, it’s also a more optimized use of space.

Horizontal UI

Blocks that have actions (buttons, tooltips and triggers) now have a little light-blue outgoing port to the right of them. Steps have an incoming port in their top left. Arrows are drawn between blocks and steps that are linked. This provides a visual overview of how steps are tied together.

You can link from a block to a step simply by clicking the outgoing port and then clicking the step you want it to go to. You can also click the “+ Add step” on the far right to add a new step and link to it in one go. You can click an existing link’s outgoing port to edit it. Press Delete/Backspace to remove it. Cmd + click on an outgoing port to scroll the target step into view (it’ll flash yellow, too).

Step links

Fidelity

Steps are now displayed almost exactly as they’ll look in the user’s browser. Same size and full theming. Here’s an example from Roger with their custom font, colors and avatar:

Fidelity

Side panel

Contextual options for blocks/steps (e.g. if you click a button) now open in a panel sliding in from the right. I think this is better than the popover that appeared in the middle of the screen before for 2 reasons: 1) It doesn’t block other content (e.g. the other blocks around it). 2) No vertical scroll necessary to make the popover fit into the viewport.

Side panel

I hope you’ll like the new Flow Builder! 😀

Rich content editor

Userflow just got an awesome rich content editor. When you focus a step’s content in the Flow builder, you’ll see this (notice the new toolbar):

Empty editor

We’ve put a lot of work into making it incredibly smooth to use. It’s custom-built on top of something called Slate.js, which means it’s not like a regular boring WYSIWYG editor that seems out of place. It uses proper Userflow components, supports user attributes, and allows for much more advanced and customized content in the future.

Attributes

Before, user attributes could be inserted by putting a variable name in curly brackets, e.g. {{name}} . Not very user-friendly. Now it’s as simple as clicking “Insert user attribute”. You can still use the {{name}} - or just {name} - syntax, which will automatically be replaced with an attribute. This way, we also validate that the attribute actually exists. Finally, attributes now support fallback values, which will be displayed if the attribute is missing for a user.

Attributes

Links can be inserted by selecting some text and then clicking the “Insert link” button or pressing Cmd + K (on Mac, use Ctrl + K on other platforms). The URL field is even a “rich” content editor itself supporting variables!

Links

Images

Images can be uploaded directly into Userflow, or you can enter a URL where an existing image is stored.

The width of the image can be specified in a percentage of the flow width or an exact number of pixels. Height is automatically calculated to keep the same proportions.

Images can also be links. Just select the image and click the “Insert link” button (or press Cmd + K).

Images

Videos

You can also embed videos from popular video providers. We currently support YouTube, Vimeo or Wistia. Let us know if your favorite provider is missing, and we’ll add it!

Video sizing can be managed just like with images.

Basic text formatting

You can, of course, still use bold and italic text. We’ve also added text-align controls (left, center, right). We’re planning to add more formatting options soon, such as block styles (Normal text, Heading 1, Heading 2), text color, code blocks and more.

User-fills-in-input conditions

One pattern that’s been a little cumbersome in Userflow has been to perform an action - such as go to next step - when the user is done filling in an input field.

Before, you could make a condition such as if Name input has any value . The problem here is that this condition becomes true immediately as the user types the first character. But, it’s usually not appropriate to continue to the next step until the user is done typing.

This is where the new User fills in input condition type fits perfectly. It only becomes true once 1 second has passed without the user typing any more characters. This 1 second is reset with every keystroke, giving the user a natural feeling when being sent to the next step.

Here’s a demo of how it works:

User fills in input demo

Ignore element text

It’s now easier to select elements containing dynamic text (e.g. user-chosen names) in your web app.

In the example below, we’re trying to select the first row in the table, which contains a dynamic project name. Our flow should not depend on the exact name since it will be different for other users. Notice in the lower-left corner how Userflow, by default, picks the name of the project:

With text

If instead, we click the Settings (cog) icon, check “Ignore element text” and point to the element again, then we get this:

Without text

Now Userflow discards the element’s text and uses the best CSS selector it can find for it.

User and session management

You can now view details about users’ flow sessions in Userflow. A session means a specific user viewing a specific flow.

If you click a session row on the view-user or flow-overview pages, you can see all its details:

View session

You can dig into why/when the flow was started, why/when it ended, exactly which steps the user saw and how long time it took them.

You can now also delete individual sessions - or a whole user (including all their sessions) - using the new “User options” and “Session options” three-dot buttons on the view-user and view-session pages respectively. This is great for testing , as you can test flows’ auto-start conditions over and over with the same user. You can also delete a user’s complete history to comply with GDPR.

Custom inputs in conditions

Many apps use custom input fields such as combo boxes, date fields or type-ahead fields.

combobox

Userflow has a nifty condition type, Text input value , which can read the value of a text input and compare it to some value you define. Such a condition could, for example, advance the user to the next step.

Text input value condition

Until now, dealing with the value of custom input fields was a pain though. They simply didn’t work with +Text input value_ conditions. Now they do work!

It just takes a single line of configuration in your app (have your developers do this). With the new userflow.registerCustomInput() method, you can tell Userflow to treat your custom inputs as regular text inputs. Userflow will then read the text content of matching elements. Example:

userflow.registerCustomInput('.my-combobox-value')

Demo:

custom input demo

Let me know if you’d like help setting this up in your app!