Quick answer: Install and configure the Bugnet SDK in Unreal Engine. Capture crash dumps, GPU/CPU info, and Unreal logs automatically with a few lines of C++.
This getting started Unreal guide walks you through the setup process step by step. Unreal Engine gives you an incredible toolbox for building games, but when it comes to tracking bugs in production, you are largely on your own. Players crash, sessions end unexpectedly, and the only evidence you have is a vague one-star review. Bugnet changes that. In this guide, we will walk through every step of integrating the Bugnet SDK into your Unreal Engine project so you can capture crashes, collect hardware diagnostics, and receive structured bug reports from your players automatically.
Step 1: Add the Bugnet Plugin to Your Project
The Bugnet SDK ships as a standard Unreal Engine plugin. You can install it from the Unreal Marketplace or clone it directly into your project's Plugins directory. Once the files are in place, you need to register the plugin in your .uproject file so the engine loads it at startup.
Open your project's .uproject file and add the Bugnet plugin to the Plugins array:
// YourGame.uproject
{
"Plugins": [
{
"Name": "BugnetSDK",
"Enabled": true
}
]
}
You will also need to add the module dependency in your game's Build.cs file so that your C++ code can reference Bugnet types:
// YourGame.Build.cs
PublicDependencyModuleNames.AddRange(new string[] {
"Core",
"CoreUObject",
"Engine",
"BugnetSDK"
});
After saving both files, regenerate your project files and rebuild. The Bugnet module will now be available throughout your codebase.
Step 2: Initialize the SDK via UBugnetSubsystem
Bugnet uses an Unreal Game Instance Subsystem to manage its lifecycle. This means the SDK initializes when your game instance starts and tears down cleanly when the game exits. You do not need to manage singletons or worry about initialization order.
Create a subsystem class that inherits from UGameInstanceSubsystem and call UBugnetSDK::Init in its Initialize method:
// BugnetSubsystem.h
#pragma once
#include "Subsystems/GameInstanceSubsystem.h"
#include "BugnetSubsystem.generated.h"
UCLASS()
class UBugnetSubsystem : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
};
// BugnetSubsystem.cpp
#include "BugnetSubsystem.h"
#include "BugnetSDK.h"
void UBugnetSubsystem::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
UBugnetSDK::Init({
TEXT("YOUR_API_KEY"), // From your Bugnet dashboard
TEXT("YOUR_GAME_ID"), // Your project's Game ID
});
}
Replace YOUR_API_KEY and YOUR_GAME_ID with the values from your Bugnet dashboard under Settings > SDK Keys. That is all it takes. Once initialized, the SDK begins listening for crashes and errors in the background with zero additional configuration.
Step 3: Configure Trigger Modes
Bugnet supports several trigger modes that control how and when bug reports are collected. You can configure these during initialization or change them at runtime. The most common modes are:
- Automatic: Captures every unhandled crash and fatal error without player intervention. This is the default and recommended mode for production builds.
- Shake: On mobile platforms, players shake their device to open the bug reporter. Useful for playtesting builds where you want testers to add context.
- Manual: Bug reports are only submitted when your code explicitly calls the report API. Use this when you want full control over when reports are sent.
// Configure trigger modes after initialization
FBugnetConfig Config;
Config.TriggerMode = EBugnetTrigger::Automatic;
Config.bCaptureCrashDumps = true;
Config.bCaptureUnrealLogs = true;
Config.bCaptureHardwareInfo = true;
Config.MaxLogLines = 500;
UBugnetSDK::SetConfig(Config);
With bCaptureCrashDumps enabled, the SDK hooks into Unreal's FGenericCrashContext to automatically package minidump files alongside every crash report. Combined with bCaptureUnrealLogs, you get the last 500 lines of your Output Log attached to each report, giving you the full picture of what happened leading up to the crash.
Step 4: Automatic Crash Dumps and Hardware Diagnostics
One of the most powerful features of the Bugnet Unreal SDK is its automatic capture of system-level diagnostics. Every bug report and crash submission includes:
- Crash dump files: Minidumps are captured via Unreal's crash reporter infrastructure. You can download and open these in Visual Studio or WinDbg directly from the Bugnet dashboard.
- GPU information: Vendor, model, driver version, shader model, and VRAM. This is critical for identifying rendering-related crashes that only happen on specific hardware families.
- CPU information: Processor brand, core count, clock speed, and instruction set support (SSE4, AVX2, etc.). Useful for tracking down performance-related crashes.
- Unreal log integration: The SDK captures the tail end of your Output Log, including any warnings, errors, and custom log categories you have defined. No more asking players to dig through
Saved/Logsand paste text into a support email. - Memory state: Current and peak physical memory usage, available system memory, and whether the process was running under memory pressure at the time of the crash.
All of this data is collected automatically. You do not need to write any additional code to capture it. The SDK gathers the information at the moment of the crash and uploads it asynchronously when the game restarts (or immediately, if the crash was non-fatal).
Step 5: Submit a Bug Report from C++ or Blueprints
For non-crash scenarios, such as letting players report visual glitches, gameplay issues, or other problems, you can submit bug reports explicitly. Bugnet exposes this functionality to both C++ and Blueprints.
From C++:
// Submit a bug report with custom metadata
FBugnetReport Report;
Report.Summary = TEXT("Player fell through terrain near the bridge");
Report.Description = TEXT("Happened after jumping on the railing");
Report.Severity = EBugnetSeverity::High;
Report.Tags.Add(TEXT("collision"));
Report.Tags.Add(TEXT("terrain"));
// Attach a screenshot automatically
Report.bIncludeScreenshot = true;
UBugnetSDK::SubmitReport(Report);
From Blueprints: The SDK exposes a Submit Bug Report node under the Bugnet category in the Blueprint action menu. Wire up the Summary, Description, and Severity pins, and optionally check the Include Screenshot box. The node handles serialization and upload in the background, so it will not block your game thread.
"We wired the bug report node to a key binding during our closed alpha. Testers could hit F8 at any moment and a full report with screenshot, logs, and hardware info would appear in our dashboard within seconds. It replaced our entire spreadsheet workflow."
You can also attach arbitrary metadata to reports using the Report.CustomFields map. This is useful for including game-specific context like the current level name, player inventory state, active quest ID, or any other data that helps you reproduce the issue:
// Attach game-specific context to the report
Report.CustomFields.Add(TEXT("Level"), UGameplayStatics::GetCurrentLevelName(this));
Report.CustomFields.Add(TEXT("PlayerHealth"), FString::FromInt(CurrentHealth));
Report.CustomFields.Add(TEXT("QuestID"), ActiveQuestID);
What You Get in the Dashboard
Once reports start flowing in, your Bugnet dashboard organizes them by project and groups duplicate crashes automatically. For each report, you will see:
- A full stack trace with deobfuscated symbol names (upload your PDB or debug symbols to Bugnet for best results)
- The complete hardware profile of the affected machine
- The Unreal log tail with syntax highlighting for warnings and errors
- Attached screenshots and crash dump files, downloadable in one click
- Custom fields from your game, displayed as structured metadata
Bugnet's auto-triage engine groups related crashes by their root cause, even when the stack traces differ slightly. This means a null pointer dereference that manifests in three different call sites will be grouped into a single issue, with all affected players listed. You spend your time fixing bugs, not sorting through noise.
Five minutes to integrate. Zero excuses for flying blind.Next Steps
With the SDK installed and configured, you are ready to start capturing real data from your players. Here are a few things to do next:
- Upload debug symbols for your shipping builds so that crash stack traces are fully symbolicated in the dashboard.
- Set up Discord or Slack notifications in your Bugnet project settings so your team gets pinged the moment a new crash cluster appears.
- Define custom log categories in your Unreal project and use
UE_LOGgenerously. The more context in your Output Log, the more useful each Bugnet report becomes. - Enable churn risk scoring on your dashboard to identify players who are most likely to leave due to repeated crashes, so you can prioritize fixes by real player impact.
Bug tracking in Unreal Engine does not have to be a manual, tedious process. With Bugnet, every crash and every player-reported issue arrives on your dashboard with the full context you need to fix it fast. Your players will notice the difference.