Keyboard shortcuts

Press ← or β†’ to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Grafana Dashboard JSON Compatibility

This document provides a comprehensive feature-parity table between the Grafana dashboard JSON models and what Grafatui currently supports.

Snapshot: Grafatui v0.1.13. The roadmap prioritizes Grafana parity first, then user-visible product value. See the roadmap for milestone slices built from this compatibility ladder.

Legend:

  • βœ… Supported β€” Fully implemented and working
  • πŸ”Ά Partial β€” Partially implemented or with limitations
  • ❌ Not Implemented β€” Recognized but not yet functional
  • β›” Not Applicable β€” Cannot be implemented in a TUI context (e.g., browser-only features)

Dashboard Schema Models

Grafatui imports the non-resource Classic JSON model and recursive GridLayout, RowsLayout, TabsLayout, and AutoGridLayout containers from the V2 Resource JSON model. In Grafana 13, use Export as code β†’ Advanced options β†’ Model: Classic as the fallback for unsupported advanced V2 dashboards. See the dashboard import guide for detailed steps.

ModelStatusNotes
Classic JSONβœ… SupportedAccepted by --grafana-json; the remaining tables describe support for its fields
V1 Resource JSON❌ Not ImplementedThe Kubernetes-style dashboard.grafana.app/v1 resource envelope is not accepted
V2 Resource JSONπŸ”Ά PartialExact dashboard.grafana.app/v2 resources with recursive grid, row, tab, and AutoGrid layouts are supported
V2 Resource YAMLπŸ”Ά PartialThe same V2 subset, read from .yaml/.yml files

V2 Resource Subset

V2 field or behaviorStatusNotes
Exact apiVersion: dashboard.grafana.app/v2βœ… SupportedOther resource versions are rejected
Grafana 13 Export as code and API outputβœ… SupportedAbsent or null lists and objects (links, transformations, options, overrides, variables, …) are treated as empty, as Grafana’s API serializes them
Share dashboard with another instance exportsβœ… SupportedQueries without a datasource use the configured Prometheus; cleared query variable selections resolve dynamically
spec.layout.kind: GridLayoutβœ… SupportedGridLayoutItem coordinates map to Grafatui’s fixed 24-column grid
spec.layout.kind: RowsLayoutβœ… SupportedNested grid, row, tab, and AutoGrid children preserve row titles, nesting, collapsed state, and hidden-header transparency
spec.layout.kind: TabsLayoutβœ… SupportedNested grid, row, tab, and AutoGrid children preserve titles and show one active tab per group
data.spec.queryOptions interval, maxDataPointsβœ… SupportedAs for Classic panel interval and maxDataPoints; a query’s interval sets its min step
Inline Panel elementsβœ… SupportedSupported panel visualization groups map through the Classic-equivalent importer
Prometheus PanelQuery queriesβœ… Supportedprometheus, grafana-amazonprometheus-datasource, and grafana-azureprometheus-datasource query groups are imported; other datasources emit import diagnostics and are skipped
RowsLayoutRow.spec.fillScreenβ›” Not ApplicableAccepted and ignored; terminal rows size to their content
Top-level spec.variablesπŸ”Ά PartialSupported variable kinds map to Grafatui variables; unsupported kinds emit diagnostics
spec.variables[].spec.refreshβœ… Supportednever, onDashboardLoad, and onTimeRangeChanged control initial and manual/time-range resolution
spec.timeSettings.autoRefreshβœ… SupportedUsed as the dashboard refresh interval
vizConfig.spec.fieldConfigπŸ”Ά PartialThe supported Classic-equivalent field configuration subset applies
AutoGridLayoutβœ… SupportedOrdered panels at root or inside rows/tabs; responsive columns, fillScreen, table content fitting, minimum/maximum heights and row matching share TUI, hit-test, scroll, and export geometry; repeats and conditional visibility use scoped variables
Repeated grid items and row repeat❌ Not ImplementedRejected as fatal import errors
Row/tab local variablesπŸ”Ά PartialSupported variable kinds retain scopes for descendant panel queries, AutoGrid repeats and predicates; a newly visible scope resolves its variables once
AutoGrid item conditional renderingβœ… SupportedVariable, query-data and time-range conditions; AND/OR and show/hide composition
Row/tab conditional rendering❌ Not ImplementedDeferred V2 feature
LibraryPanel elements❌ Not ImplementedExports reference library panels by uid only; they are skipped with a diagnostic. Export with Share dashboard with another instance enabled to inline them

