Plugins 〉FlowX


Developer

Anıl Hut

Sign up to receive occasional product news and updates:



Panel
community

FlowX

  • Overview
  • Installation
  • Change log
  • Related content

FlowX

Grafana Downloads Grafana Plugin Version GitHub Stars GitHub Issues Support on Gumroad LinkedIn

The FlowX Grafana panel enables the rendering of interactive flowcharts derived from directed graph data, consisting of nodes and edges. FlowX supports a variety of node types, each designed for specific use cases. Grafana provides a Node Graph panel for visualizing directed graph data, but its visualization capabilities are quite limited. To address the need for more advanced and rich visualizations of directed graphs, this panel has been developed. It leverages ReactFlow and DagreJS to deliver enhanced visualization features.

Demo

FlowX Overview

Layout Direction

Collapse & Expand

Requirements

FlowX VersionMinimum Grafana Version
2.0.0+11.6.11
1.0.3 and below10.1.0

Note: FlowX 2.0.0+ requires Grafana 11.6.11 or higher due to React 19 compatibility changes introduced in Grafana 13. If you are running Grafana 10.x, please use FlowX version 1.0.3.

Installation

Installing plugin on Grafana Cloud / Local Grafana - https://grafana.com/docs/grafana/latest/plugins/installation/

Configuration

To use the FlowX panel, 2 different queries called "Node" and "Edge" must be added. The "Node" query is for determining the boxes, circles and diamonds we will draw. The "Edge" query is for determining the relationship between the nodes we draw. The expected columns in Node and Edge queries are as shared below. All data to come to the columns are optional (yes, including IDs, if an empty row comes, an empty node with no relationship will be drawn.) The expected data type is string for all columns.

Node

The following table describes expected columns of the Node query:

ColumnsSupported ValuesDescription
idUnique identifier of the Node. Each Node to be drawn must have a unique ID. These ID's will be used in the Source or Target fields in the "Edge" query.
typetitle one two three four five six circle diamondDetermines the type of Node. The Node is drawn according to this data. However, if the popup is active, all values will appear there. Default: four
titleTitle of the Node.
value1_headerThe header that will come for the first value of the node.
value1_dataThe data that will come for the first value of the node.
value1_urlThe URL that will come for the first value of the node. "Show Popup" must be on to use.
value2_headerThe header that will come for the second value of the node.
value2_dataThe data that will come for the second value of the node.
value2_urlThe URL that will come for the second value of the node. "Show Popup" must be on to use.
value3_headerThe header that will come for the third value of the node.
value3_dataThe data that will come for the third value of the node.
value3_urlThe URL that will come for the third value of the node. "Show Popup" must be on to use.
value4_headerThe header that will come for the fourth value of the node.
value4_dataThe data that will come for the fourth value of the node.
value4_urlThe URL that will come for the fourth value of the node. "Show Popup" must be on to use.
value5_headerThe header that will come for the fifth value of the node.
value5_dataThe data that will come for the fifth value of the node.
value5_urlThe URL that will come for the fifth value of the node. "Show Popup" must be on to use.
value6_headerThe header that will come for the sixth value of the node.
value6_dataThe data that will come for the sixth value of the node.
value6_urlThe URL that will come for the sixth value of the node. "Show Popup" must be on to use.
color_conditionred red_blink orange orange_blink yellow yellow_blink green green_blink blue blue_blink gray gray_blinkField that determines the background color of the node. Blink ones flash. Default: null
urlField that can be used for the node's own URL. "Show Popup" must be on to use.
url_labelThe label that will replace the node's own URL.

Edge

The following table describes expected columns of the Edge query:

ColumnsDescription
idUnique identifier of the Edge. Each Edge to be drawn must have a unique ID.
sourceSource Node ID
targetTarget Node ID

Supported Types of Node

typeDescription
nullDefault, node type will be set as four.
titleNode showing only title column.
oneNode showing title, value1_header, value1_data.
twoNode showing title, value1_header, value1_data, value2_header, value2_data.
threeNode showing title and value rows 1–3.
fourNode showing title and value rows 1–4.
fiveNode showing title and value rows 1–5.
sixNode showing title and value rows 1–6.
circleA node with circle shape that does not display value columns on the node itself.
diamondA node with diamond shape that does not display value columns on the node itself.

If "Show Popup" is enabled, all fields (title, values 1–6, URL) are shown in the popup regardless of node type.


Supported Colors of Node

color_conditionDescription
nullDefault, paints the background white.
redPaints the background #f2495c.
red_blinkBlinks between #f2495c and white.
orangePaints the background #ff9830.
orange_blinkBlinks between #ff9830 and white.
yellowPaints the background #fade2a.
yellow_blinkBlinks between #fade2a and white.
greenPaints the background #73bf69.
green_blinkBlinks between #73bf69 and white.
bluePaints the background #5794f2.
blue_blinkBlinks between #5794f2 and white.
grayPaints the background #ebebeb.
gray_blinkBlinks between #ebebeb and white.

