PuppetMaster is a C++ real-time middleware runtime for message-driven components, transport abstraction, and deterministic task scheduling.
The project is being refined from a production-oriented autonomous driving middleware into a cleaner, reusable foundation. The first refactor milestone focuses on a buildable project skeleton, a stable public include layout, and a CMake package that downstream projects can consume.
This branch intentionally keeps the default build small:
include/puppet_master/...contains the public API surface for new code.include/puppet_master/corecontains transport-neutral core types, message policies, and the common error model.include/puppet_master/transportcontains backend-neutral reader, writer, message, and registry abstractions.include/puppet_master/transport/inmemorycontains the first concrete local pub/sub backend for scheduler and component tests.include/puppet_master/runtimecontains the runtime context, component registry, and algorithm module interface used to assemble middleware participants.include/puppet_master/schedulercontains trigger dispatch for manual, periodic, and data-driven component execution.src/communication/fastddsis kept as an adapter migration area and is not built by default yet.PuppetMaster::PuppetMasteris the canonical CMake target.- Minimal demos and smoke tests verify the project skeleton, core API, transport abstraction, in-memory pub/sub behavior, runtime assembly, and scheduler triggers.
- Decouple component logic from communication backends.
- Support multiple transports such as in-memory queues, FastDDS, ZMQ, and IPC.
- Provide deterministic task scheduling with periodic, data-driven, dependency-driven, and manual triggers.
- Make configuration, lifecycle management, metrics, and diagnostics first class parts of the runtime.
include/puppet_master/ Public headers for downstream projects.
src/ Library implementation and adapter migration area.
demo/ Small runnable examples.
test/ Smoke tests and future unit tests.
cmake/ Package configuration templates.
docs/ Architecture notes and design decisions.
cmake -S . -B build
cmake --build build
ctest --test-dir buildUseful options:
cmake -S . -B build -DPUPPETMASTER_BUILD_DEMOS=OFF
cmake -S . -B build -DPUPPETMASTER_BUILD_TESTS=OFF
cmake -S . -B build -DPUPPETMASTER_ENABLE_FASTDDS=ONPUPPETMASTER_ENABLE_FASTDDS builds the optional FastDDS adapter target. The
default build remains transport-neutral and does not require FastDDS.
After installation, another CMake project can consume PuppetMaster with:
find_package(PuppetMaster CONFIG REQUIRED)
target_link_libraries(my_component PRIVATE PuppetMaster::PuppetMaster)- Project skeleton and public CMake package. Done.
- Core types and error model. Done.
- Transport abstraction. Done.
- In-memory transport for tests and local pipelines. Done.
- FastDDS adapter as an optional backend. In progress.
- Runtime context and component registry. Done.
- Component model and algorithm module interface. Done.
- Scheduler triggers. In progress.
- Configuration, observability, and production demos.
See Architecture for the intended module boundaries. See Core API for the current public core model. See Transport Abstraction for the backend contract. See In-Memory Transport for the local pub/sub backend. See Runtime Context for runtime assembly and registries. See Component Model for the algorithm module interface. See Scheduler for trigger dispatch and component execution. See FastDDS Adapter for the optional DDS backend.