FirstflowWidget renders a step’s blocks in a floating shell. When you need different chrome your own panel, an inline embed, a modal render the blocks yourself with BlockRenderer and drive the run with useFirstflow. The runtime state, triggers, navigation, and persistence keep working; you only replace the container.
A custom shell
BlockRenderer reads the active node and renders its blocks, dispatching actions through the same runtime methods the default widget uses. Wrap it in any layout you like.
The block model
A step renders to blocks message, card, question, options, CTAs. Each interactive block (a CTA or an option) carries one or more actions that run on click:
A click can run an ordered list via
actions: [...]: non-terminal actions run in author order, and the single terminal action runs last so a button can send a prompt, then advance. Full reference in SCHEMA.md.
Dispatching actions yourself
If you render fully custom controls, call the runtime directly:executeAction, executeActions, advance, and minimize.
In the OSS, blocks live inside
@firstflow/runtime there is no separate
@firstflow/widget-kit package to install. Everything here is exported from
@firstflow/runtime.