Static AutoGrid sizing

Stages 1–3 support AutoGridLayoutItem panel references in source order, including empty groups, collapsed rows, and inactive tabs. Column counts respond to the available terminal width. Resizing preserves panel selection and adjusts scroll to keep it reachable. SVG/PNG snapshots and recordings use the same layout.

AutoGrid settingSupported behavior
maxColumnCountDefault 3; finite values at least 1; fractions round down and emit autogrid_column_limit_rounded (rejected by --strict)
columnWidthModenarrow, standard, wide, or custom; default standard
columnWidthPositive finite pixels required for custom; rounds upward to cells
rowHeightModeshort, standard, tall, or custom; default standard
rowHeightPositive finite pixels required for custom; rounds upward to cells
matchRowHeightsBoolean; default true stretches siblings to their row track; false retains each panel contribution, leaving unused gaps
fillScreenBoolean; default false. True grows rows to fill their containing content viewport, preserving baseline minimum heights
Layout/item fitContentBoolean; layout default false, item omission inherits layout, explicit true/false overrides it. Tables fit visible rows or wrapped errors; other renderers retain baseline height
minHeightMode, minHeightOmission inherits row height; none removes the floor; short/standard/tall use 10/18/29 cells; custom requires positive finite pixels rounded upward
maxHeightMode, maxHeightOmitted/unlimited has no cap; short/standard/tall use 10/18/29 cells; custom requires positive finite pixels rounded upward. Only custom consumes maxHeight
Item repeat, conditionalRenderingSelected-value repeats and scoped variable, data, and time-range conditions; detailed below
Unknown settingsEmit unsupported_autogrid_setting; --strict rejects the warning

The logical scale is 10 pixels per column and 18 pixels per row, shared with exports. Width presets become 20/45/77 columns; height presets become 10/18/29 rows. Panels use the widest fitting column count, capped by maxColumnCount and item count, with at least one column. Remainder cells go to earlier columns. These are terminal adaptations; panel dimensions do not scale with font size.

Run the static example with:

grafatui --grafana-json examples/dashboards/grafana_v2_autogrid.json \
  --prometheus-url http://localhost:9090

With fillScreen: true, extra height is shared across row tracks, with remainder cells assigned to earlier rows. Each visible row header or tab bar deducts one cell from its child viewport; hidden row headers deduct nothing. Minimum row heights can overflow and scroll. Scrolling and preceding siblings do not change the allocation; following siblings begin after the filled grid’s full extent. Empty grids consume no height. This setting does not enter single-panel fullscreen.

Run the fill-screen example with the same command, substituting its filename.

Table fitting counts only visible series, preserving existing ordering, value formatting, threshold colors and single-row cell clipping. A nonempty table needs N + 4 cells for N rows, its column header, margin and borders; an empty table needs 3. Widths with no body space need only borders. Unsupported renderers (graph, unknown, stat, gauge, bar gauge, heatmap), including their errors, retain the baseline. Table errors fit their wrapped body lines plus two border cells. A missing minimum inherits rowHeight; supplied dimensions are validated even when their mode does not consume them. Fixed panels still contribute their full baseline to prevent overlap beside shorter fitted tables.

