What’s New in PlotJuggler 4.0

PlotJuggler 4.0.0, released on 21 September 2026, is the biggest change in the project’s history: a rewrite that grows the classic time-series plotter into a multimodal visualisation platform. This guide walks through everything that is actually new — video and 3D, Python scripting, new data formats, the Extensions Marketplace, Mosaico cloud downloads, layout schema v4 and the new apt repository — using only what the project itself documents. For the hub overview, see PlotJuggler 4; for the files, see the Download page.

From time-series tool to multimodal platform

PlotJuggler 3 earned its reputation on one job done extremely well: plotting time series from files and live streams, fast, with drag-and-drop simplicity. PlotJuggler 4 keeps that core — you still drag signals into time-series and XY plots, load several recordings, align their timelines, overlay signals with per-dataset time offsets, and apply filters, derivatives, integrals and FFT — but the project now describes itself as a platform for recorded or live data in general, where plots are one view among several. The official site’s own summary is that PJ4 still juggles data, “but wait, there’s 2D! And yes… even 3D!”

Video: cameras join the timeline

The headline addition is time-synchronised media. PJ4 can display images and video alongside your plots: raw and encoded video in H.264, H.265 and AV1, live WebRTC streaming, and 2D annotations and markers on the imagery. Because everything shares one timeline, scrubbing through a recording moves the plots and the camera view together — the workflow robotics and vehicle engineers previously needed a separate video player (and a lot of patience) to approximate. Our dedicated guide, PlotJuggler 4 Video and 3D Visualisation, covers this in depth.

3D: point clouds, meshes and URDF

PJ4 adds a GPU-accelerated 3D view: point clouds (including compressed point clouds), meshes, URDF robot models, occupancy grids (2D), elevation grids (2.5D), plus 3D annotations and trajectories. For anyone debugging a robot, that means the sensor data, the robot’s own model and the numeric plots can finally live in one application on one timeline, instead of being split across a plotter and a separate 3D viewer.

Python scripting, alongside Lua

Custom transforms — derived series computed from your data, such as converting quaternions to roll, pitch and yaw — were a Lua-only feature in PJ3. PJ4 adds Python scripting as an alternative to Lua for the same job (the feature first appeared in the 3.999.9 preview). Existing Lua knowledge and scripts still matter — Lua remains a first-class option — but teams that already write Python can now express transforms in the language they use for the rest of their analysis. See PlotJuggler 4 Python Scripting for how to choose.

New data: MCAP, Parquet, LeRobot and more

The file-format list expands well beyond PJ3’s CSV and ULog core. PJ4 reads CSV, MCAP, Parquet, PX4 ULog, LeRobot, MP4, PCD and PLY; live sources include ROS 2, MQTT, ZeroMQ, UDP, WebSocket bridges, WebRTC and Lab Streaming Layer; and the message encodings understood now span ROS 1/2, Protobuf, JSON, CBOR, BSON, Apache Arrow and MessagePack, with OMG IDL (DDS) parsing added during the previews. Two preview additions deserve a special mention: PJ4 can attempt to read corrupted MCAP files, and it ships an export tool to CSV and Arrow-Parquet. There is also Mosaico integration for downloading data from the cloud, delivered as the ToolboxMosaico plugin.

Extensions Marketplace

PJ3’s plugin system was powerful but manual: you found, built or downloaded plugins yourself. PJ4 gives plugins a distribution channel — the Extensions Marketplace, opened from File → Marketplace, where you can install and update data loaders, streamers, message parsers and toolboxes from the project’s registry (the public pj-plugin-registry repository). A plugin SDK, plotjuggler_sdk, exists for building new PJ4 plugins. Our Extensions Marketplace guide explains the model.

Layouts: schema v4, offsets and undo/redo

Under the surface, the layout system changed too. PJ4 layouts use schema v4, which saves the viewport and the per-dataset time offsets along with the rest of the view, and layouts and transforms are saved together as before. The 3.999.3 preview also introduced transactional undo/redo. The practical consequence of the schema change is covered in the migration guide: check your existing layouts after upgrading rather than assuming they carry over untouched.

A new install channel: the apt repository

PJ4 is the first generation with an official apt repository (apt.plotjuggler.io): add it once on Ubuntu 22.04+ or Debian 12+, install the plotjuggler4 package, and future releases arrive through normal apt upgrade — see the apt repository guide in our Install section. The other channels are the Windows installer (per-user, no administrator rights needed), the x86_64 AppImage (glibc 2.35+) and a single-release .deb. What PJ4 does not ship is equally part of the news: no macOS binary, no aarch64 AppImage, no portable Windows .zip, and no snap or flatpak.

How it arrived

PJ4 was developed in the open: preview 3.999.0 landed on 2 July 2026 (AppImage only), 3.999.3 on 20 July brought undo/redo, layout schema v4 and the Marketplace, 3.999.9 on 10 August added Mosaico, the export tool, Python scripting and DDS parsing — and 4.0.0 followed on 21 September 2026 as the first stable release. The full timeline is on the PlotJuggler 4 hub.

Should you switch?

If you are not tied to the ROS plugin ecosystem, PJ4 is the line to be on — it is the current release and where development happens. If your workflow runs through ROS packages and rosbag plugins, read PlotJuggler 3 vs PlotJuggler 4 before deciding: the ROS ecosystem is still on PJ3, and that fact outweighs the feature list for many users.

Similar Posts