Videos List:
How to set everything up
Demo
New Update introducing everything in the version 1.1
Minimalistic Performance Viewer is a drop-in performance monitoring HUD for Unreal Engine 5. Built for developers who need clean, readable stats on screen without the noise, without the setup, and without it falling apart in a packaged build.
Version 1.1 ships with 36 bindable stats across FPS, thread times, GPU info, VRAM, RAM, memory pressure, battery, temperature, and graphics API — all collected from the correct platform APIs and exposed to your UMG layout automatically every tick.
What it monitors
FPS & Frame Timing
- Smoothed FPS with exponential moving average so no jitter
- Raw frame time in milliseconds
- Color-coded Good / Warning / Critical against your target FPS
- Thread Times (requires bAllowStatsInShipping=true in packaged builds)
- Game Thread, Render Thread, GPU time in ms
- Automatic CPU vs GPU bottleneck detection with 10% hysteresis and no per-frame flipping
GPU
- GPU name and vendor detected at startup (NVIDIA, AMD, Intel, Qualcomm/Adreno, ARM/Mali, Apple, Imagination/PowerVR)
- Graphics API: DirectX 11/12, Vulkan, Metal, OpenGL
VRAM / Texture Pool
- Used, Total, and Available : separately bindable
- Desktop (Windows / Mac / Linux): reads real dedicated video memory via RHIGetTextureMemoryStats()
- Mobile (Android / iOS): uses Unreal's managed texture streaming pool : the value that actually drives texture quality, streaming decisions, and OOM kills on mobile
Memory Pressure (new in 1.1)
- Derived 0–1 ratio of texture pool consumed
- Safe / Warning / Critical thresholds
- The most crash-predictive GPU memory metric on mobile and could be more useful than raw MB
System RAM
- Used, Total, and Free : separately bindable
- Dynamic scale from real device total, no hardcoded values
Platform
- Battery level : Android and iOS, auto-hidden on desktop
- Device temperature level : Android, shows N/A elsewhere
How it works
Drop in the HUD Blueprint, create a UMG Widget Blueprint parented to UPerfOverlayWidget, name your text blocks, progress bars, and sparklines using the reserved binding names and everything populates automatically every tick. No Blueprint wiring. No C++ required to get started.
- Text_FPS Text_FPS_Value
- Text_FrameTime Text_FrameTime_MS
- Text_GameThread Text_GameThread_MS
- Text_RenderThread Text_RenderThread_MS
- Text_GPU Text_GPU_MS
- Text_Bottleneck
- Text_VRAM Text_VRAM_Used Text_VRAM_Total Text_VRAM_Free
- Text_RAM Text_RAM_Used Text_RAM_Total Text_RAM_Free
- Text_MemoryPressure Text_MemoryPressure_Pct
- Text_GPUName Text_GPUVendor Text_GraphicsAPI
- Text_Battery Text_Temperature
- Bar_VRAM Bar_RAM Bar_Battery Bar_MemoryPressure
Sparkline_FPS Sparkline_FrameTime Sparkline_GPU Sparkline_RAM Sparkline_VRAM
For custom layouts, override the Blueprint events to format stats your own way: BP_OnFPSUpdated · BP_OnThreadTimesUpdated · BP_OnMemoryUpdated · BP_OnGraphicsInfo · BP_OnPlatformInfo · BP_OnStatsUpdated
Technical highlights
- Pure Runtime plugin : works in Editor, Development, and packaged Shipping builds
- Zero crashes in any config : every unavailable stat returns a safe sentinel and shows N/A, never a misleading zero
- All stats exposed as a single Blueprint struct (FPerfFrameData) : accessible from any Blueprint
- Uses only HAL platform abstraction : no direct Android/iOS headers, NDK cross-compilation works out of the box
- GPU info and Graphics API cached on first tick : zero per-frame overhead for static data
- Toggle, show, or hide the overlay at runtime via Blueprint or C++
- Full documentation and error reporting links included
* Requires bAllowStatsInShipping=true in packaged builds. Degrades gracefully otherwise.
- Documentation : Github
- Bug Reports : Github
If this plugin saves you time, an honest review goes a long way, it helps more developers find it and tells me what to improve next.