Official C++ SDK for Teliqos game analytics.
Lightweight, open source, thread-safe. Works with raylib, Unreal Engine, and any C++ project.
- Automatic session tracking and heartbeat
- Event batching with configurable intervals
- SQLite offline queue for unreliable networks
- Jittered exponential backoff on failures
- Platform-specific device info collection (Windows, macOS, Linux)
- GDPR opt-out with a single call
- Thread-safe, non-blocking design
#include "teliqos/teliqos.h"
int main() {
Teliqos::Config config;
config.apiKey = "mq_live_your_key_here";
config.appVersion = "1.0.0";
Teliqos::init(config);
Teliqos::identify("player_42");
Teliqos::EventData event;
event.nums["score"] = 1500.0;
event.strs["level"] = "3-1";
Teliqos::track("level_complete", event);
Teliqos::shutdown();
return 0;
}include(FetchContent)
FetchContent_Declare(teliqos
GIT_REPOSITORY https://github.com/CedraInteractive/teliqos-sdk-cpp.git
GIT_TAG v0.1.0)
FetchContent_MakeAvailable(teliqos)
target_link_libraries(your_game PRIVATE teliqos)add_subdirectory(teliqos-sdk-cpp)
target_link_libraries(your_game PRIVATE teliqos)| Platform | Arch | Compiler | SSL Backend | CI Tested | Prebuilt |
|---|---|---|---|---|---|
| Windows 10+ | x64 | MSVC 17+ | Schannel | ✅ | ✅ |
| macOS 13+ | arm64 | Apple Clang 15+ | SecureTransport | ✅ | ✅ |
| Ubuntu 22.04+ | x64 | GCC 11+ / Clang 14+ | OpenSSL | ✅ | ✅ |
Game engines: Tested with raylib 5.x. Unreal Engine integration available via teliqos-sdk-unreal (coming soon).
All dependencies are handled automatically — no manual installation required:
| Dependency | Method | Purpose |
|---|---|---|
| libcurl | CMake FetchContent | HTTPS transport |
| nlohmann/json | CMake FetchContent | JSON serialization |
| SQLite3 | Bundled (third_party/) |
Offline event queue |
git clone https://github.com/CedraInteractive/teliqos-sdk-cpp.git
cd teliqos-sdk-cpp
cmake -B build
cmake --build buildcmake -B build -DTELIQOS_BUILD_TESTS=ON
cmake --build build
cd build && ctest --output-on-failure| Function | Description |
|---|---|
Teliqos::init(config) |
Initialize the SDK, start session and background threads |
Teliqos::shutdown() |
Flush remaining events, end session, clean up |
Teliqos::identify(playerId) |
Set the player identity |
Teliqos::track(name, data) |
Send a custom event |
Teliqos::setUserProperty(key, value) |
Attach metadata to every subsequent event |
Teliqos::setOptOut(true) |
Disable all tracking (GDPR / Apple ATT) |
Teliqos::flush() |
Force-send all queued events |
Teliqos::getStatus() |
Get queue size, offline count, and quota info |
Teliqos::Config config;
config.apiKey = "mq_live_..."; // Required
config.appVersion = "1.0.0"; // Recommended
config.endpoint = "https://api.teliqos.io"; // Default
config.batchIntervalMs = 30000; // Flush every 30s
config.batchSize = 50; // Flush at 50 events
config.collectDeviceInfo = true; // Auto-collect OS/CPU/RAM
config.offlineQueueSize = 500; // Max offline events
config.heartbeatIntervalSec = 60; // Heartbeat interval
config.debug = false; // Enable console loggingTeliqos::EventData event;
// Numeric values
event.nums["damage"] = 25.5;
event.nums["health"] = 100.0;
// String values
event.strs["weapon"] = "sword";
event.strs["boss_id"] = "dragon_01";
// Tags
event.tags = {"pvp", "ranked"};
// Position (for heatmaps)
event.pos = {120.0f, 45.0f, 0.0f};
event.hasPos = true;
// Map identifier
event.mapId = "world_1";
// Event category (session, performance, gameplay, economy, system, custom)
event.category = "gameplay";
Teliqos::track("boss_fight", event);Properties set via setUserProperty are automatically attached to every subsequent event:
Teliqos::setUserProperty("tier", "gold"); // string → strs map
Teliqos::setUserProperty("player_level", 42.0); // number → nums mapTeliqos::setOptOut(true); // Stops all tracking, clears event queue
Teliqos::setOptOut(false); // Resumes trackingMIT — see LICENSE for details.
