Plugin collection for PlotJuggler Core — CSV, Parquet, ULog, MCAP, JSON, Protobuf, ROS, ZMQ, MQTT, Foxglove Bridge, and PJ Bridge.
# Build the full plugin collection
./build.shTo work on only one plugin, pass the plugin directory:
./build.sh data_load_csvRun ./build.sh --help to see the available arguments.
By default, build.sh installs the root conanfile.txt and builds into
build/all/Release. With a plugin argument, it installs that plugin's
conanfile.py, configures CMake with -DPJ_BUILD_PLUGIN=<plugin_dir>, and
builds into build/<plugin_dir>/Release.
Each plugin directory has its own conanfile.py. Keep it in sync with the
plugin's find_package(... REQUIRED) dependencies in CMakeLists.txt. The
root conanfile.txt remains the full-repository dependency set for local full
builds and scheduled CI.
No extra steps — the parent project's build system handles everything:
cd /path/to/plotjuggler_core
./build.sh| Package | Version | Used by |
|---|---|---|
| nlohmann_json | 3.12.0 | Most plugins |
| mcap | 2.1.1 | data_load_mcap |
| arrow + parquet | 23.0.1 | data_load_parquet |
| paho-mqtt-cpp | 1.5.3 | data_stream_mqtt |
| cppzmq | 4.11.0 | data_stream_zmq |
| protobuf | 6.33.5 | parser_protobuf |
| zstd | 1.5.5 | data_stream_pj_bridge |
| date | 3.0.4 | data_load_csv |
| ixwebsocket | 11.4.6 | data_stream_foxglove_bridge, data_stream_pj_bridge |
| asio | 1.28.2 | data_stream_udp |
| kissfft | 131.1.0 | toolbox_fft |
| lua | 5.4.6 | toolbox_colormap, toolbox_reactive_scripts_editor |
| sol2 | 3.5.0 | toolbox_colormap, toolbox_reactive_scripts_editor |
| pybind11 | 2.13.6 | toolbox_reactive_scripts_editor |
| cpython | 3.12.7 | toolbox_reactive_scripts_editor |
| gtest | 1.17.0 | All plugin tests |
| Package | Used by |
|---|---|
| plotjuggler_core | SDK (pj_base, pj_dialog_sdk, pj_message_parser_host) |
| ulog_cpp | data_load_ulog |
| rosx_introspection | parser_ros |
| data_tamer | parser_ros, parser_data_tamer |
| Package | Version | Reason |
|---|---|---|
| libsodium | 1.0.20 | 1.0.21 has broken ARM NEON code that fails with GCC on aarch64 |
| Plugin | Type | Description |
|---|---|---|
| parser_json | MessageParser | JSON message parsing |
| parser_protobuf | MessageParser | Protobuf message parsing |
| parser_ros | MessageParser | ROS 1/2 message parsing |
| parser_data_tamer | MessageParser | DataTamer schema/snapshot parsing |
| data_load_csv | DataSource | CSV file loading |
| data_load_mcap | DataSource | MCAP file loading |
| data_load_parquet | DataSource | Parquet file loading |
| data_load_ulog | DataSource | ULog file loading |
| data_stream_zmq | DataSource | ZeroMQ streaming |
| data_stream_mqtt | DataSource | MQTT streaming |
| data_stream_foxglove_bridge | DataSource | Foxglove WebSocket bridge |
| data_stream_pj_bridge | DataSource | PlotJuggler WebSocket bridge |
When adding or changing a plugin:
- Keep
manifest.jsoncurrent; the release tag version must match it. - Add or update the plugin's
CMakeLists.txt. - Add any Conan dependencies to the plugin's
conanfile.py. - Add new dependencies to the root
conanfile.txtwhen full-repository builds need them. - Add focused tests in the plugin directory when behavior changes.
Each plugin is independently versioned and released. The release pipeline builds the tagged plugin on 6 platforms (Linux x86_64/aarch64, macOS Intel/ARM, Windows x64/ARM64), creates plugin-scoped release notes, and can automatically submit to the extension registry.
# One command: bump version, commit, tag, push, build, submit to registry
python3 scripts/release_extension.py foxglove-bridge --bump minor --submit-to-registryThis will:
- Update
manifest.jsonwith new version - Commit and push the change
- Create annotated tag → triggers CI
- CI installs that plugin's Conan recipe, builds it on all 6 platforms, and creates a GitHub Release with notes from that plugin's directory
- Automatically creates a
pj-plugin-registryPR for the exact version in the triggering tag
When manifest already has the correct version (e.g., bumped in a previous commit):
# No --bump or --version: reads version from manifest, creates tag only
python3 scripts/release_extension.py foxglove-bridge --submit-to-registryUseful for batch releases or re-creating tags after cleanup.
<source_directory>/v<semver>
Examples: data_load_csv/v1.0.6, parser_ros/v2.1.0
The source directory before /v controls the CI build scope. A
data_load_csv/v1.0.6 tag installs data_load_csv/conanfile.py and configures
CMake with -DPJ_BUILD_PLUGIN=data_load_csv; it does not install or compile
dependencies for unrelated plugins. CI uses the same build.sh entry point as
local standalone builds.
| Script | Purpose |
|---|---|
release_extension.py |
Bump version, create tag, trigger CI |
submit_to_registry.py |
Submit release to extension registry |
release_tools.py |
Validation and packaging utilities |
Full documentation: scripts/README.md — detailed pipeline diagram, CLI reference, troubleshooting.