With fitting, row tracks follow the tallest contribution. fillScreen distributes only extra height above those tracks and keeps a baseline track floor. matchRowHeights: false keeps individual heights even in filled grids; unused gaps have no click target. This setting now also prevents fixed panels from stretching during fill growth. Dashboard scrolling reveals lower fitted table rows while keeping the clipped panel title and table header visible. Refreshes reconcile focus and scroll after table data grows or shrinks. SVG/PNG and recordings use the same row window and logical 18-pixel spacing.

Run the content-fit example with the same command, substituting its filename.

Maximum heights bound fitting panels, including after row matching and fill stretch a track. The minimum wins when it exceeds the maximum. Ordinary panels keep their baseline sizing. To use a short cap below the standard row height, set minHeightMode: none, as in the bounded example.

Capped fitting tables have independent body offsets. Ctrl+Up/Ctrl+Down scroll one row, Ctrl+PgUp/Ctrl+PgDn page, and Ctrl+Home/Ctrl+End reach the first/last window. Borders and table headers stay fixed; error bodies use the same controls and wrapped lines in TUI, SVG/PNG and recordings. Only the selected overflowing body owns unmodified wheel input; headers, borders, gaps, other panels and Shift+wheel keep dashboard scrolling. Search and annotation modals retain their controls.

Fullscreen bypasses the cap and uses its visible body capacity, including when a tiny cap cannot fit data. The same offset is clamped on entry/exit, resize, data or visibility changes. Changing errors and error recovery reset it; row collapse and inactive tabs retain offsets until reactivation. Ordinary and unlimited-fit fullscreen keep their existing presentation.

AutoGrid layout semantics are supported for Grafatui’s panel renderers and data sources. Selected variable lists retain source order and labels; All repeats concrete options instead of a query regex. Containing row/tab declarations shadow dashboard values, and each repeated panel has its own binding. Surviving instances retain data, focus and body scroll when selections change.

Item conditions support all four variable operators, query-data presence and range duration with AND/OR and show/hide composition. Pending results are omitted; a group without known results remains visible. Invalid regexes return true as in Grafana; invalid intervals remain pending. Month/year intervals use fixed 30/365 day durations; the upstream condition rejects milliseconds and truncates a decimal interval count before applying its unit. Hidden data-dependent instances continue refreshing while their containing row/tab is active. Variable/time-hidden items without a data predicate skip queries. Hidden items reserve no grid cells.

Run the dynamic example against Prometheus to repeat up tables for the selected instances. Zooming beyond one hour hides those tables through the range condition. Repeated rows/tabs and their conditional settings, library panels and transformations remain separate compatibility work.

Unsupported settings fail during import, including inside inactive tabs and collapsed rows.

V2 resources are accepted as JSON or YAML. Use a Classic export for any advanced V2 dashboard outside this grid, rows, tabs, and AutoGrid subset.


Dashboard-Level Properties

JSON FieldStatusNotes
titleβœ… SupportedDisplayed in the title bar
uid❌ Not ImplementedNot used (not needed for local JSON import)
id❌ Not ImplementedNot used
version❌ Not ImplementedNot used
tags❌ Not ImplementedIgnored
timezone❌ Not ImplementedAll timestamps displayed in UTC
editableβ›” Not ApplicableGrafatui is read-only
styleβ›” Not ApplicableTUI has its own theme system
schemaVersion❌ Not ImplementedNot validated
refreshβœ… SupportedUsed as the default data refresh interval; overridden by config or --refresh-rate
time❌ Not ImplementedUses --range CLI option instead
time.from / time.to❌ Not ImplementedUses --range CLI option instead
fiscalYearStartMonthβ›” Not Applicable
liveNow❌ Not ImplementedUses 0 key to reset to live instead
weekStartβ›” Not Applicable

Panels

Panel Types

