github brenocq/implot3d v0.4

latest release: v0.5
pre-release6 months ago

Hello everyone! I hope you're having a great start to 2026.

I'm happy to announce ImPlot3D v0.4 🎉.

This release introduces ImPlot3DSpec, a new unified style API that replaces the old SetNext* functions and enables powerful per-index customization — you can now assign individual colors and sizes to each point, line vertex, triangle, quad, surface cell, or mesh face. It also brings significant improvements to axis interaction areas, making axis labels and tick manipulation more intuitive and robust. A big thank you to everyone who contributed to v0.4!

❤️ Sponsor the Project GitHub Sponsors is still open. Your support allows me to dedicate focused time to the health of the ImPlot/ImPlot3D ecosystem and directly contributes to my future academic studies in robotics and XR. If you find these tools valuable to your work, please consider becoming a sponsor.

🚀 New Features

  • Feat: ImPlot3DSpec by @brenocq in #169

    • As ImPlot is moving towards ImPlotSpec API as a replacement for the SetNextXX API (epezent/implot#519), ImPlot3D is doing the same. All plotting functions now take ImPlot3DSpec as argument.

    • There are two ways of populating the ImPlot3DSpec:

      • 1. By declaring and defining a struct instance:
      ImPlot3DSpec spec;
      spec.LineColor = ImVec4(1,0,0,1);
      spec.LineWeight = 2.0f;
      spec.Marker = ImPlot3DMarker_Circle;
      spec.Flags = ImPlot3DItemFlags_NoLegend | ImPlot3DLineFlags_Segments;
      ImPlot3D::PlotLine("Line", xs, ys, zs, 100, spec);
      • 2. Inline using ImPlot3DProp,value pairs (order does NOT matter):
       ImPlot3D::PlotLine("Line", xs, ys, zs, 100, {
       ImPlot3DProp_LineColor, ImVec4(1,0,0,1),
       ImPlot3DProp_LineWeight, 2.0f,
       ImPlot3DProp_Marker, ImPlot3DMarker_Circle,
       ImPlot3DProp_Flags, ImPlot3DItemFlags_NoLegend | ImPlot3DLineFlags_Segments
      });
  • Feat: Improved axis interaction area by @brenocq in #174

image

  • Feat: Per-index color/size support with ImPlot3DSpec by @brenocq in #182

image image

image image

🐛 Bug Fixes | 🛠️ Chores | 📄 Docs

  • Chore: Fix unused variable warnings by @HunterBelanger in #165
  • Fix: Initialize plane_2d to -1 in ShowMetricsWindow by @JunkyoLee in #170
  • Fix: Warnings due to uninitialized class members by @HunterBelanger in #175
  • Fix: Cast loop variable to ImU32 in ImPlot3DColormapData to fix C4365 warning by @JunkyoLee in #176
  • Docs: A brand new Manual for ImGui, ImPlot3D and ImPlot!!! by @pthom in #179
  • Fix: Reorder GPlot3DStyleVarInfo array to match ImPlot3DStyleVar_ enum by @JunkyoLee in #178

⚠️ Breaking Changes

  • SetNextLineStyle has been removed, styling should be set via ImPlot3DSpec.
    // Before
    ImPlot3D::SetNextLineStyle(line_color, line_weight);
    ImPlot3D::PlotLine("Line", xs, ys, zs, count);
    
    // After
    ImPlot3DSpec spec;
    spec.LineColor = line_color;
    spec.LineWeight = line_weight;
    ImPlot3D::PlotLine("Line", xs, ys, zs, count, spec);
  • SetNextFillStyle has been removed, styling should be set via ImPlot3DSpec.
    // Before
    ImPlot3D::SetNextFillStyle(fill_color, fill_alpha);
    ImPlot3D::PlotTriangle("Triangle", xs, ys, zs, count);
    
    // After
    ImPlot3DSpec spec;
    spec.FillColor = fill_color;
    spec.FillAlpha = fill_alpha;
    ImPlot3D::PlotTriangle("Triangle", xs, ys, zs, count, spec);
  • SetNextMarkerStyle has been removed, styling should be set via ImPlot3DSpec.
    // Before
    ImPlot3D::SetNextMarkerStyle(marker, marker_size, fill_color, line_weight, marker_outline_color);
    ImPlot3D::PlotScatter("Scatter", xs, ys, zs, count);
    
    // After
    ImPlot3DSpec spec;
    spec.LineWeight = line_weight;
    spec.Marker = marker;
    spec.MarkerSize = marker_size;
    spec.MarkerLineColor = marker_outline_color;
    spec.MarkerFillColor = fill_color;
    ImPlot3D::PlotScatter("Scatter", xs, ys, zs, count, spec);
  • Flags, Offset and Stride should also be set via ImPlot3DSpec now.

🎉 New Contributors

Full Changelog: v0.3...v0.4

Don't miss a new implot3d release

NewReleases is sending notifications on new releases.