Minimap

The minimap renders a scaled-down overview of the entire diagram in a corner of the canvas. A viewport indicator rectangle shows which portion of the diagram is currently visible.

Enabling

Enable the minimap with the minimap prop on <x-flow>:

<x-flow :nodes="$nodes" :edges="$edges" :minimap="true">
    <x-slot:node>
        <x-flow-handle type="target" position="top" />
        <span x-text="node.data.label"></span>
        <x-flow-handle type="source" position="bottom" />
    </x-slot:node>
</x-flow>
INTERACTIVE
<div x-data="flowCanvas({
    nodes: [
        { id: 'a', position: { x: 0, y: 0 }, data: { label: 'Start' } },
        { id: 'b', position: { x: 250, y: 0 }, data: { label: 'Process' } },
        { id: 'c', position: { x: 500, y: 0 }, data: { label: 'End' } },
    ],
    edges: [
        { id: 'e1', source: 'a', target: 'b' },
        { id: 'e2', source: 'b', target: 'c' },
    ],
    background: 'dots',
    minimap: true,
    minimapPannable: true,
    fitViewOnInit: true,
    controls: false,
    pannable: false,
    zoomable: false,
})" class="flow-container" style="height: 250px;">
    <div x-flow-viewport>
        <template x-for="node in nodes" :key="node.id">
            <div x-flow-node="node">
                <div x-flow-handle:target></div>
                <span x-text="node.data.label"></span>
                <div x-flow-handle:source></div>
            </div>
        </template>
    </div>
</div>

Position

Control placement via :config:

<x-flow :nodes="$nodes" :edges="$edges" :minimap="true" :config="[
    'minimapPosition' => 'bottom-right',
]">
    <x-slot:node>
        <x-flow-handle type="target" position="top" />
        <span x-text="node.data.label"></span>
        <x-flow-handle type="source" position="bottom" />
    </x-slot:node>
</x-flow>

Supported positions: 'top-left', 'top-right', 'bottom-left', 'bottom-right' (default).

Interaction

The minimap supports panning and zooming interactions, both disabled by default:

<x-flow :nodes="$nodes" :edges="$edges" :minimap="true" :config="[
    'minimapPannable' => true,
    'minimapZoomable' => true,
]">
    <x-slot:node>
        <x-flow-handle type="target" position="top" />
        <span x-text="node.data.label"></span>
        <x-flow-handle type="source" position="bottom" />
    </x-slot:node>
</x-flow>
Config key Type Default Description
minimapPannable bool false Click or drag on the minimap to pan the main viewport
minimapZoomable bool false Scroll over the minimap to zoom the main viewport

Size

The minimap has a fixed default size. Override it with minimapWidth / minimapHeight (pixels):

<x-flow :nodes="$nodes" :edges="$edges" :minimap="true" :config="[
    'minimapWidth' => 240,
    'minimapHeight' => 180,
]">
Config key Type Default Description
minimapWidth int 200 Minimap width in pixels
minimapHeight int 150 Minimap height in pixels

The size is written back into the canvas config, so it survives a save/restore and can be patched from the server like any other config value. Whenever it changes, a minimap-resize event fires with the new dimensions — handle onMinimapResize(int $width, int $height) on the server to persist it. A non-positive or unchanged size is a no-op.

Node colors

Use minimapNodeColor to control how nodes appear in the minimap. Pass a static color string:

<x-flow :nodes="$nodes" :edges="$edges" :minimap="true" :config="[
    'minimapNodeColor' => '#6366f1',
]">

For per-node colors based on type, use WireFlow::js():

use ArtisanFlow\WireFlow\View\Components\WireFlow;

public function render(): \Illuminate\Contracts\View\View
{
    return view('livewire.flow-editor', [
        'config' => [
            'minimapNodeColor' => WireFlow::js("(node) => {
                if (node.type === 'input') return '#22c55e';
                if (node.type === 'output') return '#ef4444';
                return '#6366f1';
            }"),
        ],
    ]);
}
<x-flow :nodes="$nodes" :edges="$edges" :minimap="true" :config="$config">

Viewport mask color

The minimapMaskColor option sets the color of the area outside the current viewport indicator:

<x-flow :nodes="$nodes" :edges="$edges" :minimap="true" :config="[
    'minimapMaskColor' => 'rgba(0, 0, 0, 0.15)',
]">

CSS variables

Fine-tune minimap appearance with CSS variables:

Variable Description
--flow-minimap-bg Minimap background color
--flow-minimap-border Border around the minimap panel
--flow-minimap-node-color Default node fill color
--flow-minimap-mask-color Viewport mask overlay color
--flow-minimap-border-radius Corner rounding of the minimap panel

See also