Last Week in Unreal: 5.8.4 Is Out, and ue6-main Renamed UnrealBuildTool’s Public C# API (October 19 to October 25, 2026)

Week of October 19 to October 25, 2026 | 1,420 commits on ue6-main, 139 on ue5-main, none on the public 5.8 branch | Branch: ue6-main
Overview
If you ship on 5.8, the news this week is that 5.8.4 is out. Epic tagged 5.8.4-release and published the GitHub release on Tuesday, October 20. The release commit merges the public 5.8 branch as it stood on October 5, so 5.8.4 is the hotfix candidate we covered two weeks ago: the version bump and its 108 cherry-picks, with nothing added since. None of the ue5-main fixes we recommended last week made it in. The last section has what to cherry-pick on top of 5.8.4 now.
On ue6-main, the change most likely to break something you own is in UnrealBuildTool’s C# surface. Public fields on PluginDescriptor, ModuleDescriptor, DataDrivenPlatformInfo, and eight other types lost their b prefix (856d5568), and public parameters across UBT, outside the rules classes, became camelCase (7151a09a). Build.cs and Target.cs files are untouched, and so are config keys. Custom UAT, BuildGraph, and Gauntlet script modules that touch those types are not.
Build machines also get some one-time costs. Every Linux compile action reruns once (3cfeeca0), the engine’s cook incremental version changed four times, which invalidates every package in the next incremental cook, and another commit forces “a one-time recook of all Blueprints” (d3fec693). If you self-host Horde with tracing, read the Horde section: MongoDB spans had been exporting “service account tokens and signing keys” to Datadog (f94916d0).
At 1,420 commits, ue6-main had its busiest week since we started tracking it in mid-June, up from 1,149 last week. The previous high was 1,168, two weeks ago. The volume is spread out: 329 authors committed, against 297 last week. Among named subsystems, build leads at 139, followed by editor at 101, core at 76, rendering at 66, and tools at 43.
Development Trends
Cook determinism is now a named project
Pattern: two Jira tickets, UE-399933 and UE-399934, account for 22 commits this week on cook determinism and multithreaded-save safety. K2Node pins added by a reconstruction now “get ids derived from the node and pin instead of random ones,” because “cooked bytes and dependencies depended on load order, and MT save requires saves to be read-only” (ca45c0ac). The same kind of fix landed on ue5-main for load-time GUIDs, covered in the 5.8 section.
Interpretation: the other half of the same week is the engine’s CookIncrementalVersion GUID, which the source says to change “when all packages in all platforms in all projects need to be invalidated in the next incremental cook.” It changed four times. Three were standalone bumps with messages that read “Code change not picked up” (9e0a863d), “native change not picked up” (fd6ce123), and “ini change not picked up” (afe7331d). The fourth came inside a SavePackage change (9d47cf21). The three standalone bumps are each a case where incremental cook missed a dependency and the fix was to invalidate everyone’s cook. Two changes this week close specific gaps instead: native enums are now recorded as Blueprint cook dependencies (d3fec693), and packages are invalidated when their AssetManager primary-asset registration changes, a bug where “stale cook results … are served forever on any machine that cooked during the bad window” (64ad9638). Epic is making incremental cook trustworthy enough to rely on, and paying for it with full recooks along the way.
Who cares: cook and build engineers, anyone with incremental cook, a shared DDC, or patch diffs in their pipeline.
Signal strength: Strong.
Agent tooling grew again, and more editor systems became script-callable
Pattern: counted by commit path the same way as last week (the experimental Toolsets, ToolsetRegistry, and AIAssistant plugins, ToolsetCore, and AsyncFunctionResult, with mesh modeling toolsets excluded), the cluster came to 55 this week, against 45 last week.
Interpretation: the path count still misses the larger shift we described last week, where agent tools land on the editor’s own scripting API. This week UMG gained “the one scriptable and AI-callable API for Widget Blueprint authoring” (bdbe46b0), with editor subsystems for Landscape (2ad081e2) and Sound Cue (2686c853) alongside it. If you maintain Python or Blueprint editor automation, these are the same functions agent tools are meant to call. The Landscape one is tagged experimental, so expect it to change.
Who cares: tools programmers and pipeline teams with editor automation.
Signal strength: Moderate.
TL;DR
- 5.8.4 shipped on October 20. It is the candidate from two weeks ago, unchanged. Last week’s recommended
ue5-mainfixes are not in it. The 5.8 section lists what to cherry-pick now. - UBT’s public C# names changed.
b-prefixed public fields lost the prefix (856d5568) and public parameters became camelCase (7151a09a). Build.cs, Target.cs, and everyBuildConfiguration.xml, ini, and command-line key keep their names (12c49e8d,4708417a). Custom UAT and BuildGraph script modules that use the renamed fields or pass parameters by name will need edits. - Budget for rebuilds and recooks. Every Linux compile action reruns once (
3cfeeca0). The cook incremental version changed four times (9e0a863d,9d47cf21,fd6ce123,afe7331d), and a separate change forces a one-time recook of all Blueprints (d3fec693). - Self-hosted Horde with tracing: treat old spans as sensitive. MongoDB command spans had sent “service account tokens and signing keys” to Datadog, and trace-level logging had the same problem (
f94916d0). - Defaults moved. Mac and Android audio cook to BINKA instead of OGG (
b5cc4e88). Device profile CVar apply mode 2 is the default (5b16c224). Shader libraries release unreferenced shaders (78636631). Audio Modulation and the Waveform Editor are enabled by default (62ac9f8d). - If you ship on 5.8: on top of 5.8.4, take the physics handle use-after-free fix that calls itself “hotfix safe,” the Niagara redo crash backport, and the CEF crash pair. Details are in the 5.8 section.
Highlights
UnrealBuildTool renamed its public C# API
What changed
A run of naming-convention commits went through UBT and its neighbors.
- Public fields. “The b-prefixed public fields and properties of PluginDescriptor, PluginReferenceDescriptor, ModuleDescriptor, PluginInfo, DataDrivenPlatformInfo, InstalledPlatformInfo, CryptoSettings, MobileProvision, UEBuildBundleResource, UEAppXResources and IAndroidDeploy drop the b” (
856d5568). The diff renames, for example,bCanContainContenttoCanContainContentandbInstalledtoInstalled, with no obsolete aliases. File formats do not change: the descriptors use “string keys,” andCryptoSettingskeeps its JSON keys “through JsonPropertyName.”UnrealArch.bIsX64andUnrealArchitectures.bIsMultiArchkeep their names because Build.cs and Target.cs files read them. - Public parameters. “Public and protected parameters become camelCase,” so “bIncludeUnbuildablePlatforms becomes includeUnbuildablePlatforms.” The commit is direct about the impact: “Parameter names don’t affect compiled callers, but source that passes them as named arguments needs the new names” (
7151a09a).b-prefixed parameters of publicEpicGames.Core,EpicGames.MsBuild,EpicGames.BlobStore, andEpicGames.UHTmethods lost the prefix too, so “bRecursive becomes recursive” (202f3827). - What stays. Config-bound fields were renamed too, but “the 75 XmlConfigFile attributes that relied on it now set Name to the old name, and every BuildConfiguration.xml key, ini key and command-line flag stays as it was” (
4708417a). The rules classes “keep their names, b prefixes included” (12c49e8d). - A new build error. “AutomationTool: script modules and UBT plugins fail to build if a reference sets Private or hides runtime assets with PrivateAssets” (
6048260e). This one was backed out once and relanded the same day. - More analyzer rules. The shared C# projects switched on 38 CA and IDE rules plus CA1304 and CA1311 (
db25ed7c,a1817263). BuildGraph.Automation already treats warnings as errors, so it needed 22 fixes to keep compiling (f4eed5e3).
Why this is important
None of this touches the files most teams edit. It does touch the code build teams write around the engine: UAT commands, BuildGraph tasks, Gauntlet tests, and UBT plugins that read plugin or module descriptors, or call UBT methods with named arguments. Code that uses a renamed field or passes a renamed parameter by name will fail to compile after a sync, and the fix is mechanical. The PrivateAssets check can fail plugin builds that compiled last week.
Who should care
Build engineers and tools programmers with custom C# automation.
Urgency
Act now if you maintain UAT, BuildGraph, or Gauntlet script modules.
Linux and Clang builds: a one-time full rebuild, smaller shared libraries, clang-tidy
What changed
- Every Linux compile reruns once.
LinuxToolChainrepeated the global arguments in every per-file response file. The override was removed, and “Every Linux compile action reruns once because its response file changes” (3cfeeca0). - Dead code stripping for shared libraries. “Shared libraries are now compiled with -ffunction-sections -fdata-sections and linked with –gc-sections, as executables already are.” The commit reports “a several percent size decrease of modular builds (from about 3% on SCW to almost 7% of CW). Speed unaffected” (
a0e61c79). - clang-tidy. A new
StaticAnalyzer.ClangTidyfor clang toolchains “Requires LLVM 20 or later” (78e5d436). The diff enforces it: UBT throws when the clang major version is below 20. The same diff bumps the makefile version, which the message does not mention. - Makefile version. A separate change bumps it as well, with the makefile shrinking “from 9.98 MB to 9.57 MB” (
52e582b9). Expect UBT to regenerate makefiles on the first build after syncing. - PCH settings in ini.
bUsePCHFilescan now be set in ini config (e2827732). The diff also marksbUsePCHFilesandbChainPCHswith[RequiresUniqueBuildEnvironment], which the message leaves out, so a target that changes either one from the default now needs a unique build environment.
Why this is important
The rebuild is a one-time cost, but on a Linux farm it lands on every agent at once. Plan the sync for a quiet window. The --gc-sections change alters what ends up in modular Linux shared libraries, so if your server tests rely on a symbol nothing references, check it after the sync.
Who should care
Build engineers running Linux agents or dedicated server builds, teams adopting clang-tidy.
Urgency
Act now on capacity for the first Linux build. Track the rest.
Cook: recooks this week, and fewer surprises after
What changed
- Full recooks. Four changes to the engine’s cook incremental version, three standalone (
9e0a863d,fd6ce123,afe7331d) and one inside a SavePackage fix (9d47cf21), plus a Blueprint cook dependency version bump “to force a one-time recook of all Blueprints” (d3fec693). - Stale cook results. Packages are now invalidated when their AssetManager primary-asset registration changes. Before, “stale cook results … are served forever on any machine that cooked during the bad window” (
64ad9638). - Fewer cook fatals. “Attempt to map an object during save that was not listed as a dependency” is now an error instead of a fatal. The commit notes “Errors are sufficient to block the cook” (
10037386). - Cooks without material shaders. A new
-NoMaterialShaderCompilecook option “does not compile material shaders and does not fetch finished material shader maps from the DDC” (31450896). - DDC shader uploads. “A Lyra WindowsClient cook with -DDBShaderCompile uploaded 119 worker packages (~8 GB) for one ShaderBuildWorker.” It now uploads once per worker per session (
0acdfdb8). - Zen. The engine now drives “zenserver lifecycle through the zen CLI instead of reading its lock file and shared state” (
c00773bf), which requires the zenserver v5.8.27 update that landed this week (02ebdd87). - ODSC. The editor can now host the ODSC server: “The editor can now host the server, and it tells the clients what changed,” and “The ODSC commandlet workflow remains available and unchanged” (
370a3b04). A cooked non-Shipping client “can now start with no ODSC command line and be connected to a server from the console” withODSC.Connect(04cd1150). One flag did change: “Replace -heartbeat with -odscheartbeat=” ( 1c9a1cee). The diff swaps the parsed token outright, so a script passing-heartbeat=gets the default with no error.
Why this is important
The bumps cost a full cook on every machine that syncs. The two dependency fixes are the reason to accept that cost: both are cases where incremental cook returned the wrong result with no warning. If your CI passes -heartbeat= to the ODSC server, rename it to -odscheartbeat=. The old flag is ignored without an error, and the server falls back to logging its state every 30 seconds.
Who should care
Cook engineers, CI owners, teams using ODSC or a shared DDC.
Urgency
Act now on recook capacity. Update the ODSC flag on your next script pass.
Defaults that moved this week
What changed
- Mac and Android audio format. “Change platform default to BINKA for Mac and Android platforms” (
b5cc4e88). The diff changesPlatformFormatandPlatformStreamingFormatfromOGGtoBINKAinAndroidEngine.iniandBaseMacEngine.ini. iOS is not touched. - Device profile CVars. “DeviceProfiles: enable CVar apply mode 2 by default” (
5b16c224). Device profile CVars are now applied through the profile chain, and plugin config changes that leave the chain unchanged update CVars in place. “The legacy behavior remains available via dp.CVarApplyMode=0 or -DPApplyMode=0.” - Shader library memory. The shader library now releases “cached shaders after their last external user goes away,” typically a pipeline state, where before it kept them “until the library is destroyed.” It is controlled by
r.ShaderLibrary.ReleaseUnreferencedShaders, on by default, and setting it to 0 restores the old behavior (78636631). - Plugins on by default. Audio Modulation and the Waveform Editor (still marked beta) flip
EnabledByDefaultto true in their.upluginfiles (62ac9f8d). - Linux cook device profiles. Linux now cooks “with the target platform’s device profile (LinuxClient, LinuxServer) instead of the base Linux profile, matching Windows and Mac” (
4bd217cd). - Mac Metal tiled GPU.
bTargetsTiledGPU=truefor “METAL_ES3_1, METAL_SM5 and METAL_SM6 (desktop Macs included),” which “enables RDG render pass merging on all of them.” Desktop SM5 and SM6 keep the full desktop TAA (b5e8ca94). - Network bunch size.
net.MaxConstructedPartialBunchSizeBytesgoes from 64 KiB to 256 KiB “so non-Iris matches what Iris can already replicate” (d6f554de). - Scene annotations.
r.SceneAnnotationswas added default off on Monday (c789ee8c, relanded the same day after a backout) and turned on inBaseEngine.inithe next day as a “Temporary switch while rolling scene annotations via StateStream out” (aecc6220), so billboard and Mass editor sprites render through the state stream path. - Mobile ambient lighting volume. On the mobile deferred renderer, the ambient lighting volume tint bake “now runs at half resolution by default (r.AmbientLightingVolume.MobileBakedTintsDownsample=2).” Set it to 1 for the old full-resolution bake (
437ad041). - Gameplay Ability System log level. A new
AbilitySystem.Debug.WarnOnUninitializeWhileLockeddefaults to true and logs at Error level (a782cbe3). The message says “No behavior change,” but a new Error log can fail a CI job that gates on log errors.
Why this is important
The audio change means Mac and Android projects that never set these keys will cook different audio after a sync, with different size and CPU cost. The device profile change affects every platform: if you rely on CVars being reset and reapplied when plugins change config, test with dp.CVarApplyMode=0 to compare. The shader library change should lower shader memory over a long session. A released shader that is needed again has to be loaded again, so compare memory and hitches against a pre-sync capture.
Who should care
Audio programmers, Mac and Android teams, platform and memory owners, CI owners with log-error gates.
Urgency
Act now on audio format if you ship Mac or Android. Track the rest at your next sync.
Horde and UBA: a secrets leak closed, and a timeout now enforced
What changed
- Secrets in traces. “The MongoDB tracer exported the full filter and update documents as the db.statement span attribute, so service account tokens and signing keys reached Datadog. Trace-level command logging had the same problem.” “The values of a fixed list of sensitive fields are now replaced with
in both places” ( f94916d0). - Driver grace period. When the agent stops waiting for the job driver, it now kills it before job batch cleanup starts. Before, a driver still writing output when its grace period ended kept running, and “the two cleaned the workspace at the same time. That fails the cleanup and can leave the agent below a workspace’s conform threshold” (
e08933de). - Job scans. A jobs query that filters by target, state, outcome, or cancellation now “stops after 5000 jobs with a 400 response,” and a negative index or count also returns 400 (
43a0ada2). - Config that never applied.
maxFileScanConcurrencyfor managed workspaces “never took effect.” Configured values now apply (84477f0d). - UBA. A rejected cache hit “reruns as a cache miss instead of asserting” (
9923a5fc). On Linux, a “SIGSEGV in IsRadObj, UBT exit code 139” with-UBAStoreObjFilesCompressedis fixed (313725ca). - Gauntlet device leases. When a device reservation lease was lost mid-block, later test steps skipped the install and “either fails to launch or runs an older build left on the device” (
6a9da241, with the companion Horde device service fix in14ca5592).
Why this is important
The tracing fix is the item to act on. If you run Horde with Datadog or another OpenTelemetry backend, spans retained from before this change can contain tokens and signing keys, and the fix does nothing about them. Rotate the credentials or purge the spans. The grace-period change will show up as “Killing job driver (pid N)” in agent logs, which is expected now. The scan cap can break dashboards or scripts that filter large job histories by state, outcome, or target.
Who should care
Horde administrators, security owners, build engineers.
Urgency
Act now on the tracing exposure if you self-host Horde with tracing. Track the rest.
Ray tracing got cheaper, and RenderCore signatures changed
What changed
- Payload size. The closest-hit payload went “from 64 to 32 bytes,” packing normals as 8:8 octahedral, which the commit notes “can make banding visible.” Measured “5.7ms -> 5.65ms” (
e64a02ad). The diff also adds anEShaderPlatformparameter to public RenderCore functions, includingGetRayTracingPayloadTypeMaxSize, which the message does not mention. - RHI thread. A D3D12 shader binding table change “Saves about 0.3 ms per frame on the RHI thread in CitySample in steady state” (
84c21016). - Virtual texture feedback. Removing ray tracing VT feedback took a test from “3.19ms->3.05ms” (
6e956773).
Why this is important
These are GPU and RHI time savings measured on Epic’s content, with small tradeoffs: possible normal banding on secondary rays, and no virtual texture feedback in legacy ray traced translucency and ray tracing debug views. The signature change will break plugins or engine forks that call those RenderCore functions, and changed shader map keys mean a ray tracing shader recompile after syncing.
Who should care
Rendering engineers, teams with ray tracing plugins or renderer modifications.
Urgency
Track. Act now if you have code calling the changed RenderCore functions.
Removals and API breaks
What changed
- Core deprecated APIs. The message says only “Remove several deprecated APIs” (
3d9c6221). The diff removesTExternalMutexandFExternalMutex,FRefCountBase,FThreadSafeRefCountedObject,SerializeBacklog, severalTStringBuilderBaseconstructors, and more, all previously marked deprecated. - A global gone. “Code that declares
extern ENGINE_API FName GStaticMeshPackageNameToRebuildwill fail to link” (a409aa9a). - Descriptor range flag.
bSupportsDescriptorRangeandPLATFORM_SUPPORTS_DESCRIPTOR_RANGEare removed, including from the Android, Linux, Mac, and WindowsDataDrivenPlatformInfo.inifiles (f9dbd4be). - HDR output devices. Output device values 4 and 6 now resolve to 3 and 5, with a warning “once per deprecated value per process.” The enum names change, and the old names remain as deprecated aliases (
03a2fd4b). - Consteval macros.
UE_CONSTEVAL,UE_IF_CONSTEVAL, andUE_IF_NOT_CONSTEVALare deprecated: “use C++23 consteval keywords directly” (21fab2ac). - Mobile distortion.
r.Mobile.Distortion.BeforeTranslucencywas removed, and “Distortion is disabled with mobile MSAA” (f2ea81f0).
Why this is important
The removed symbols (3d9c6221, a409aa9a, and the descriptor range globals) become compile or link errors in licensee code. The consteval macros and the old HDR enum names only raise deprecation warnings for now. Removed CVars and ini keys are simply ignored, and a custom shader that checks #if PLATFORM_SUPPORTS_DESCRIPTOR_RANGE now quietly skips that code instead of failing, so grep your shaders for it. Any project config that sets HDR output device 4 or 6 will log a one-time warning when HDR output starts.
Who should care
Engine programmers with custom modules or platform extensions, mobile rendering teams.
Urgency
Act now if your code uses any of the removed symbols.
Security and data safety
What changed
- Unreal Toolbox install folder. A “Users full-control grant on the install folder” was removed, and install and repair now delete unknown top-level files there, because older installers let any user add files and “Windows searches the exe’s folder for DLLs first” (
4803109a). - EOS account ids. The code “trusted the client-supplied flag byte and sliced 16-byte views out of the array without checking its size.” That out-of-bounds read is fixed (
c35b573b). - HTTP server request framing. The embedded HTTP server used by Remote Control and MCP read only the first
Content-Length, which “let a peer frame the same request with a different length.” It now rejects unequal or invalid values with HTTP 400, and a PUT or POST withoutContent-Lengthgets HTTP 411 (f2031dd5). - Android downloads. “On f2fs, a forced reset or battery death can keep a partial .temp file’s length but lose its newest data (zeros),” which produced “correct-size files containing zeros.” Resume now goes back to a recorded flushed offset, and only against a strong ETag. Without one, “an interrupted file restarts from 0” (
dcee8796). - Garbage collection. A Verse interop struct copy “stores the pointer without UE::GC::MarkAsReachable,” so the next GC “walks a dangling pointer” (
6ce70e04).
Why this is important
The Android download fix addresses corrupted installs on real devices after a battery death, and it changes resume behavior on CDNs without strong ETags. If your CDN sends no ETag, only weak ones, or different ETags across hosts, any interrupted file restarts from zero, and a file that takes longer than the call timeout cannot complete. The Toolbox and network fixes close holes that do not need your code to be wrong.
Who should care
Mobile live-ops teams, network programmers, IT and security owners.
Urgency
Act now on the CDN ETag question if you ship Android background downloads. Track the rest.
Worth Tracking
A UObject memory layout change that did not ship. “Enable UE_STORE_OBJECT_LIST_INTERNAL_INDEX by default when FName is 4 bytes” (1d202192) was backed out the same day (60c26339) with no reland this week. It is not on by default. When it comes back, it changes how FUObjectItem is packed, which matters to anyone who reads UObject array internals directly.
Runtime feature level switching landed, compiled out by default. A new path lets DX12 and Mac Metal switch between SM6 and ES3.1 at runtime. The diff sets WITH_RUNTIME_FEATURE_LEVEL_SWITCH to 0, targets opt in by adding WITH_RUNTIME_FEATURE_LEVEL_SWITCH=1 to their global definitions, and the commit notes “This increases CPU shader memory” (ea80e207). Nothing changes until a target opts in or the default flips.
Follow-ups on earlier posts. Horde’s client-side demand reporting, RigVM operand-type validation, and the switch from Breakpad to Mozilla dump_syms, all backed out with no reland in earlier weeks, did not come back this week. UE_USE_COMPACT_SET_AS_DEFAULT is still 0. The VS2022 compiler drop was not reversed. Generate Project Files can now run “when no Visual Studio installation is found” (91efcd4e), and the diff shows it falls back to the VS2026 project format.
What We Ignored
This week we ignored most of the 1,420 commits: UAF and animation work, Python and MCP scripting exposure, SceneGraph and Mass changes, AI Assistant UI, Verse and UEFN work, Horde dashboard cosmetics, Unreal Toolbox app work, StyleCop renames inside UBT, test automation, and narrow editor crash fixes. There were 32 commits tagged [Backout], against 26 last week, inside the normal band for this branch. Most relanded in-window.
A few did not come back, so they did not ship despite titles that sound finished: “Mark FSharedRecursiveMutex as AUTORTFM_DISABLE” (3a4ca814, backed out by b780f965), a Texture G16 sRGB change (a376a53a, backed out by 13fc7a78), and the UE_STORE_OBJECT_LIST_INTERNAL_INDEX default covered above.
For teams shipping on 5.8
5.8.4 is out. The 5.8.4-release tag was created on October 20, and the GitHub release “Unreal Engine 5.8.4” went up the same day, describing itself as “Unreal Engine source code for version 5.8.4 (changelist 58902052).” The release commit, f45729c0 on GitHub, merges the 5.8.3 release with c40b8904, a 5.8 branch commit from October 5. That commit includes the “Update version for 5.8.4” bump and all 108 cherry-picks we reported in the October 5 to 11 edition. The only 5.8 commits after it are four Localization Automation commits, and the branch took none this week.
What is not in 5.8.4. The release was cut from the branch as of October 5, so nothing submitted to ue5-main since then is in it. That includes every fix we recommended in last week’s edition: the Mac editor exit crash, the shader compile hang with async compilation off, the movie staging pair, the macOS 15 Xcode copy fix, the GDK fixes, and the ServerMutePlayer crash. None of them is on the 5.8 branch. They are still cherry-pick material on top of 5.8.4.
This week on ue5-main. 139 commits, 5 of them Localization Automation, no backouts. 108 of the 133 non-localization commits have titles identical to ue6-main commits this week, so they look like simultaneous submits rather than backports. More than 30 are UAF animation framework work, and 10 are one engineer’s series of hardware ray tracing fixes, validation, and refactors. Neither is hotfix material. Everything below is on ue5-main only, not on the 5.8 branch.
Worth cherry-picking onto 5.8.4
- Physics handle use-after-free.
UPhysicsHandleComponentcached the grabbed body’s physics proxy and never revalidated it, so a destroyed or recreated physics state left it “pointing to a freed proxy.” The commit calls it a “.cpp-only change, no header/ABI change (hotfix safe)” (b3cd606d). A commit with the same title landed onue6-mainthe same day. - Niagara redo crash. “Backport CL 58840098 to Dev-Release-5.8: bind the details customization through its shared lifetime so redo cannot invoke a deleted raw delegate receiver.” The commit calls itself an “Exact manual backport” (
04ac1fb5). It is the onlyue5-maincommit this week that names 5.8 as its target. - CEF crashes. A crash on CEF reload after a failed initialization, where “libcef.dll is reloaded at a different base address” and a kept pointer “becomes stale” (
2d41da62). And Chromium’s internal stack profiler, which “causes random crashes when unwinding GameThread’s stack,” is now disabled (145e0230). The commit title says “on PC,” but the one-line diff sits outside the file’s Mac-only block, so it applies wherever that file compiles. - Editor crashes and asserts. Reset to Defaults in Editor Preferences crashed on a temporary CDO name collision (
c5ea49e2). Slate screenshot requests for skipped windows could “write into freed arrays” (c53abce1). An assert inFWindowsWindowfired when desktop composition changed, for example during a “hybrid GPU switch, display sleep/unlock, Remote Desktop” (7c57899c). - Metal PSO validation. PSOs with and without a depth attachment could share a cached pipeline state and fail validation (
6db92dfa).
Take if you hit them
- Cook determinism. Load-time GUIDs in Dataflow, MovieGraph, MovieScene, UAF, and anim sync markers were “regenerated on every load, so the same asset cooked to different bytes on every cook” (
4bfd2c6c). This changes how those GUIDs are derived, so treat it as a deliberate change, not a drop-in fix. Related: cooked PoseSearch databases could “mismatch between memory and disk” depending on cook order (bf6bb53f). - Skinned mesh DDC. Skinned assets waiting on compile dependencies were finalized at editor shutdown “without ever having been built,” which caused “populating incorrect DDC” (
8e75199c). - nDisplay. The PFM/MPCDI preview mesh exporter read “one full row past the end of the warp map buffer (about 30 KB for 1920x1080)” on every preview build (
f3735819).
Closing
If you ship on 5.8, move to 5.8.4 and then cherry-pick the physics handle, Niagara, and CEF fixes on top. If you track ue6-main, expect a full Linux rebuild and full recooks on the first sync, and check your C# automation and ODSC scripts before you blame the build.
Commit SHAs are cited inline, in parentheses, next to each claim. They reference the ue6-main branch of EpicGames/UnrealEngine, except in the “For teams shipping on 5.8” section, where they reference ue5-main (the 5.8.4 release and 5.8 branch commits are named in the text without inline references).
Never miss a ue5-main update.
Get them delivered straight to your inbox.