Collapse / Expand

Every node that has children displays a small collapse/expand button at the point where its outgoing edge begins. Clicking it hides or reveals the subtree beneath that node.

  • Collapsing a node hides all of its descendants and collapses them automatically.
  • Expanding a node shows only its direct children. Grandchildren remain collapsed until manually expanded.
  • Nodes with multiple parents remain visible as long as at least one parent is open.
  • Cycles in the graph (A → B → A) are handled safely.

The Initial Depth panel option controls how many levels are visible when the panel first loads:

ValueBehavior
0All nodes expanded (default)
1Only root nodes visible
2Roots and their direct children visible
nNodes up to depth n visible, rest collapsed

The Reset to Default button (top-left corner, visible when "Show Layout Options" is on) clears all manually dragged positions and resets the collapse state back to the configured Initial Depth.

FlowX Panel Options

The following table describes FlowX panel options:

CategoryOptionValuesDefaultDescription
Background SettingsBackground ColorGrafana Color Palette#ffffff
Background SettingsBackground TypeNone Dots Cross LinesNone
Background SettingsType Gap1 – 5028
Background SettingsType Size1 – 101
Background SettingsType ColorGrafana Color Palette#000000
Layout SettingsLayout DirectionTop to Bottom Left to RightTop to Bottom
Layout SettingsShow Layout Optionson offon
Layout SettingsShow Mini Mapon offon
Layout SettingsShow Controlson offon
Layout SettingsHide Attribution (Pro)on offoffPlease only hide the attribution if you are subscribed to React Flow Pro: https://reactflow.dev/pro
Layout SettingsMaximum Zoom1 – 104
Layout SettingsMinimum Zoom0.1 – 10.1
Node SettingsDraggable Nodeson offoffDrag positions are preserved across data refreshes. Reset to Default clears them.
Node SettingsFit View on Collapse/Expandon offoffAutomatically fits the view whenever a node is collapsed or expanded.
Node SettingsShow Popupon offoffMust be enabled to use Node or Value URLs.
Node SettingsInitial Depthinteger ≥ 00Number of levels visible on load. 0 = all expanded. See Collapse / Expand section above.
Edge SettingsEdge Animationon offon
Edge SettingsEdge TypeDefault Straight Step Smoothstep SimplebezierDefault
Edge SettingsEdge Stroke1 – 101
Edge SettingsEdge ColorGrafana Color Palette#000000
Node Field MappingIDstringidMaps a custom column name to the id field. Leave empty to use default.
Node Field MappingTypestringtypeMaps a custom column name to the type field. Leave empty to use default.
Node Field MappingTitlestringtitleMaps a custom column name to the title field. Leave empty to use default.
Node Field MappingColor Conditionstringcolor_conditionMaps a custom column name to the color_condition field. Leave empty to use default.
Node Field MappingURLstringurlMaps a custom column name to the url field. Leave empty to use default.
Node Field MappingURL Labelstringurl_labelMaps a custom column name to the url_label field. Leave empty to use default.
Node Field MappingValue 1 Headerstringvalue1_headerMaps a custom column name to the value1_header field. Leave empty to use default.
Node Field MappingValue 1 Datastringvalue1_dataMaps a custom column name to the value1_data field. Leave empty to use default.
Node Field MappingValue 1 URLstringvalue1_urlMaps a custom column name to the value1_url field. Leave empty to use default.
Node Field MappingValue 2 Headerstringvalue2_headerMaps a custom column name to the value2_header field. Leave empty to use default.
Node Field MappingValue 2 Datastringvalue2_dataMaps a custom column name to the value2_data field. Leave empty to use default.
Node Field MappingValue 2 URLstringvalue2_urlMaps a custom column name to the value2_url field. Leave empty to use default.
Node Field MappingValue 3 Headerstringvalue3_headerMaps a custom column name to the value3_header field. Leave empty to use default.
Node Field MappingValue 3 Datastringvalue3_dataMaps a custom column name to the value3_data field. Leave empty to use default.
Node Field MappingValue 3 URLstringvalue3_urlMaps a custom column name to the value3_url field. Leave empty to use default.
Node Field MappingValue 4 Headerstringvalue4_headerMaps a custom column name to the value4_header field. Leave empty to use default.
Node Field MappingValue 4 Datastringvalue4_dataMaps a custom column name to the value4_data field. Leave empty to use default.
Node Field MappingValue 4 URLstringvalue4_urlMaps a custom column name to the value4_url field. Leave empty to use default.
Node Field MappingValue 5 Headerstringvalue5_headerMaps a custom column name to the value5_header field. Leave empty to use default.
Node Field MappingValue 5 Datastringvalue5_dataMaps a custom column name to the value5_data field. Leave empty to use default.
Node Field MappingValue 5 URLstringvalue5_urlMaps a custom column name to the value5_url field. Leave empty to use default.
Node Field MappingValue 6 Headerstringvalue6_headerMaps a custom column name to the value6_header field. Leave empty to use default.
Node Field MappingValue 6 Datastringvalue6_dataMaps a custom column name to the value6_data field. Leave empty to use default.
Node Field MappingValue 6 URLstringvalue6_urlMaps a custom column name to the value6_url field. Leave empty to use default.
Edge Field MappingIDstringidMaps a custom column name to the edge id field. Leave empty to use default.
Edge Field MappingSourcestringsourceMaps a custom column name to the source field. Leave empty to use default.
Edge Field MappingTargetstringtargetMaps a custom column name to the target field. Leave empty to use default.