Panel TypeStatusNotes
graph (legacy)βœ… SupportedRendered as a line chart (Braille markers)
timeseriesβœ… SupportedMapped to graph renderer
statβœ… SupportedBig value + sparkline
gaugeβœ… SupportedHorizontal gauge bar
bargaugeβœ… SupportedVertical bar chart
tableβœ… SupportedTwo-column table (Series, Value)
heatmapβœ… SupportedCharacter-based block heatmap
rowβœ… SupportedHeaders, nested rows, and collapsed state are rendered and interactive
text❌ Not ImplementedSkipped during import
dashlist❌ Not ImplementedSkipped during import
alertlist❌ Not ImplementedSkipped during import
newsβ›” Not Applicable
annolist❌ Not Implemented
barchart❌ Not ImplementedSkipped (distinct from bargauge)
candlestick❌ Not Implemented
canvasβ›” Not ApplicableInteractive canvas not feasible in TUI
datagrid❌ Not Implemented
debugβ›” Not Applicable
geomapβ›” Not ApplicableMap visualization not feasible in TUI
histogram❌ Not Implemented
logs❌ Not Implemented
nodeGraphβ›” Not Applicable
piechart❌ Not Implemented
state-timeline❌ Not Implemented
status-history❌ Not Implemented
trend❌ Not Implemented
xychart❌ Not Implemented

Graph & Timeseries Parity

FeatureJSON FieldBehaviorGrafanaGrafatui
Draw stylesfieldConfig.defaults.custom.drawStyleLine, points, and bars map to terminal graph stylesπŸŸ‘βœ…
Point displayfieldConfig.defaults.custom.showPointsalways overlays visible point markers; never suppresses area/line point markersπŸŸ‘πŸ”Ά
Area fillfieldConfig.defaults.custom.fillOpacityNonzero fill opacity renders terminal/SVG area fill behind the lineπŸŸ‘πŸ”Ά
StackingfieldConfig.defaults.custom.stackingParsed and retained; non-off modes render non-stacked in this sliceπŸŸ‘πŸ”Ά
Axis placementfieldConfig.defaults.custom.axisPlacementhidden suppresses y-axis labels; left/right map to the terminal y-axisπŸŸ‘πŸ”Ά
Axis gridfieldConfig.defaults.custom.axisGridShowControls per-panel autogrid guide linesπŸŸ‘βœ…
Threshold stylefieldConfig.defaults.custom.thresholdsStyleDashed/line style is parsed for graph threshold renderingπŸŸ‘πŸ”Ά

Panel Common Fields

JSON FieldStatusNotes
titleβœ… SupportedDisplayed as the panel border title
typeβœ… SupportedUsed to select the renderer
gridPosβœ… Supported24-column grid layout fully supported
gridPos.xβœ… Supported
gridPos.yβœ… Supported
gridPos.wβœ… Supported
gridPos.hβœ… Supported
id❌ Not ImplementedNot used
description❌ Not ImplementedNot displayed
timeFrom / timeShift / hideTimeOverride❌ Not ImplementedIgnored without a diagnostic; panels use the dashboard range
intervalβœ… SupportedPanel min interval, including > prefixes and variables; invalid values emit a diagnostic. See query resolution
maxDataPointsβœ… SupportedSets how many steps a range query divides the time range into; defaults to 1000
transparentβ›” Not ApplicableTUI panels always have borders
linksβ›” Not ApplicableNo browser navigation
repeat❌ Not ImplementedTemplate repeat not supported
repeatDirection❌ Not Implemented
maxPerRow❌ Not Implemented
collapsed (row)βœ… SupportedInitial collapsed state is preserved and interactive
panels (nested in row)βœ… SupportedNested panels and rows retain their hierarchy

Targets (Queries)

