Right-click a map. Capture frame timings in a standalone game process. Compare against a stored baseline. When numbers drift, CI fails — no manual profiling passes on every milestone.
The same scenario you author in the editor is what runs headless in CI. One configuration, two execution paths.
Right-click any map in the Content Browser and get Frame Time, GPU Time, Draw Calls, and Memory in seconds. No scenario setup, no Level Sequence, no CLI — instant profiling from the editor.
View pass/fail results, baseline vs. current values, and deltas directly inside Unreal Editor. No browser or terminal required — open PerfGuard > Results Panel and see everything at a glance.
Define test scenarios as UE Data Assets with three capture modes: Level Sequences for deterministic camera flythroughs, Replays for gameplay-driven scenarios, or Duration Only for static scene profiling. Configure warmup, stat selection, and thresholds — all in the editor.
Record baselines from known-good builds, store as JSON, compare on every PR. Per-platform, per-scenario baselines with export/import for version control.
Self-contained reports with trend charts, frame time histograms, hitch analysis, executive summaries, and dark mode. Works offline — no external services.
Drop-in configs for GitHub Actions, Jenkins, GitLab CI, and BuildGraph. PR comment bots, exit codes for gating, and JSON output for dashboards.
Automatic detection of frame spikes with severity classification (mild/moderate/severe), per-hitch bottleneck attribution (GPU/Game Thread/Render Thread), and cluster drill-down.
IQR outlier trimming, percentile aggregation (P50/P95/P99), confidence intervals, coefficient of variation detection, and thermal throttle identification.
Get alerted on regressions via Slack, Microsoft Teams, or generic JSON webhooks. Conditional posting — only fires when something regresses.
Built-in 30fps, 60fps, and VR 90fps budget presets with automatic threshold configuration. One flag to enforce your target frame rate.
Headless test execution via UE's Gauntlet framework. Full state machine lifecycle (Init → LoadMap → Warmup → Capture → Finish) with timeout protection.
RHI-level GPU timings via UE Insights traces. Per-pass GPU breakdown charts, draw call detail tables, and an "Open in Insights" launcher for deep investigation.
Automated PR/MR comments with formatted stat tables showing exactly what changed. GitHub Actions and GitLab CI configs included — reviewers see perf impact at a glance.
Full subsystem exposed to Blueprint: CSV capture, sequence/replay playback, baseline I/O, and four multicast delegates. Build custom performance UIs and integrate captures into gameplay events.
Generate print-ready PDFs from HTML reports via headless Chrome. One flag (--pdf), zero external Python dependencies. Share results with stakeholders who prefer documents over dashboards.
Per-metric noise floor from multi-run variance or single-run frame data. Warns when regression thresholds are below measurement precision — prevents false positives from hardware noise.
Engine-level health checks detect GPU time gaps, sequence stalls, warmup instability, and thermal throttling. Configurable warning and failure thresholds with diagnostic cards in reports.
Milestone-time profiling passes become per-commit checks. Nothing is hidden; everything is reproducible.
Captures run in a standalone -game process so editor overhead doesn't pollute the numbers.
Right-click any map in the Content Browser and select PerfGuard: Quick Capture. A standalone game process captures Frame Time, GPU Time, Draw Calls, and Memory. Your first run records a baseline automatically.
Run Quick Capture again after making changes. PerfGuard compares against the baseline and shows pass/fail results in PerfGuard > Results Panel — all inside the editor.
The same scenarios run headless via Gauntlet on the build machine. Non-zero exit code fails the build, and the HTML report is an artifact for the PR.
A real dashboard and report generated from an actual UE profiling run — click any run for its full report.
Expand any of these for the technical detail behind the feature cards above.
Track the metrics that matter most to your project:
Each stat supports configurable aggregation: Average, Median (P50), P95, P99, or Maximum.
All configs include: structured JSON output, exit code gating (0=pass, 1=regression, 2=error), artifact upload, and report publishing.
-RenderOffScreen (GPU stats remain valid)suite.json filebCaptureTrace property or globally via --no-trace CLI flagperfguard history show --stat FrameTimeGitHub Actions, Jenkins, GitLab, BuildGraph. All call the same shell wrapper, which detects the CI environment and runs the suite.
Install, author scenarios, set up CI, and read reports — everything you need to ship PerfGuard end-to-end. Looking for general UE5 performance tutorials? Browse the library →
Install the plugin, create your first scenario, record a baseline, and run a comparison — all in under 15 minutes.
Start Tutorial →
Author scenarios with Level Sequences, Replays, or Duration Only captures. Configure stat tracking, warmup frames, Insights traces, and organize with tags.
Start Tutorial →
Use PerfGuard entirely from Blueprint — one-button captures, warmup countdowns, live frame time displays, and automated scenario runners without writing C++ or Python.
Start Tutorial →
Record gameplay sessions, benchmark them as repeatable performance tests, and detect regressions in combat, AI, physics, and streaming workloads.
Start Tutorial →Record, compare, export, and import baselines. Learn per-platform baseline strategies and threshold tuning for your project.
Start Tutorial →
Configure PerfGuard in GitHub Actions, Jenkins, or GitLab CI. Set up PR gating, artifact archival, and Slack notifications.
Start Tutorial →Understand every section of the HTML report: executive summary, stat tables, trend charts, hitch analysis, and diagnostics.
Start Tutorial →Use auto-threshold recommendations, multi-run confidence intervals, and CoV detection to eliminate false positives and catch real regressions.
Start Tutorial →Lumen, Nanite, Virtual Shadow Maps, mobile, profiling tools, postmortems, and methodology — an opinionated, plugin-agnostic reference for any UE5 developer. Free.
Full source at every tier. One-time licenses, no subscriptions.
For solo developers and small teams.
For teams with CI pipelines and dedicated perf engineers.
For large studios needing unlimited seats and dedicated support.
Engine/Binaries/ThirdParty/Python3/ for its own scripting plugin, and PerfGuard's editor buttons (Run Standalone, Show Command, post-capture compare) discover that interpreter automatically. PerfGuard itself does not bundle Python — FAB rejects bundled installers and shell scripts in marketplace plugins. If you also want to drive the CLI from a terminal, or run it on a CI machine that doesn't have UE installed, install Python 3.11+ from python.org/downloads on Windows (tick "Add python.exe to PATH") or via your package manager on Mac/Linux (brew install python@3.11, apt install python3.11, etc.).They share storage and the Results Panel but are different tools for different jobs.
Quick Capture — right-click a map and go. Ten-second capture, default stats, project-wide threshold. No scenario authoring. Filenames are prefixed QuickCapture_<Map> and tagged with an amber badge in the Results Panel. Use it for triage: "did that PR regress perf on this map?"
PerfScenario — an authored data asset you configure in the editor. Configurable duration, warmup, stats, per-stat thresholds, and capture source (Level Sequence for deterministic camera paths, Replay for gameplay, or Duration Only for static scenes). Tagged with a blue badge. Use it for reliable CI gates and noise-controlled measurements. Anything shipping through a pipeline should be a Scenario.
Rule of thumb: Quick Capture is a smoke test, a Scenario is a ship gate. Don't treat a single 10-second Quick Capture as CI signal.
Report content differs too: both generate an HTML report, but Quick Capture disables trace capture to stay fast — so Quick Capture reports have the core charts (timeline, histogram, delta table, percentiles) while Scenario reports add the GPU pass breakdown, per-draw-call RHI detail, and the "Open in Insights" launcher you need to localize why something regressed.
| Report section | Quick Capture | Scenario |
|---|---|---|
| PASS/FAIL banner, delta table, percentiles | ✓ | ✓ |
| Per-frame timeline, frame histogram, sparklines | ✓ | ✓ |
| Noise-floor assessment, engine health checks | ✓ | ✓ |
| GPU pass breakdown | — | ✓ (trace on by default) |
| Per-draw-call RHI detail | — | ✓ (bDetailedRHI on) |
| ▶ Open in Insights launcher | — | ✓ (when trace is present) |
| Capture-source badge | DurationOnly | matches scenario |
| Replay-specific warnings | n/a | ✓ (Replay mode only) |
PerfGuard stores every timestamp in UTC so baselines and results compare correctly across machines — your Linux CI and your Windows workstation need to agree on what moment a run captures, independent of either side's clock settings.
Display is separate. The Results Panel converts to local time by default. Toggle Project Settings → PerfGuard → UX → Timestamp Display to UTC if you want UTC everywhere (useful for distributed teams). The HTML report does the same client-side: each viewer sees their own local time, with the original UTC available on hover. Opening the report from the editor with the UTC setting adds ?tz=utc to the URL so the report honors your preference.
It's an advisory banner, not a failure. PerfGuard surfaces it so you can tell a legitimate regression apart from baseline drift — if the scene has evolved over 43 days of commits, some of any reported regression is drift, not today's change.
What to do: if today's run is a known-good reference, re-record the baseline. Easiest path — delete the stale file at Saved/PerfGuard/Baselines/<scenario>/<platform>.json and run again (PerfGuard auto-records on the first run per scenario/platform). Or from the CLI: perfguard baseline record <scenario> --auto-csv.
The threshold is configurable under Project Settings → PerfGuard → UX → Stale Baseline Warning Days (default 14). Set to 0 to disable the warning entirely.
PerfGuard registers a unrealinsights:// URL scheme in HKCU so clicking the button in the HTML report launches Unreal Insights directly — the same mechanism Discord, Slack, and Zoom use to open their desktop apps from web links.
Windows shows its "How do you want to open this?" dialog the first time the scheme is invoked, so you can confirm what runs. Pick Python (whichever python.exe the plugin discovered on PATH at editor startup) and tick Always use this app. Subsequent clicks launch Insights with no dialog.
If the dialog doesn't appear at all (clicking does nothing), the registration likely didn't run — close the editor fully once and relaunch; registration fires on editor module startup. The button falls back to copying the Insights command to the clipboard if the scheme isn't available (Mac, Linux, or Windows without the HKCU keys).