Field Mapping

If your data source uses different column names than the FlowX defaults (e.g. Elasticsearch, custom SQL), you can remap them using the Node Field Mapping and Edge Field Mapping panel option categories.

Example: Your Elasticsearch index has a field called status instead of color_condition. Set Color Condition to status in Node Field Mapping and FlowX will read from that column automatically.

  • All mapping fields are optional. Leave them empty to use the default column names.
  • Only the fields you configure are overridden — the rest continue to use defaults.
  • Grafana's built-in field rename transformations still work alongside this feature.

Support

Support the continued development of FlowX for Grafana. Your contribution helps fund new features, improvements, bug fixes, and long-term maintenance. ☕

Support on Gumroad

Contact

LinkedIn

Credits and References

  1. ReactFlow
  2. DagreJS
  3. Build a panel plugin tutorial
  4. Grafana documentation
  5. Grafana Tutorials
  6. Grafana UI Library

Installing FlowX on Grafana Cloud:

For more information, visit the docs on plugin installation.

Changelog

2.0.4

Fixes

  • Scoped @xyflow/react styles inside the panel container using nested Emotion CSS selectors — no direct CSS imports remain.

2.0.3

Fixes

  • Replaced injectGlobal with component-scoped Emotion styles using useStyles2 to comply with Grafana plugin guidelines.
  • Restored @xyflow/react/dist/style.css import for standard library styling.

2.0.2

Fixes

  • Upgraded serialize-javascript dependency override to 7.0.5 to resolve high severity OSV vulnerability.

2.0.1

Fixes

  • Converted CSS imports to emotion injectGlobal to comply with Grafana plugin marketplace requirements.
  • Replaced @ts-ignore comments with proper type casts.
  • Updated README demo images to use absolute GitHub raw URLs.
  • Added sponsor link to plugin metadata.
  • Added build provenance attestation to release workflow.

2.0.0

Breaking Changes

  • Minimum Grafana version updated to 11.6.11. Grafana 10.x is no longer supported. This change was required to ensure React 19 compatibility ahead of Grafana 13. If you are using Grafana 10.x, please stay on version 1.0.3.

New Features

  • Collapse / Expand Nodes: Each node that has children now shows a collapse/expand button at its source edge. Clicking it hides or reveals the subtree beneath that node. The feature correctly handles cycles and multiple-parent scenarios using BFS reachability.
  • Initial Depth: New Initial Depth panel option controls how many levels are visible when the panel first loads. 0 means all nodes are expanded; 1 shows only root nodes; 2 shows roots and their direct children, and so on.
  • Fit View on Collapse/Expand: New panel option that automatically fits the view every time a node is collapsed or expanded.
  • Reset to Default Button: A "Reset to Default" button is now shown in the top-left corner (alongside the layout direction buttons) that clears all manual drag positions and resets the collapse state to the configured Initial Depth.
  • State Preserved on Data Refresh: Collapse/expand state and manually dragged node positions are now preserved across data refresh cycles. Only removed nodes are cleaned up.
  • TypeFive & TypeSix Node Types: Two new rectangular node types (five, six) supporting 5 and 6 value rows respectively, consistent with the existing type sizing pattern.
  • Custom Field Mapping: Added "Node Field Mapping" and "Edge Field Mapping" panel option categories. Users can now map any column name from their data source to the expected FlowX field names. All mapping fields are optional — leaving a field empty falls back to the default column name.
  • Value 5 & Value 6 in Popup: The node popup now displays value5 and value6 fields (header, data, and URL) in addition to the existing four.

Changes

  • React 19 compatibility: externalized react/jsx-runtime to prevent bundling conflicts with Grafana 13+.
  • Auto fit-view now triggers when clicking "Top to Bottom", "Left to Right", and "Reset to Default" buttons.

1.0.3

  • CSS classes have been made specific.
  • Root URL flag deleted.

1.0.0

Initial release.