TauPlot¶
TauPlot is a pure GDScript charting addon for Godot 4.5+ with no external dependencies. It draws interactive, performant and themeable plots inside any Godot UI.
Key characteristics¶
- Bar and scatter overlays in any combination, with grouped, stacked, or independent bar modes.
- Real-time streaming through ring-buffer datasets that drop the oldest samples automatically.
- Multi-pane layouts for displaying series with different Y scales (e.g. price above volume).
- Per-sample styling via attribute buffers or callbacks for color, alpha, marker shape, and more.
- Full Godot theme integration with a three-layer cascade (built-in defaults, theme, code overrides) across every visual property.
- Hover inspection with tooltip, crosshair, highlight, and interaction signals.

Example 1: XY plot with per-sample visual overrides.

Example 2: Scatter plot with legend inside (top-left).

Example 3: Stacked bars with rounded corners with legend outside (bottom).

Example 4: Multi-pane example with custom labels and legend inside (top).

Example 5: Logarithmic scale with legend inside (right).
Installation¶
TauPlot requires Godot 4.5 or later.
From the Godot Asset Library¶
- Open the Godot editor and go to the AssetLib tab.
- Search for TauPlot.
- Click Download, then Install when prompted.
- Open Project > Project Settings > Plugins and enable TauPlot.
Manual installation¶
- Download or clone the repository from GitHub.
- Copy the
addons/tau-plot/folder into your project'saddons/directory. - Open Project > Project Settings > Plugins and enable TauPlot.
Quick start¶
Create a scene where the root node is a CenterContainer. Add a TauPlot node child and name it MyPlot. Attach a script to the root node with the following content:
extends CenterContainer
func _ready() -> void:
var dataset := TauPlot.Dataset.make_shared_x_categorical(
PackedStringArray(["Revenue", "Costs"]),
PackedStringArray(["Q1", "Q2", "Q3", "Q4"]),
[
PackedFloat64Array([120.0, 135.0, 148.0, 160.0]),
PackedFloat64Array([90.0, 95.0, 100.0, 108.0]),
]
)
var x_axis := TauAxisConfig.new()
x_axis.type = TauAxisConfig.Type.CATEGORICAL
var y_axis := TauAxisConfig.new()
y_axis.title = "EUR"
var bar_overlay_config := TauBarConfig.new()
var pane := TauPaneConfig.new()
pane.y_left_axis = y_axis
pane.overlays = [bar_overlay_config]
var config := TauXYConfig.new()
config.x_axis = x_axis
config.panes = [pane]
var b0 := TauXYSeriesBinding.new()
b0.series_id = dataset.get_series_id_by_index(0)
b0.pane_index = 0
b0.overlay_type = TauXYSeriesBinding.PaneOverlayType.BAR
b0.y_axis_id = TauPlot.AxisId.LEFT
var b1 := TauXYSeriesBinding.new()
b1.series_id = dataset.get_series_id_by_index(1)
b1.pane_index = 0
b1.overlay_type = TauXYSeriesBinding.PaneOverlayType.BAR
b1.y_axis_id = TauPlot.AxisId.LEFT
var bindings: Array[TauXYSeriesBinding] = [b0, b1]
$MyPlot.title = "Quick Start Example"
$MyPlot.plot_xy(dataset, config, bindings)
Run the scene and you get:

Quick start: Bar chart with 2 series, a legend and axis title with default style.
This example is available in addons/tau-plot/examples/quick_start.tscn.
Documentation¶
- Getting Started walks through building your first plot step by step.
- API Reference covers every class, property, enum, and signal.
- Tests can provide good examples of how to use some features.
Stability¶
The API may change between releases until version 1.0 is reached. Breaking changes will be documented in the changelog. Backward compatibility is taken seriously and disruption will be kept to a minimum, but at this stage correctness and design quality take priority over freezing the API.
If you encounter a bug, please open an issue on the GitHub repository. Feedback from early adopters directly shapes the road to a stable 1.0.
Contributing¶
Contributions are welcome. See CONTRIBUTING.md for details.
Roadmap¶
The following features are planned for upcoming releases:
- Line and area overlays for XY plots.
- Interactive legend with click-to-toggle series visibility.
- Pie and radar plot types.
License¶
TauPlot is released under the BSD 3-Clause License. See the full license text for details.