Skip to main content

FlowEvents

All available events in Vue Flow.

Node Events

nodeClick
NodeMouseEvent
Fired when a node is clicked
nodeDoubleClick
NodeMouseEvent
Fired when a node is double clicked
nodeMouseEnter
NodeMouseEvent
Fired when mouse enters a node
nodeMouseMove
NodeMouseEvent
Fired when mouse moves over a node
nodeMouseLeave
NodeMouseEvent
Fired when mouse leaves a node
nodeContextMenu
NodeMouseEvent
Fired when right-clicking a node
nodeDragStart
NodeDragEvent
Fired when starting to drag a node
nodeDrag
NodeDragEvent
Fired while dragging a node
nodeDragStop
NodeDragEvent
Fired when stopping dragging a node
nodesInitialized
GraphNode[]
Fired when all nodes have been initialized with dimensions

Edge Events

edgeClick
EdgeMouseEvent
Fired when an edge is clicked
edgeDoubleClick
EdgeMouseEvent
Fired when an edge is double clicked
edgeMouseEnter
EdgeMouseEvent
Fired when mouse enters an edge
edgeMouseMove
EdgeMouseEvent
Fired when mouse moves over an edge
edgeMouseLeave
EdgeMouseEvent
Fired when mouse leaves an edge
edgeContextMenu
EdgeMouseEvent
Fired when right-clicking an edge
edgeUpdate
EdgeUpdateEvent
Fired when an edge is updated (reconnected)
edgeUpdateStart
EdgeMouseEvent
Fired when starting to update an edge
edgeUpdateEnd
EdgeMouseEvent
Fired when ending edge update

Connection Events

connect
Connection
Fired when a new connection is created
connectStart
{ event?: MouseEvent | TouchEvent } & OnConnectStartParams
Fired when starting to create a connection
connectEnd
MouseEvent | TouchEvent | undefined
Fired when ending connection attempt
clickConnectStart
{ event?: MouseEvent | TouchEvent } & OnConnectStartParams
Fired when starting click-based connection
clickConnectEnd
MouseEvent | TouchEvent | undefined
Fired when ending click-based connection

Viewport Events

move
{ event: D3ZoomEvent | WheelEvent; flowTransform: ViewportTransform }
Fired while moving the viewport
moveStart
{ event: D3ZoomEvent | WheelEvent; flowTransform: ViewportTransform }
Fired when starting to move the viewport
moveEnd
{ event: D3ZoomEvent | WheelEvent; flowTransform: ViewportTransform }
Fired when ending viewport movement
viewportChange
ViewportTransform
Fired when viewport changes
viewportChangeStart
ViewportTransform
Fired when starting viewport change
viewportChangeEnd
ViewportTransform
Fired when ending viewport change

Pane Events

paneClick
MouseEvent
Fired when clicking the pane
paneContextMenu
MouseEvent
Fired when right-clicking the pane
paneScroll
WheelEvent | undefined
Fired when scrolling on the pane
paneMouseEnter
PointerEvent
Fired when mouse enters the pane
paneMouseMove
PointerEvent
Fired when mouse moves over the pane
paneMouseLeave
PointerEvent
Fired when mouse leaves the pane

Selection Events

selectionStart
MouseEvent
Fired when starting selection
selectionEnd
MouseEvent
Fired when ending selection
selectionDragStart
NodeDragEvent
Fired when starting to drag selected nodes
selectionDrag
NodeDragEvent
Fired while dragging selected nodes
selectionDragStop
NodeDragEvent
Fired when stopping dragging selected nodes
selectionContextMenu
{ event: MouseEvent; nodes: GraphNode[] }
Fired when right-clicking selection

Minimap Events

miniMapNodeClick
NodeMouseEvent
Fired when clicking a node on the minimap
miniMapNodeDoubleClick
NodeMouseEvent
Fired when double clicking a node on the minimap
miniMapNodeMouseEnter
NodeMouseEvent
Fired when mouse enters a node on the minimap
miniMapNodeMouseMove
NodeMouseEvent
Fired when mouse moves over a node on the minimap
miniMapNodeMouseLeave
NodeMouseEvent
Fired when mouse leaves a node on the minimap

Change Events

nodesChange
NodeChange[]
Fired when nodes change (add, remove, position, etc.)
edgesChange
EdgeChange[]
Fired when edges change (add, remove, select, etc.)

Lifecycle Events

init
VueFlowStore
Fired when Vue Flow is initialized
paneReady
VueFlowStore
Deprecated - use init instead
Fired when the pane is ready
updateNodeInternals
string[]
Fired when node internals are updated
error
VueFlowError
Fired when an error occurs

Event Object Types

NodeMouseEvent

