Skip to content

uprops - Universal Property, Metadata, Signaling & Serialization Engine

Overview

uprops (src/Core/uprops/) is a lightweight, zero-dependency C++20 framework component for Properties, Rich Metadata, Thread-Safe Signaling, Encoders/Decoders, and Connected Proxy Representations.

It is designed to be completely decoupled from the higher-level framework core (uLib::Core). uprops provides a universal model for representing editable properties of any C++ object, attaching rich metadata, broadcasting property updates across threads or network protocols, and synchronizing connected representations across heterogeneous environments (such as Qt GUIs, VTK 3D viewports, Python proxies, or gRPC remote clients).

graph TD
    subgraph uprops ["uprops Engine (Standalone C++ Library)"]
        Props["Properties & Containers (PropertyBase, Property<T>, FunctionalProperty<T>)"]
        Metadata["Rich Metadata & HRP (hrp<T>, make_hrp, units, min/max, defaults)"]
        Signals["Signaling System (LocalSignalBackend, boost::signals2)"]
        EncDec["Encoder / Decoder Abstraction (IEncoder, IDecoder)"]
        Archives["Archive Formats (XML, Text, HRT, Log)"]
    end

    subgraph Core ["mutomCore Layer"]
        Object["uLib::Object & Context"]
        uProp["uLib::Property<T>"]
    end

    subgraph Modules ["Downstream Framework & Applications"]
        VTK["mutomVtk (Prop3D, Viewport, Gizmos)"]
        GUI["app/gcompose (Qt GUI Widgets)"]
        Py["Python Bindings (pybind11)"]
    end

    Core --> uprops
    Modules --> Core
    Py --> uprops

Key Features

  1. Zero Framework Dependencies: uprops depends solely on standard C++20 and Boost (Boost::serialization, boost::signals2). It does not include or link uLib::Object or any mutomCore headers.
  2. Rich Property Metadata: Every property carries rich metadata out-of-the-box, including:
  3. Name and Group
  4. Units (e.g. m, cm, mm, rad, deg)
  5. Min / Max range constraints
  6. Default value
  7. ReadOnly status
  8. EnumLabels for enumeration types
  9. Human Readable Properties (HRP): make_hrp(...) packages values together with metadata wrappers for seamless serialization and inspection.
  10. Encoder / Decoder Architecture: Abstract IEncoder and IDecoder interfaces allow property values and metadata to be serialized to file archives (XML/JSON/Text), streamed over network protocols (gRPC/WebSockets), or synchronized with UI view editors.
  11. Thread-Safe Publish-Subscribe: LocalSignalBackend provides thread-safe pub/sub dispatch using PropertyChangePayload, allowing background computations or 3D viewport interactions to update Qt GUI widgets in real time without thread locks on the main loop.
  12. Connected Proxy Representations: Enables bidirectionally synchronized views where changing a 3D gizmo handle updates the C++ domain model (TRS), which publishes signals to update Qt property panels in real time, and vice versa.

Documentation Sections