JSON FieldStatusNotes
targets (array)βœ… SupportedMultiple targets per panel supported
targets[].exprβœ… SupportedPromQL expression
targets[].legendFormatβœ… Supported{{label}} syntax for legend formatting
targets[].refId❌ Not ImplementedNot used
targets[].datasource❌ Not ImplementedOnly Prometheus datasource is supported
targets[].intervalβœ… SupportedPer-query min step; overrides the panel interval
targets[].intervalFactor❌ Not Implemented
targets[].instantβœ… SupportedUses Prometheus instant query when true; Gauge, BarGauge, and Table default to instant
targets[].format❌ Not ImplementedAlways treated as time_series
targets[].hideβœ… SupportedHidden targets are skipped during import
targets[].exemplar❌ Not Implemented
targets[].editorModeβ›” Not ApplicableUI-only setting

PromQL Special Variables

VariableStatusNotes
$__rate_intervalβœ… Supportedmax($__interval + scrape interval, 4 Γ— scrape interval), as in Grafana; the scrape interval is the query’s min interval or --scrape-interval (default 15s)
$__rate_interval_msβœ… SupportedMillisecond form of $__rate_interval
$__intervalβœ… SupportedThe exact configured step/--step, or, when absent, the range divided by maxDataPoints (default 1000), rounded as Grafana does, no finer than the imported/default min interval, and within Prometheus’s 11,000-point limit
$__interval_msβœ… SupportedMillisecond form of $__interval
$__rangeβœ… SupportedCurrent dashboard time range
$__range_sβœ… SupportedCurrent dashboard time range in seconds
$__range_msβœ… SupportedCurrent dashboard time range in milliseconds

Templating (Variables)

JSON FieldStatusNotes
templating.listβœ… SupportedVariables extracted from dashboard
templating.list[].nameβœ… SupportedUsed as $var or ${var} in queries
templating.list[].current.valueβœ… SupportedUsed as default value
templating.list[].current.textπŸ”Ά PartialUsed as fallback if value is missing
templating.list[].allValueβœ… SupportedUsed when value is $__all, falls back to .*
templating.list[].typeπŸ”Ά Partialquery variables are resolved for Prometheus
templating.list[].queryπŸ”Ά PartialSupports Prometheus label_values(...) and query_result(...)
templating.list[].definitionπŸ”Ά PartialUsed as a fallback query expression for dynamic query variables
templating.list[].datasource❌ Not Implemented
templating.list[].regexπŸ”Ά PartialApplied to dynamic query variable results
templating.list[].sort❌ Not Implemented
templating.list[].multi❌ Not ImplementedMulti-value selection not supported
templating.list[].includeAll❌ Not Implemented
templating.list[].refreshβœ… Supported0 keeps a saved value, 1 resolves on load, and 2 also resolves on manual/time-range changes; periodic panel refreshes do not re-run variables
templating.list[].options❌ Not ImplementedNo dropdown/picker UI
templating.list[].hide❌ Not Implemented
CLI --var KEY=VALUE overrideβœ… SupportedOverrides dashboard defaults from command line
Config file vars overrideβœ… SupportedOverrides via TOML config

Variable Substitution

PatternStatusNotes
$varnameβœ… SupportedSimple substitution
${varname}βœ… SupportedBraced substitution
${varname:regex}❌ Not ImplementedFormat modifiers not supported
${varname:pipe}❌ Not Implemented
${varname:csv}❌ Not Implemented
${varname:json}❌ Not Implemented
${varname:queryparam}❌ Not Implemented
$__allβœ… SupportedReplaced with allValue or .*

Field Configuration (fieldConfig)

fieldConfig is partially implemented. Thresholds, explicit min/max bounds, selected display formatting fields, threshold style, and per-panel autogrid settings are parsed; exact numeric-to-text value mappings are supported, while display names and field overrides remain major gaps.

