Example gallery
All examples use the exported SDK. They do not include private application headers. The standard panels require no Qt; the independent ImGui example adds GLFW and OpenGL. Use a disposable project and the supplied synthetic fixtures.
Build the examples
From the extracted SDK, configure the consumer suite:
cmake -S tests -B consumer -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/absolute/sdk -DET_SDK_BUILD_IMGUI=ON
cmake --build consumer
ctest --test-dir consumer --output-on-failure
Each example also has its own CMake project and preset. Follow that example's
README: existing service examples use release; the starter and basic examples
use sdk with EPICTUNER_SDK_ROOT. Run cmake --list-presets in the example
directory to see its configure presets.
Keep the extracted SDK directory tree intact: some examples share helpers or
vendored sources. See deployment for compiler and renderer dependencies.
Examples
| Example | Learn | Acceptance you can reproduce |
|---|---|---|
| Hello panels | Controls, bindings, workspace/floating/modal panels, multiple instances | Edit values; focus the singleton; open independent inspectors; close/reopen and restore state |
| Cascading selects | Dynamic Make/Model/Tune options, empty controls, typed selections and 2 × 12 preview | Choose each level; verify preview; change Make and verify downstream reset; host 0.8.3+ |
| Live telemetry | Channel selection, timestamps/quality, bounded plot, derived RPM/2 | Connect Mock ECU; change channels; disconnect/reconnect; observe stale values and gaps |
| Calibration workbench | Real field/table/curve/surface prefabs, normalized previews and undo | Use synthetic INI; preview/apply; edit manually to invalidate an old proposal; save/reopen; verify RAM separately from burn |
| Log analyzer | Ranges, background statistics, result table/chart, comparison | The supplied 256-row logs yield means 127.5 and 227.5; cancel and rerun |
| Fuel analysis | Bounded correction calculation and explicit Apply | Analyze synthetic lambda log; change limits; reject stale previews and absent channels; no automatic burn |
| Licensed feature | Signed package, free/paid action, activation | Paid action denied before activation; accepted after valid mock online/offline activation |
| ImGui inspector | Worker-owned custom window and host reads | Render/input, focus, resize, close/reopen, worker-loss recovery |
| Fault injection | Intentional worker failure and invalid service calls | Host survives crash/hang; flood is bounded; invalid requests fail; restart is explicit |
Install through the signed test catalog
The catalog builder takes binaries from that independent consumer build and signs all eight packages with an ephemeral local test key:
python tools/test-catalog.py build --sdk /absolute/sdk --binaries /absolute/consumer --output /absolute/test-catalog
python tools/test-catalog.py verify --catalog /absolute/test-catalog --trusted-key /absolute/test-catalog/publisher.json
The private key is deleted when the builder exits. The catalog contains public
trust material, signed packages and hashes. The fault-injection entry is
explicitly marked test-only. Review/import the public test publisher in the
Plugins manager, then install selected .etplugin files. Never import this
generated identity as a production publisher. Catalog verification does not
replace the host's independent package verification.
See publishing for the package layout and third-party path. The small lifecycle examples additionally show C, C++ and background-task ABI fundamentals.