Mouse event on a node.
interface NodeMouseEvent {
  event: MouseTouchEvent
  node: GraphNode
}
event
MouseEvent | TouchEvent
required
The native mouse or touch event
node
GraphNode
required
The node that was interacted with

NodeDragEvent

Drag event on node(s).
interface NodeDragEvent {
  event: MouseTouchEvent
  node: GraphNode
  nodes: GraphNode[]
}
event
MouseEvent | TouchEvent
required
The native mouse or touch event
node
GraphNode
required
The primary node being dragged
nodes
GraphNode[]
required
All nodes being dragged (including multi-selection)

EdgeMouseEvent

Mouse event on an edge.
interface EdgeMouseEvent {
  event: MouseTouchEvent
  edge: GraphEdge
}
event
MouseEvent | TouchEvent
required
The native mouse or touch event
edge
GraphEdge
required
The edge that was interacted with

EdgeUpdateEvent

Event when an edge is updated (reconnected).
interface EdgeUpdateEvent {
  event: MouseTouchEvent
  edge: GraphEdge
  connection: Connection
}
event
MouseEvent | TouchEvent
required
The native mouse or touch event
edge
GraphEdge
required
The edge being updated
connection
Connection
required
The new connection parameters

Event Handlers

NodeEventsHandler

Event handlers available on nodes.
type NodeEventsHandler<CustomEvents = object> = {
  doubleClick: (event: NodeMouseEvent) => void | { off: () => void }
  click: (event: NodeMouseEvent) => void | { off: () => void }
  mouseEnter: (event: NodeMouseEvent) => void | { off: () => void }
  mouseMove: (event: NodeMouseEvent) => void | { off: () => void }
  mouseLeave: (event: NodeMouseEvent) => void | { off: () => void }
  contextMenu: (event: NodeMouseEvent) => void | { off: () => void }
  dragStart: (event: NodeDragEvent) => void | { off: () => void }
  drag: (event: NodeDragEvent) => void | { off: () => void }
  dragStop: (event: NodeDragEvent) => void | { off: () => void }
} & CustomEventHandlers<CustomEvents>

EdgeEventsHandler

Event handlers available on edges.
type EdgeEventsHandler<CustomEvents = object> = {
  doubleClick: (event: EdgeMouseEvent) => void | { off: () => void }
  click: (event: EdgeMouseEvent) => void | { off: () => void }
  mouseEnter: (event: EdgeMouseEvent) => void | { off: () => void }
  mouseMove: (event: EdgeMouseEvent) => void | { off: () => void }
  mouseLeave: (event: EdgeMouseEvent) => void | { off: () => void }
  contextMenu: (event: EdgeMouseEvent) => void | { off: () => void }
  updateStart: (event: EdgeMouseEvent) => void | { off: () => void }
  update: (event: EdgeUpdateEvent) => void | { off: () => void }
  updateEnd: (event: EdgeMouseEvent) => void | { off: () => void }
} & CustomEventHandlers<CustomEvents>

Custom Events

Define custom events for your nodes and edges.
type CustomEvent<Args extends any[] = any[], Return = any> = 
  (...args: Args) => Return

Example

import type { Node, CustomEvent } from '@vue-flow/core'

interface MyCustomEvents {
  expand: CustomEvent<[expanded: boolean], void>
  delete: CustomEvent<[], void>
}

type MyNode = Node<MyData, MyCustomEvents>

const node: MyNode = {
  id: '1',
  position: { x: 0, y: 0 },
  data: { label: 'Custom Node' },
  events: {
    expand: (expanded) => {
      console.log('Expanded:', expanded)
    },
    delete: () => {
      console.log('Delete node')
    }
  }
}

FlowHooks

Hook interfaces for all Flow events.
type FlowHooks = Readonly<{
  [key in keyof FlowEvents]: EventHookExtended<FlowEvents[key]>
}>

Example Usage

import { useVueFlow } from '@vue-flow/core'

const { hooks } = useVueFlow()

// Listen to node click events
hooks.value.nodeClick.on(({ node, event }) => {
  console.log('Node clicked:', node.id)
})

// Listen to connection events
hooks.value.connect.on((connection) => {
  console.log('Connected:', connection)
})

FlowHooksOn

Convenience type with on prefix for event handlers.
type FlowHooksOn = Readonly<{
  [key in keyof FlowEvents as `on${Capitalize<key>}`]: 
    EventHookOn<FlowEvents[key]>
}>

Example

import { useVueFlow } from '@vue-flow/core'

const { onNodeClick, onConnect } = useVueFlow()

onNodeClick(({ node }) => {
  console.log('Clicked:', node.id)
})

onConnect((connection) => {
  console.log('Connected:', connection)
})

Build docs developers (and LLMs) love