JSON FieldStatusNotes
fieldConfigπŸ”Ά PartialParsed for supported defaults/custom fields below
fieldConfig.defaultsπŸ”Ά PartialParsed for min/max, thresholds, and selected custom fields
fieldConfig.defaults.unitπŸ”Ά PartialCommon units such as bytes, bits, seconds, milliseconds, percent, percentunit, ops, request rate, and byte rate are formatted; unknown units fall back to Grafatui’s compact SI formatter
fieldConfig.defaults.minβœ… SupportedUsed for Graph y-axis lower bounds, percentage thresholds, and Gauge limits
fieldConfig.defaults.maxβœ… SupportedUsed for Graph y-axis upper bounds, gauge scaling, and threshold boundaries
fieldConfig.defaults.decimalsβœ… SupportedControls numeric precision in panel values, graph axes, legends, and exports
fieldConfig.defaults.color❌ Not ImplementedUses theme palette instead
fieldConfig.defaults.mappingsπŸ”Ά PartialExact numeric value mappings render mapped text in Stat, Gauge, BarGauge, Table, graph legends, and exports; range, regex, special-value, and mapping-color behavior is not implemented, and unsupported mapping kinds produce import diagnostics
fieldConfig.defaults.noValueπŸ”Ά PartialUsed for null Stat/Gauge/Table values and exports; empty panels still show Grafatui’s No data state
fieldConfig.defaults.displayName❌ Not Implemented
fieldConfig.defaults.customπŸ”Ά PartialUsed for graph draw style, fill/points, axis placement, stacking metadata, threshold style, and axis grid visibility
fieldConfig.defaults.custom.lineWidth❌ Not ImplementedTUI limitation
fieldConfig.defaults.custom.fillOpacityπŸ”Ά PartialNonzero values enable terminal/SVG area fill; exact browser opacity is approximated
fieldConfig.defaults.custom.pointSizeβ›” Not ApplicableTUI points use fixed terminal-cell markers
fieldConfig.defaults.custom.axisLabel❌ Not Implemented
fieldConfig.defaults.custom.axisGridShowβœ… SupportedControls per-panel autogrid guide lines for graph/time-series panels
fieldConfig.defaults.custom.thresholdsStyleπŸ”Ά Partialmode is parsed for threshold rendering; glyph style is also controlled by Grafatui’s marker setting
fieldConfig.defaults.custom.scaleDistribution❌ Not ImplementedAlways linear
fieldConfig.overrides❌ Not Implemented

Thresholds

