ImPlot3D: 3D plotting for Dear ImGui applications
Immediate Mode 3D Plotting
At a glance
- What is it?
- ImPlot3D is a Dear ImGui extension that adds 3D plots, with a begin/plot/end API modelled on ImPlot, GPU-accelerated rendering and a file split across plot items and meshes. It suits developers who already have a Dear ImGui environment and want interactive 3D data views without pulling in a separate graphics stack.
- Who is it for?
- Adopt ImPlot3D when you already build on Dear ImGui and need interactive 3D plots for point clouds, surfaces or meshes, because the API and integration model will feel familiar on day one. Skip it if you need a full scientific plotting system with axes transforms, statistical overlays or publication output, since this is an immediate mode widget library rather than a plotting application.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A Dear ImGui extension, not a standalone renderer
ImPlot3D extends Dear ImGui with 3D plotting, and the relationship is tight. The documentation states that ImPlot3D requires only Dear ImGui to function and does not depend on ImPlot, which matters if you are coming from the 2D plotting side of the ecosystem. The API deliberately mirrors ImPlot, so a developer already familiar with one plot library finds the shape of the other familiar. The primary language is C++, the licence is MIT, and the project is not archived, with the last push on 2026-10-18 and releases v0.4 on 2026-04-05, v0.3 on 2025-11-30 and v0.2 on 2025-02-16. The version numbers are still in the pre-1.0 range, which is a fair signal about how settled the API is, and the release history shows the pace of change over the last year and a half.
BeginPlot, PlotX, EndPlot, the same loop as ImGui
The usage model is immediate mode, and the pattern is three calls. You open a plot with `ImPlot3D::BeginPlot()`, draw into it with the `PlotX` functions, and close it with `ImPlot3D::EndPlot()`:
float x_data[1000] = ...;
float y_data[1000] = ...;
float z_data[1000] = ...;
ImGui::Begin("My Window");
if (ImPlot3D::BeginPlot("My Plot")) {
ImPlot3D::PlotLine("My Line Plot", x_data, y_data, z_data, 1000);
ImPlot3D::PlotScatter("My Scatter Plot", x_data, y_data, z_data, 1000);
...
ImPlot3D::EndPlot();
}
ImGui::End();The data arrives as three parallel float arrays plus a count, which is the important detail for anyone porting from a 2D plot. The x, y and z values are separate pointers and the same count applies to all three, so a non-uniform point cloud is expressed by repeating or by building a matching index set. The whole call sits inside a normal ImGui window block, so a 3D plot becomes just another widget in an existing tool, which is the point of the design.
Eight plot types, from lines to images
The plot types cover the usual 3D visualisation cases. There are line plots, scatter plots, surface plots, quad plots, triangle plots, mesh plots, text plots and image plots. The quad and triangle entries are the ones that separate this from a scatter-plus-lines library, because they let you draw custom geometry rather than only point primitives. Mesh plots cover the case of rendering an actual 3D model, and image plots cover a texture applied to a surface, which is how you would put a photograph or a data field onto a plane. Interactive navigation is built in: plots can be rotated, panned and zoomed with the mouse. Styling options include 10 marker types, adjustable marker sizes, line weights, outline colors and fill colors, and 16 built-in colormaps with support for user-added ones. Titles, axis labels and grid labels are all optional, and legends are optional too, with toggle buttons that show and hide individual plot items.
Theme-aware by default, fully custom if you want
Styling has two modes, and the default one is the more interesting decision. By default the plot styling follows the current ImGui theme, which means a 3D plot does not look like a foreign object pasted into a themed application. The alternative is a completely custom plot style for cases where the theme does not match the data. That combination matters more in 3D than in 2D, because axis colours, grid lines and label sizes are all read against a 3D background where contrast is harder to reason about than in a flat chart. The optional legend with per-item toggle buttons is also a 3D-specific affordance: with several series overlaid in a rotating view, being able to hide one series is often the only practical way to read the plot at all.
Adding the sources to an existing build
Integration is a matter of source files, not a package. The repository root holds the library as a handful of files: `implot3d.h` for the public API, `implot3d.cpp` for the implementation, `implot3d_internal.h` for the internal declarations, `implot3d_items.cpp` for the plotting item implementations, and `implot3d_meshes.cpp` for the mesh handling. Add these to your own build next to your Dear ImGui sources. The repository also carries an `example/` directory with a `CMakeLists.txt` and a `main.cpp`, which is the shortest path to seeing the library working before you wire it into your own application. There is no install command documented and no published package name to install, so the copy-the-sources approach is the documented one rather than an oversight.
The demo window as a living reference
The reference implementation ships with the library. `implot3d_demo.cpp` contains a comprehensive example, and you call `ImPlot3D::ShowDemoWindow()` in your update loop to get it. The documentation is explicit that the demo is regularly updated to reflect new features and plot types and that you should revisit it with each release, which is a useful caveat for a library whose API is still settling. There is also an online version of the demo hosted at traineq.org, credited to the pthom/implot_demo project, which lets you try ImPlot3D and ImPlot in a browser without a local build. That is the fastest way to judge whether the interaction feel, the default theme styling and the colormap set suit your data before you commit to integrating. An online manual exists as well, hosted through the imgui_explorer project.
Where a 3D widget library stops being enough
The boundary here is the same one that faces every immediate mode plotting library, and 3D makes it sharper. ImPlot3D is a widget, not a plotting application, so there is no data model, no file format, no axis transform machinery beyond what the plot provides, and no statistical overlays. If you need to publish a figure, export an image with axes and captions, or work through a dataset with filtering and reduction, you are outside what this library is for. There is also the physics of it. A 3D plot in an immediate mode UI redraws every frame from arrays you own, and with a large point cloud the per-frame cost of uploading and transforming that data becomes the dominant cost of your interface, which is a budget question the documentation does not address. And the version numbers tell their own story: v0.2, v0.3 and v0.4 since February 2025 mean the API can still move under you, so pin a version rather than tracking the branch.
Editorial conclusion
Adopt ImPlot3D when you already build on Dear ImGui and need interactive 3D plots for point clouds, surfaces or meshes, because the API and integration model will feel familiar on day one. Skip it if you need a full scientific plotting system with axes transforms, statistical overlays or publication output, since this is an immediate mode widget library rather than a plotting application. Before integrating, confirm you have a working Dear ImGui environment, since ImPlot3D requires only Dear ImGui and does not depend on ImPlot, and copy the source files from the repository root, implot3d.cpp, implot3d.h, implot3d_internal.h, implot3d_items.cpp and implot3d_meshes.cpp, into your own build rather than expecting a package manager entry.
Frequently asked questions
Does ImPlot3D require ImPlot to work?
No. ImPlot3D requires only Dear ImGui to function and does not depend on ImPlot, although its API is modelled on ImPlot so that the two feel similar.
How do I draw a 3D scatter plot with ImPlot3D?
Call ImPlot3D::BeginPlot(), then pass the x, y and z arrays and the point count to a plot function such as ImPlot3D::PlotScatter(), and finish with ImPlot3D::EndPlot() inside a normal Dear ImGui window block.
Which plot types does ImPlot3D provide?
Line plots, scatter plots, surface plots, quad plots, triangle plots, mesh plots, text plots and image plots, with rotate, pan and zoom interaction built in.
How do I integrate ImPlot3D into my project?
The integration steps are to have a working Dear ImGui environment and add the library source files from the repository root, implot3d.h, implot3d.cpp, implot3d_internal.h, implot3d_items.cpp and implot3d_meshes.cpp, to your build. The example directory holds a CMakeLists.txt and a main.cpp you can use as a starting point.
Can I see ImPlot3D without building it locally?
Yes. The demo is available online at traineq.org/implot_demo/src/implot_demo.html, credited to the pthom/implot_demo project, and an online manual is hosted through the imgui_explorer project.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/brenocq-implot3d)