# Config
Vue Flow allows you to configure zoom, graph and flow behavior.
Configuration can be passed either as props to the `VueFlow` component or
as options to the `useVueFlow` composable.
```vue:no-line-numbers
```
```vue:no-line-numbers
```
## Updating Config
You can update the configuration at any point, either by having them bound as props or using the state values returned by `useVueFlow`.
```vue:no-line-numbers{2,5-6,10}
```
```vue:no-line-numbers{2,7-8}
```
## Basic Options
### id
- Type: `string`
- Details:
Unique id of Vue Flow.
It is used for the lookup and injection of the state instance.
### modelValue
- Type: [`Elements`](https://types.vueflow.dev/modules.html#Elements)
- Details:
An array of elements (nodes + edges).
Use either the modelValue prop or nodes/edges separately. __Do not mix them!__
- Example:
```vue:no-line-numbers
```
### nodes
- Type: [`Node[]`](https://types.vueflow.dev/interfaces/Node.html)
- Details:
An array of nodes.
Use either the modelValue prop or nodes separately. __Do not mix them!__
- Example:
```vue:no-line-numbers
```
### edges
- Type: [`Edge[]`](https://types.vueflow.dev/interfaces/Edge.html)
- Details:
An array of edges.
Use either the modelValue prop or edges separately. __Do not mix them!__
- Example:
```vue:no-line-numbers
```
### node-types
- Type: [`Record`](https://types.vueflow.dev/modules.html#NodeComponent)
- Default: [`DefaultNodeTypes`](https://types.vueflow.dev/modules.html#DefaultNodeTypes)
- Details:
An object mapping node-type names to component definitions/name.
- Example:
```vue:no-line-numbers
```
### edge-types
- Type: [`Record`](https://types.vueflow.dev/modules.html#EdgeComponent)
- Default: [`DefaultEdgeTypes`](https://types.vueflow.dev/modules.html#DefaultEdgeTypes)
- Details:
An object mapping edge-type names to component definitions/name.
- Example:
```vue:no-line-numbers
```
### apply-default
- Type: `boolean`
- Default: `true`
- Details:
Enable/disable default state update handlers.
If you want to have full control of state changes, you can disable the default behavior and apply your own change handlers to the state.
- Example:
```vue:no-line-numbers
```
### connection-mode
- Type: [`ConnectionMode`](https://types.vueflow.dev/enums/ConnectionMode.html)
- Default: `ConnectionMode.Loose`
- Details:
If set to `loose` all handles are treated as source handles (thus allowing for connections on target handles as well.)
### connection-line-type
- Type: [`ConnectionLineType`](https://types.vueflow.dev/enums/ConnectionLineType.html)
- Default: `ConnectionLineType.Bezier`
- Details:
The path to use when drawing a connection-line (`bezier`, `step`, `smoothstep`).
When using a custom connection line this prop does nothing.
### connection-line-style
- Type: `CSSProperties` | `null`
- Details:
Additional styles to add to the default connection-line.
### fit-view-on-init
- Type: `boolean`
- Default: `false`
- Details:
Trigger fit view when viewport is mounted.
## Viewport Options
### zoom-activation-key-code
- Type: `KeyCode`
- Default: `Meta`
- Details:
Define a key which can be used to activate zoom.
Overwrites zoom-on-scroll or pan-on-scroll behavior as long as the key is pressed.
### zoom-on-scroll
- Type: `boolean`
- Default: `true`
- Details:
Whether to allow zooming in and out when scrolling inside the Vue Flow container.
### zoom-on-pinch
- Type: `boolean`
- Default: `true`
- Details:
Whether to allow zooming in and out when pinching (touch or trackpad) inside the Vue Flow container.
### zoom-on-double-click
- Type: `boolean`
- Default: `true`
- Details:
Whether to allow zooming in and out when double-clicking (or tapping) inside the Vue Flow container.
### pan-on-scroll
- Type: `boolean`
- Default: `false`
- Details:
Whether to allow panning inside the Vue Flow container.
Does not work together with `zoom-on-scroll` but will work together with `zoom-activation-key-code`.
### pan-on-scroll-speed
- Type: `number`
- Default: `0.5`
### pan-on-scroll-mode
- Type: [`PanOnScrollMode`](https://types.vueflow.dev/enums/PanOnScrollMode.html)
- Default: `PanOnScrollMode.Free`
- Details:
Specify on which axis panning is allowed (x, y or both).
### pan-on-drag
- Old name: `paneMovable`
- Type: `boolean`
- Default: `true`
- Details:
Whether to allow moving the pane when dragging inside the Vue Flow container.
### prevent-scrolling
- Type: `boolean`
- Default: `true`
- Details:
Enable this to prevent vue flow from scrolling inside its container, i.e. allow for the page to scroll.
### no-wheel-class-name
- Type: `string`
- Default: `nowheel`
- Details:
Set a class name which prevents elements from triggering wheel-scroll events (thus disabling zoom/pan-scroll behavior on the element).
Useful if you want to allow for scrolling _inside_ a node
### no-pan-class-name
- Type: `string`
- Default: `nopan`
- Details:
Set a class name which prevents elements from triggering pan-scroll events.
### min-zoom
- Type: `number`
- Default: `0.5`
### max-zoom
- Type: `number`
- Default: `2`
### default-zoom
- Type: `number`
- Default: `1`
### default-position
- Type: `[x: number, y: number]`
- Default: `[0, 0]`
- Details:
Default viewport position on initial load.
### translate-extent
- Type: [`CoordinateExtent`](https://types.vueflow.dev/modules.html#CoordinateExtent)
- Default:
```ts:no-line-numbers
[
[Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY],
[Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY],
]
```
- Details:
The area in which the viewport can be moved around.
## Selection Options
### selection-key-code
- Type: `KeyCode`
- Default: `Shift`
- Details:
Define a key which can be used to activate the selection rect.
### multi-selection-key-code
- Type: `KeyCode`
- Default: `Meta`
- Details:
Define a key which can be used to activate multi-selection.
Multi-selection can be used to select multiple nodes with clicks.
### delete-key-code
- Type: `KeyCode`
- Default: `Backspace`
- Details:
Define a key which can be used to activate remove elements from the pane.
## Global Node Options
### nodes-draggable
- Type: `boolean`
- Default: `true`
- Details:
Globally enable/disable dragging nodes.
Can be overwritten by setting `draggable` on a specific node element.
- Example:
```vue:no-line-numbers{5-6,10}
```
### nodes-connectable
- Type: `boolean`
- Default: `true`
- Details:
Globally enable/disable connecting nodes.
Can be overwritten by setting `connectable` on a specific node element.
- Example:
```vue:no-line-numbers{5-6,10}
```
### nodes-extent
- Type: [`CoordinateExtent`](https://types.vueflow.dev/modules.html#CoordinateExtent)
- Default:
```ts:no-line-numbers
[
[Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY],
[Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY],
]
```
- Details:
The area in which nodes can be moved around.
Can be overwritten by setting `extent` on a specific node element.
- Example:
```vue:no-line-numbers{5-6}
```
### select-nodes-on-drag
- Type: `boolean`
- Default: `true`
### snap-to-grid
- Type: `boolean`
- Default: `false`
- Details:
If enabled, nodes will be placed and moved in a grid-like fashion.
### snap-grid
- Type: [`SnapGrid`](https://types.vueflow.dev/modules.html#SnapGrid)
- Default: `[15, 15]`
- Details:
If `snapToGrid` is enabled, nodes will be placed and moved in a grid-like fashion according to the `snapGrid` value.
## Global Edge Options
### edges-updatable
- Type: `boolean`
- Default: `true`
- Details:
Globally enable/disable updating edges.
Can be overwritten by setting `updatable` on a specific edge element.
- Example:
```vue:no-line-numbers{7-8,12}
```
### default-marker-color
- Type: `string`
- Default: `#b1b1b7`
- Details:
The default color value which is used when presenting edge-markers (arrowheads).
### edge-updater-radius
- Type: `number`
- Default: `10`
- Details:
The radius at which an edge-updater can be triggered.
### connect-on-click
- Type: `boolean`
- Default: `true`
- Details:
Allow edges to be created by clicking two handles in a row.
Useful if you want to enable creating edges on a touch device.
### default-edge-options
- Type: [`DefaultEdgeOptions`]()
- Details:
Default values when creating a new edge.
Does not work for the `addEdge` utility!
## Global Element Options
### only-render-visible-elements
- Type: `boolean`
- Default: `false`
- Details:
Skip rendering elements that are not visible currently (either hidden or outside the current pane dimensions).
### elements-selectable
- Type: `boolean`
- Default: `true`
- Details:
Enable/disable selecting elements. This will also disable pointer-events in general.