JSON FieldStatusNotes
fieldConfig.defaults.thresholdsβœ… SupportedApplied to Graph limit lines and dynamic coloring for Stat, Gauge & BarGauge
fieldConfig.defaults.thresholds.modeβœ… Supported(absolute / percentage)
fieldConfig.defaults.thresholds.stepsβœ… Supported
fieldConfig.defaults.thresholds.steps[].valueβœ… SupportedEvaluated mathematically against metric values
fieldConfig.defaults.thresholds.steps[].colorβœ… SupportedMaps keywords (e.g., green) and hex codes (e.g., #FF0000)

Panel Options (options)

Panel-specific options are not parsed yet. Grafatui currently applies its own compact TUI defaults for legends, stat sparklines, gauges, and inspect-mode tooltips.

JSON FieldStatusNotes
optionsπŸ”Ά PartialGraph presentation and Stat/Gauge/BarGauge reduction subsets are imported
options.legend❌ Not ImplementedGrafatui uses its own compact legend
options.legend.displayMode❌ Not ImplementedAlways shows inline legend
options.legend.placement❌ Not ImplementedAlways bottom
options.legend.calcs❌ Not ImplementedNo calculated legend values (min/max/avg)
options.tooltip❌ Not ImplementedInspect mode serves as tooltip substitute
options.tooltip.mode❌ Not Implemented
options.orientation❌ Not Implemented
options.reduceOptionsπŸ”Ά PartialClassic and V2 Stat/Gauge/BarGauge support one calculation per series over raw range samples; an explicit target instant setting still wins. Unsupported settings warn and retain default selection.
options.reduceOptions.calcsπŸ”Ά Partiallast, lastNotNull, min, max, mean, and sum (Total); empty list defaults to last. Multiple or unknown calculations are unsupported.
options.reduceOptions.fieldsπŸ”Ά PartialOnly omitted or empty selection; nonempty field filters and values: true are unsupported. limit has no effect when values is false.
options.textMode❌ Not Implemented
options.colorMode❌ Not Implemented
options.graphMode❌ Not ImplementedStat always shows sparkline

Annotations

JSON FieldStatusNotes
annotations❌ Not ImplementedExternal file/command providers do not implement this Grafana field.
annotations.list❌ Not ImplementedExternal file/command providers do not implement this Grafana field.

Grafatui external file/command JSONL events are a separate, opt-in read-only source. panel_titles is Grafatui’s external-source routing field: it matches eligible graph/timeseries panel titles exactly, not Grafana panel IDs. It does not imply compatibility with Grafana annotation queries, APIs, annotations, or annotations.list.


JSON FieldStatusNotes
options.dataLinksβ›” Not ApplicableNo browser navigation in TUI
transformations❌ Not Implemented
transformations[].id❌ Not Implemented(e.g., organize, merge, reduce)

Alert Rules

JSON FieldStatusNotes
alert❌ Not ImplementedPanel-level alerts
alert.conditions❌ Not Implemented
alert.notifications❌ Not Implemented

Datasource Configuration

FeatureStatusNotes
Prometheus (query_range)βœ… SupportedPrimary and only supported datasource
Prometheus (query instant)βœ… SupportedUsed for dynamic template variables and instant panel targets
Prometheus labels APIβœ… SupportedDynamic label_values(...) requests include the active start/end window and an optional match[] selector
Mixed datasource❌ Not Implemented
InfluxDB❌ Not Implemented
Loki❌ Not Implemented
Elasticsearch❌ Not Implemented
Other datasources❌ Not Implemented

Summary Statistics

CategorySupportedPartialNot ImplementedNot Applicable
Dashboard Properties10104
Panel Types80145
Panel Common Fields11052
Targets / Queries4071
PromQL Variables7000
Templating6660
Variable Substitution3050
Field Config4792
Thresholds5000
Panel Options00140
Annotations0020
Data Links / Transforms0021
Alert Rules0030
Datasources3050
Total52138215

Most Requested Missing Features

Based on user feedback, the following missing features are most commonly expected:

  1. Broader unit formatting (fieldConfig.defaults.unit) β€” Extend the current common-unit subset to more Grafana unit families
  2. Broader reduce options (options.reduceOptions) β€” Add field filters, all-values mode, and multiple calculations beyond the supported single-calculation subset
  3. Broader value mappings (fieldConfig.defaults.mappings) β€” Add range and useful special-value mappings beyond exact numeric labels
  4. Import diagnostics β€” Warn clearly about skipped panel types and ignored high-impact fields
  5. Additional panel types β€” text, piechart, histogram, logs

What Grafatui Does Instead

Grafatui provides several TUI-native capabilities that don’t map directly to Grafana JSON features:

Grafatui FeatureDescription
8 color themesdefault, dracula, monokai, solarized-dark, solarized-light, gruvbox, tokyo-night, catppuccin
Keyboard navigationVim-style (j/k), arrow keys, page up/down
Panel search/ opens a fuzzy-search popup
Fullscreen modef to focus on a single panel
Inspect modev enables cursor-based point-in-time inspection
Y-axis toggley switches between auto-scale and zero-based
Series toggling1–9 to show/hide individual series
Autogrid toggleg toggles automatic guide lines
Mouse supportClick to select, scroll to navigate, drag cursor in fullscreen
Smart cachingRequest deduplication and caching for identical queries
Client-side downsamplingMax-pooling to ~200 points to preserve peaks
SVG/PNG export and recordingsSave dashboard snapshots or changed-frame recording bundles
TOML configurationPersistent config file for all CLI options

This document was reviewed against the Grafatui source code on 2026-10-13. If you notice any inaccuracies, please open an issue or PR.