Improved Basics V2 components
We've completely overhauled Flows built-in UI components with new features, updated designs, and more flexibility. Meet Basics V2! The new components use new property types to give you more control over their appearance and behavior.
Buttons now support links and you can choose what happens when users click them. Modals have new size options and can be positioned anywhere on the screen. Tooltips and Hints are much nicer with the new styles. All components used in Tours now show a progress indicator so users know where they are and what’s left.
All examples and templates have been updated to use Basics V2. To get started, follow the migration guide.
You can see the new components in action in the Tour example, or explore them in the docs.
PS: More components are on the way!
Other improvements
- Added drag-and-drop reordering for properties in the component editor.
- Fixed an issue where the draft version of a workflow displayed an incorrect updated date.
Launchpad
Launchpad brings air traffic control to your workflows. Create groups to manage workflow priorities, set concurrency limits, and gain better control over how and when workflows run.
Launchpad groups make it easier to orchestrate the entire product adoption experience. Combined with workflow targeting, you can ensure that every workflow runs at the right time for the right users. For example, you can create a high-priority Launchpad group for workflows that should run immediately after a user action, while spacing out lower-priority workflows to avoid overwhelming users.
Learn more about Launchpad.
Other improvements
- Added a feature announcement example to the workflow examples library.
- Improved caching of the SDK workflow endpoint to reduce latency and improve performance.
- Made the Action property input inline for a smoother experience when configuring actions in the editor.
- Improved block connection interactions in the workflow canvas, allowing you to draw connections directly in the canvas.
Bug fixes
- Fixed Action property not working correctly when used inside a tour block.
- Fixed an issue where the SDK would not immediately hide a block when an Action property with exit node configuration was triggered.
Component libraries
When we released Flows 2.0, we introduced Block templates as a way to create custom UI components for workflows. The name turned out to be confusing, so we’ve simplified it to Components.
Along with the rename, we’re adding Component libraries – a new way to manage the built-in components that come with Flows. Libraries let us ship new components without cluttering your workspace or causing breaking changes.
If you don’t use our built-in components, you can hide the entire library to make it clear which components your team should use.
Learn more in our docs.
Block connection UX improvements
Connecting blocks in the editor is now faster and more intuitive. When you hover over a block with no connections, a plus icon appears, allowing you to quickly add and connect a new block.
You can also create and connect a new block directly from the exit nodes menu when selecting from existing blocks.
Other improvements
- Added Block activated data to analytics to help you better understand how blocks are being used in workflows.
Bug fixes
- Fixed an issue where workflows with a tour block as the final block would not be marked as finished after the tour completed.
Workflow analytics on block level
Analyze workflow performance and user interactions at the block level.
With block level analytics, you can now see detailed metrics for each block in your workflow. Use this data to identify drop-off points, optimize user journeys, and improve overall engagement.
The analytics dashboard provides insights such as:
- Entries: Number of users who entered a block
- Exits: Number of users who completed a block
- Tour steps: Funnel view of user progression through individual tour steps
Workflow editor improvements
The editor now feels closer to a design tool, with improved zoom interactions and support for dragging multiple blocks at once. Built on React Flow, this update improves navigation and organization for complex workflows while laying the foundation for future enhancements.
Other improvements
- Added “Copy as markdown” and “Open in LLMs” options on documentation pages for easier sharing and AI support.
Bug fixes
- Fixed an issue where, in rare cases, the React SDK could miss block updates during initial load.
Drag and drop array items
You can now reorder array items in the Flows editor using drag & drop. This makes it quick and intuitive to reorganize items without re-entering their details.
More options for tour wait property
The tour wait property now includes "Element is on the page" and "Element is not on the page" conditions. These give you finer control over when a tour step should continue, based on whether specific elements are present in the page. See the updated wait property documentation for details.
Fix tooltip animations
Fixed enter animations for built-in tooltips in @flows/react-components. Now they animate smoothly when appearing every time.
Other fixes
- Fixed a bug where SDKs were trying to access the document on the server.
- Fixed debug mode button styles.
Action property
Creating interactive buttons in Flows just got much simpler. Previously, you had to handle all logic yourself and juggle optional block properties. The new Action property consolidates everything you need for buttons into one property. It includes:
- A label for the element
- An action to run when clicked
- An optional URL to open (with the ability to open in a new tab)
Learn more in the Action property docs.
Array in array
We’ve also added support for arrays inside arrays, enabling more advanced and flexible components in your workflows. For example, you can now create a checklist with multiple items, each containing a dynamic number of buttons or links.
Learn more about arrays.
Other improvements
- Added disabled state to unsupported block properties in the custom component editor with explanations
Bug fixes
- Fixed an issue in React SDK where blocks sometimes didn't load when initializing the SDK
Tour trigger
Define exactly when a tour should start. Like when someone visits a specific page, clicks a button, or sees something on screen. This gives you more control and flexibility when building tours. Learn more about tour triggers.
Debug mode for SDK
Have you ever wanted to see what the SDK is doing under the hood? You can now enable debug mode to view which data is sent to Flows, what blocks are loaded, and which are currently active. It's a helpful way to troubleshoot or test your workflows. Learn more about debug mode.
Other improvements
- Migrated from BetterStack to self hosted Grafana LGTM stack to better control the flow of data and improve our monitoring capabilities.
Bug fixes
- Fixed an issue where location targeting in the JS SDK didn’t handle search parameters correctly.
Onboarding hub powered by block state
You can now use the new block state property to read the state of other blocks and create workflows that respond to user progress. This opens up the possibility to build onboarding hubs with sidebar widgets showing each user's tasks, progress, and more.
Check out the live example or dive into the documentation to learn more about how to use block state.
Other improvements
- Added starts with, not starts with, ends with, and not ends with operators to page targeting
- Added restart all users migration option to the publish modal. See our blog post for a real-world example.
Bug fixes
- Fixed an issue where workflow analytics missed some events if the "started" event wasn't within the selected time range.
Localization
Does your product support multiple languages? With localization, you can now translate all user-facing content, whether it's a string, boolean, number, or select.
Read the announcement post for more details.
Other improvements
- Added search by ID and filtering by environment and MTU status to the users table
- Added pagination to the users event log for faster loading when there are many events
- User log event timestamp now shows the timezone
- Added thousands separator to numbers in a few places for better readability
SDK improvements
- Added localization support to the SDK (1.10.0)
Bug fixes
- Fixed a bug where blocks sometimes didn't show up during initialization (1.10.2)
Speeding up
The past two weeks have been focused on preparing the Flows platform for the future. We have made a bunch of improvements to the infrastructure to ensure everything runs smoothly as we release new features and scale up.
Block properties refactor
In preparation for workflow localization we have refactored how block properties are stored and accessed. Everything works the same as before, but now we have a more flexible system that allows us to add new properties and features in the future without complicating the codebase.
A nice bonus: autosave is now more reliable, thanks to handling updates at the individual property level rather than the entire block.
Optimized API
Another (more visible) change is to the API that serves block data to your users. We have optimized the queries and the way data is fetched, which should result in faster response times where it matters most.
Your users should notice snappier loading when initializing or requesting a block, making the overall experience smoother.
Database infrastructure migration
To support the growing scale of Flows, we’ve migrated our database infrastructure. The new setup is more robust and scalable, allowing us to handle more users and data without compromising performance.
Hint component
Meet the newest addition to our built-in components: the Hint component. Hints are a great way to subtly call attention to specific elements on your page, they allow you to provide contextual information that users can engage with at their own pace.
To start using it in your workflows, choose either the Default Hint or Default Tour Hint component when adding blocks. For full details, head over to the documentation.
Redesigned website
We've given our website a fresh coat of paint! Check out the new design at flows.sh and let us know what you think. We hope you like it as much as we do.
Other improvements
- Added a new workflow example: Product Hunt launch
SDK improvements
- The Flows JS SDK can now be loaded via CDN — making it easier to integrate Flows without needing a build step. See the template for more info.
Bug fixes
- Fixed an issue where the version picker could overflow when displaying too many versions.
- Improved the usage widget’s loading state to avoid showing 0 users while data is still loading.
Better pricing
In the spirit of fairness, we are changing our pricing model to match the actual value you get from Flows. Instead of charging for every user you send us, we now only charge for users who actually experience your workflows. This means if you have a large user base but only a portion see workflows, you’ll pay less.
Pricing changes
We’re adjusting the free plan limit to 250 monthly tracked users (MTU). This change applies to all organizations on the free plan.
For paid plans, the free unit amount is also reduced to 250 MTU, but unit prices remain unchanged. This update applies only to new customers. Existing customers will keep their current free unit amount and unit prices as long as they remain on the same plan. If you cancel your plan, future subscriptions will use the pricing at the time of resubscription.
See our pricing page for full details.
Other improvements
- Invoices now show the MTU usage alongside the total amount.
Block activated event
We’ve introduced a new “block activated” event, which is triggered whenever a component block is rendered in your product. This gives you better insight into how users engage with workflows and enables more accurate, usage-based pricing. Instead of counting every user you send to us, we will be able to measure actual workflow usage. These pricing changes will be rolled out in the coming weeks.
SDK improvements
- The userId is now optional in the React SDK, removing the need to create special logic when fetching it asynchronously. Learn more in the docs.
- Enabled response compression for SDK endpoints, reducing data transfer and improving load times.
Other improvements
- Improved billing page to be more transparent
Bug fixes
- Fixed an issue where free organizations incorrectly triggered usage alerts when their usage reset at the start of the month.
Floating checklist
Checklists are a great way to nudge users to take actions in your app. With our new Floating Checklist example you can add one into your product in minutes. The UI is fully customizable to fit your brand and like all our examples it comes with full source code. See it in action.
Flows 1.0 shutdown
As of March 31, 2025, Flows 1.0 has officially been shut down, marking the end of an important chapter. We are grateful to all our early users who helped shape the product. Flows 2.0 is a complete rewrite of the product and we are excited to continue building the future of product adoption with you.
Improved design of built-in Tooltip and Modal
Our built-in Tooltip and Modal components have been refreshed with a more polished design. The new design includes transition animations that make the components feel more fluid and responsive. Update your SDKs to enjoy these improvements, but watch out for possible breaking changes in CSS.
Other improvements
- Added an indicator to the user detail page to show if the user counts toward MTUs for the current billing period
- Added recent workflows widget to the Home page
- Improved performance of custom component form when editing larger components
- Optimized periodic usage notifications to reduce backend load and response times
Bug fixes
- Fixed a bug where default values were not properly set for all block properties when adding a new block to a workflow
Manual start block
Manual start block allows you to start a workflow manually from the SDK by calling startWorkflow function. Learn more in docs.
Set state memory from SDK
You can now set the state memory value from the SDK by calling setValue function in the active block. We've also added more information about the memory configuration to the block properties. Learn more in docs.
Other improvements
- Workflow environments dialog now shows the frequency next to the active version.
SDK improvements
- Added workflow ID to active block response.
- Sped up exit node execution - now it doesn't wait for network requests to finish.
Bug fixes
- Fixed a bug where the workflow editor could save a broken page targeting condition, resulting in the block never showing.
- Every block property now shows its description in the editor.
- Fixed a bug where the tooltip sometimes didn't render in the right place when showing on animated elements.
- Fixed modal overlay z-index sometimes not overlaying all elements.
Block key
Block key allows you to define a persistent, unique identifier for a block, making it easier to reference in your code. Learn more in the docs.
Better tables
Workflow, User, and Block tables now display more detailed information. You can track workflow statuses, the number of active workflows for a user, and the last updated date for custom components among other things.
We've also improved the pagination in the Users table, now even with a lot of users, you can easily navigate through them.
Tour wait delay
Setup a delay between tour steps to give users time to process content or wait for elements to load. Learn more in the docs.
SDK improvements
- Added resetWorkflowProgress and resetAllWorkflowsProgress functions to the JS and React SDKs.
- Added useCurrentFloatingBlocks and useCurrentSlotBlocks hooks in the React SDK. Use them to track active blocks and trigger actions in your product.
- Fixed an issue where the tooltip rendered even when the target element didn't exist on the page.
Other improvements
- Paths with identical origins and destinations are now grouped in the workflow editor, preventing overlapping exit node labels.
- Added equals and not equals operators to page targeting.
- Tour steps can now be reordered with drag-and-drop.
- Added unique key validation for component properties and exit nodes.
Bug fixes
- Fixed an issue where the Environments dialog sometimes failed to load fully.
- The workflow updated at column now displays the correct date.
- Improved performance when publishing a new workflow with a lot of users.
State memory and block trigger properties
These new block properties finally enable building onboarding checklists and hubs.
State memory property
Use a boolean value stored in the block’s state to keep track of user progress. This lets you mark whether someone has finished a certain task or seen a particular message. State memory is perfect for onboarding flows or checklists where you need to remember the user’s progress.
Block trigger property
With the block trigger property, you can launch one block directly from another without exiting the current block. This is useful for starting a tour or opening a modal from an onboarding checklist or hub.
SDK improvements
- Added a template for using the Flows JS SDK in Angular applications. Check out the Angular template in the Flows SDK repository.
Bug fixes
- When adding a wait step to a tour, the add popup now closes right after the step is added
- Workflows no longer display to active users once the workflow live status is turned off
Array block property and improved docs
Create checklists or collections of useful links with the Array block property.
With arrays, you define a fixed structure that every item in your list follows. This is ideal for dynamic lists where each entry has consistent attributes like a title and a URL. To learn more about setting up and using the Array block property in your workflows, visit our array block property documentation.
This block property brings us one step closer to supporting onboarding checklists and hubs.
Improved documentation
After the dust settled from the Flows 2.0 release, we took a step back to improve our documentation. We've restructured the content to make it easier to navigate and added more step by step guides to help you get started with Flows.
We also took the opportunity to switch from Nextra to Fumadocs, a more flexible and feature-rich documentation framework. This change will allow us to create better documentation that also looks great.
Other improvements
- Added reset password functionality
- Adding blocks to the workflow is now faster
- When adding a new block, they will no longer hide an existing block
- String input in blocks now overflows to multiple lines, making it easier to edit long strings
- Improved how the number property input behaves when entering negative values
Bug fixes
- Fixed an issue where duplicate paths could sometimes be created when connecting blocks.
JavaScript SDK and Workflow Examples
To make Flows 2.0 more accessible to a wider range of developers, we have introduced a JavaScript SDK. This new SDK offers functionality similar to the React SDK but is designed to be framework-agnostic, allowing it to integrate with any JavaScript application.
To see how it works, check out our Nuxt template, which demonstrates how the JavaScript SDK can replicate the functionality of the React SDK example. For additional details, refer to the JavaScript SDK documentation.
Workflow Examples
Saying "you can build anything with Flows" is one thing, but showing it is another. That’s why we’ve released an examples library showcasing various workflows built with Flows.
The examples are open-source and can be used as a starting point for your own workflows. We will be adding more examples in the future, so stay tuned.
Other improvements
- The right sidebar in the workflow editor is now resizable, enhancing the editing experience
- Workflow validation now checks for slottable blocks missing a slot ID
- The React SDK has improved test coverage
- Websocket event handling in the React SDK has been optimized
Bug fixes
- Removed extra bottom spacing when no footer buttons are present in built-in components
Getting started guide and workflow validation
To make it easier for new users to get started with Flows, we've added a getting started guide that will walk you through the basic setup of Flows and creating your first workflow. The guide is powered by Flows and will be shown to everyone on their newly added Home page. We are planning to add more content to the Home page in the future, so stay tuned for more updates.
Workflow validation
We've added basic workflow validation when publishing a new version of a workflow. Now you get warned when publishing a workflow without a start block or with a block that is not connected to anything. This should help you catch some common mistakes before they happen.
Bug fixes
- Fixed a bug where when a step in a tour block was deleted out of sequence, no new steps could be added
- Fixed a few text overflow issues throughout the app
- Fixed a bug where clicking on sidebar links right after logging in would result in a broken state
Post–Flows 2.0 release cleanup
This release is all about cleaning up and fixing bugs after the Flows 2.0 release.
- Tour-specific blocks now display built-in exit nodes when creating a tour component.
- Added validation to environment key to make creating valid keys easier
- Workflow auto-save now retains focus on the field you’re typing in, so you don’t lose your place
Bug fixes
- Resolved an issue where the checkout link pointed to the wrong subscription plan
- Various small fixes and improvements following the Flows 2.0 release
Flows 2.0
We're thrilled to announce the launch of Flows 2.0! This release marks a significant step forward for us, and we can't wait to see what you'll create with it.
What's new
We've completely rebuilt Flows, transforming it from a basic onboarding tool into a powerful platform for crafting fully custom in-app experiences. Here are the key features:
- Workflow: Create complex, multi-step experiences that span multiple sessions or even the entire user lifecycle.
- Tour: Step-by-step guides that lead users through processes.
- Custom UI components: Build and integrate your own UI components within Flows.
- Slottable components: Dynamically embed components into your application.
Read the full announcement on our blog.
How to migrate
Unfortunately, existing Flows cannot be automatically migrated to the new version. However, we’ve prepared a migration guide in our documentation to help you transition to Flows 2.0. If you have any questions or need assistance, our team is here to support you.
The old version of Flows will be shut down on March 31, 2025. Please ensure your Flows are migrated before this date. To ease the transition, Flows 1.0 usage will be free for everyone during this period.
PS: We've removed most of the old changelog entries, as they are not relevant after this release. You can still find them in the public GitHub repository.
New branding
To better reflect our mission and values, we've updated our branding. We wanted to reflect that Flows is a tool for builders to create anything they can imagine. We are excited to share this new look with you!
Beta Launch 🚀
Today is the day... We're finally launching our Beta for Flows! This has been in the works for the past 6 months, and we appreciate all the support and feedback you've provided while we've been building. ❤️
The beta is open to anyone, so go ahead and sign up!
We need feedback! Please ping us in the app and let us know what you liked and what we could improve.
Again, thanks for being part of this journey. It really means the world to us to have you onboard.
Hello World 👋
We are starting on the journey of creating Flows - the next generation tool for creating onboarding flows and product tours. Read about our mission and the principles we use to build Flows in our first blog post.