UE5 SDK
This guide explains how to automatically collect performance telemetry using the Framedash UE5 SDK (C++ plugin).
Requirements
Section titled “Requirements”- Unreal Engine 5.3 or later
- C++ project (Blueprints Only is not supported)
Installation
Section titled “Installation”Get the plugin from the Framedash UE5 SDK repository — download the latest release zip from the Releases page, or clone the public mirror:
git clone https://github.com/crane-valley/framedash-ue5-sdk.gitThen add it to your project:
- Place the plugin in the
Plugins/Framedashdirectory - Add to your
.uproject:
{ "Plugins": [ { "Name": "Framedash", "Enabled": true } ]}- Add the module dependency to your
Build.cs:
PrivateDependencyModuleNames.Add("Framedash");- Rebuild the project
Initial Setup
Section titled “Initial Setup”Option A: Auto Initialize (Recommended)
Section titled “Option A: Auto Initialize (Recommended)”Add the following to DefaultGame.ini and the subsystem will initialize automatically on startup:
[/Script/Framedash.FramedashSettings]ApiKey=your-api-keybAutoInitialize=TrueYou can also set optional fields like EndpointUrl, BuildId, and SamplingRate:
[/Script/Framedash.FramedashSettings]ApiKey=your-api-keybAutoInitialize=TrueEndpointUrl=https://ingest.framedash.dev/v1/eventsBuildId=1.0.0SamplingRate=1.0These settings are also available in Project Settings > Plugins > Framedash.
No initialization code in C++ is required.
Option B: Manual Initialization from C++
Section titled “Option B: Manual Initialization from C++”You can initialize the SDK directly from code without using config files:
#include "FramedashSubsystem.h"
void AMyGameMode::BeginPlay(){ Super::BeginPlay();
if (auto* Subsystem = GetGameInstance()->GetSubsystem<UFramedashSubsystem>()) { FString ApiKey = FPlatformMisc::GetEnvironmentVariable(TEXT("FRAMEDASH_API_KEY")); Subsystem->InitializeTelemetry(ApiKey); }}InitializeTelemetry also accepts optional EndpointUrl and BuildId parameters, useful in CI environments:
if (auto* Subsystem = GetGameInstance()->GetSubsystem<UFramedashSubsystem>()){ FString ApiKey = FPlatformMisc::GetEnvironmentVariable(TEXT("FRAMEDASH_API_KEY")); FString BuildId = FPlatformMisc::GetEnvironmentVariable(TEXT("CI_COMMIT_SHA")); // Pass an empty string for EndpointUrl to use the default value. Subsystem->InitializeTelemetry(ApiKey, TEXT(""), BuildId);}Automatically Collected Data
Section titled “Automatically Collected Data”Once initialized, the following data is collected automatically:
- FPS / Frame Time — Equivalent to
stat unitdata - GPU Time — Each stage of the rendering pipeline
- Memory — Physical memory + texture streaming
Custom Events
Section titled “Custom Events”Basic Tracking
Section titled “Basic Tracking”if (auto* Framedash = GetGameInstance()->GetSubsystem<UFramedashSubsystem>()){ Framedash->Track(TEXT("player_death"), TEXT("Map01"), PlayerLocation);}With Custom Attributes and Metrics
Section titled “With Custom Attributes and Metrics”Use TrackWithData when you need to attach additional metadata:
if (auto* Framedash = GetGameInstance()->GetSubsystem<UFramedashSubsystem>()){ TMap<FString, FString> Attributes; Attributes.Add(TEXT("cause"), TEXT("fall_damage"));
TMap<FString, double> Metrics; Metrics.Add(TEXT("health"), 0.0);
Framedash->TrackWithData( TEXT("player_death"), TEXT("Map01"), PlayerLocation, Attributes, Metrics);}Next Steps
Section titled “Next Steps”- Data Model — Telemetry data structure
- CI Profiling — Automated build testing