Skip to content

Stride 4.4.0-beta3

Pre-release
Pre-release

Choose a tag to compare

@xen2 xen2 released this 17 Jul 08:50

Stride 4.4.0-beta3

Highlights

📦 Per-package asset URLs and namespacing

Assets now live under a rooted, per-package address like /MyGame/UI/Title or /MyPlugin/Effects/Foo instead of a single flat pool shared by everything you reference. Each package owns its own namespace, and you can use another package's assets by name in the same way you using a C# namespace.

  • Libraries turn on namespacing automatically at pack time, so anything you publish as a NuGet plugin ships with a clean, non-colliding URL prefix.
  • Games stay bare by default and opt in with a StrideAssetNamespace setting, so existing projects keep working exactly as before.
  • Reference fields in the editor show just the asset name, with the package prefix dimmed to the side and the full URL in a tooltip.
  • Same-package references are saved bare and are automatically re-qualified on load, so switching a game to a namespace doesn't churn your files.
  • The asset tree shows a package's contents at its root — the package is the namespace, so paths no longer look doubled up.

🔁 Asset replacement

Any asset can now declare a Replaces target. When the project is built, the replacing asset takes the replaced asset's URL and content, so plugins can override built-in or third-party content without editing the original.

  • The editor shows a "Replaces" link row on the asset and a small badge on the tile it replaces, and there's a "Clear replacement" command to undo it.
  • The viewport and previews follow the redirect live: edit the replacing asset and the running scene reflects it without a rebuild.
  • Session diagnostics flag conflicts (two assets replacing the same target, cycles, etc.).

🏷️ Typed asset URL constants

Projects now get a generated Assets class with typed constants for every asset in the build (e.g. Assets.Scenes.MainScene), so you can reference content by an IDE-completed symbol instead of a raw string. Renames flow through as compile errors instead of silent runtime "content not found".

🖥️ Editor / Game Studio

  • Fixed the settings window crashing when two settings translated to the same display name (e.g. "Reset camera" in several locales). (#3260)
  • Fixed Update Platforms crashing when re-adding a platform that had just been removed.
  • Fixed Update Platforms spawning an unwanted .Game package when run against a project created before 4.4. (#3262)
  • Reference fields now refresh immediately when the asset they point at is renamed or moved — no more stale labels.
  • If the graphics API a project was saved with isn't present in your local build, Game Studio now offers to fall back to an available one instead of refusing to start.
  • Save no longer accidentally mutates in-memory override metadata while writing it to disk.
  • Copy/cut checks, the asset file dialog, the sound preview and the shader import path were all updated to understand the new namespaced URL form.

🎮 Graphics & Shaders

  • Fixed the F7 GPU profiler crashing hard on Vulkan (FastTextRenderer was drawing into a closed command list). (#3261, #1020)
  • Fixed shaders recompiling on every launch: a stale flag could strip the source hash from a cached shader, making the next run think the cache was invalid. Old poisoned cache files are now detected and rewritten. (cc7ca73)
  • Fixed wrong constants in generated shader parameter keys when values used scientific notation, and cleaned up type/suffix handling in the generated C#. (#3250)

🧨 Physics (BEPU)

  • Fixed static collidables ignoring position/rotation updates — moving a static body now actually moves it. (66a910b)
  • Translation and rotation fed to BEPU are now validated, so bad values give a clear error instead of a native crash. (5f01a46)
  • Skip the inertia calculation for StaticComponent — small perf win, avoids pointless work for shapes that will never move. (518e006)

🔊 Audio

  • Fixed a macOS shutdown crash where OpenAL's render thread could touch a context that had just been destroyed. (3e52f84)
  • Fixed a crash on Destroy when a Sound was created but never actually loaded. (13a902b)

🐧 Cross-platform / Build

  • Fixed the ffmpeg native binaries not landing in the right place inside the package, so Linux and macOS builds now get a working ffmpeg again. (243045b)
  • Deployed native libraries are now part of the up-to-date check, so builds correctly notice when a native is missing or has changed. (913f969)
  • Worked around a broken Xcode 26.6 tool-resolution behaviour on macOS/iOS builds.

🔧 Under the hood

  • The editor's asset build cache is now placed under the game library and shared across all platform builds, so Update Platforms can no longer wipe out the cache that Game Studio is actively using. A background sweep also trims entries the open session hasn't touched in a while, keeping the cache from growing without bound.
  • UpdateEngine's type registries are now thread-safe, fixing a rare crash when animation compilation and script member registration ran in parallel.
  • Fixed a case where per-package flattened dependencies were wrong when a project was loaded from its build manifest. (#3258)
  • Quantum's array collection handling was rounded out, and a batch of previously-ported core asset/quantum tests were adapted and re-enabled.
  • Improved handling of cross-targeting build-trigger references to avoid a spurious MSBuild reference-resolution error.
  • A Repo File Guard job now blocks accidental commits of oversized non-LFS binaries and enforces LFS integrity on a set of tracked binary file types.

Full Changelog: releases/4.4.0-beta2...releases/4.4.0-beta3