Status
SteamPeaks
ChartsSalesUpcomingPatchesNewsCalculator
New on SteamEvery app, DLC and depot the minute Steam creates itAppsEvery app on Steam, newest change firstPackagesSubs and bundles, and what each containsDepotsDepots, manifests and install sizesTagsSteam's user tags and the games under themDevelopers & publishersCompanies and their cataloguesTechnologiesEngines, SDKs and anti-cheat found in the filesChange historyEvery PICS changelist as it lands
SignalsNineteen readings of the whole catalogueCompareAny games side by sideRecordsAll-time peaks and the days they were setReportsWeekly and monthly write-upsAlerts & newsroomWatch a game, get told when it movesSteam statusIs Steam up, right nowWeb API explorerTry the endpoints in the browser
NewsSteam's own announcements and the sales calendarCalculatorWhat a Steam account is worth, and its pile of shame
/
Sign in
/
SteamPeaks
The ultimate resource for Steam data.
ExploreChartsSalesSales and festsUpcomingPatchesNewsRecordsTrendingSignals
DatabaseAppsPackagesDepotsTagsDevelopersTechnologiesChange history
ToolsCalculatorCompareSearchAlertsSteam statusAPI
SiteMethodologyFAQDiscordSupportSign in via Steam
Not affiliated with Valve or Steam. Game names and artwork belong to their owners. All times UTC.
PrivacyCookiesFair useStatus
s&boxNewsUpdate 26.03.04
In-game event

Update 26.03.04

s&box · published 4 Mar 2026, 18:25 UTC

All newsPlayers around this dateRead on Steam

A new update has been released, you can view the full changes on our blog post.

https://sbox.game/news/update-26-03-04

Here's some highlights from the blog.

Clutter

A new tool has been added to procedurally place objects in your scenes. It is completely independent from the terrain system and supports both prefabs and instanced models. 

It can be used to automate tasks such as procedurally generating landscapes, painting enemies, or even acting as a world grid system. 

Menu Polish

We're polishing the menu ready for release, nothing is significantly different but we're making it all look pretty.

The depressing dark foggy scene is gone and replaced with Flatgrass. The header bar has been spaced out and made transparent. And the latest update is display on the front page.We'll keep polishing stuff bit by bit each week.

UI Multithreaded Rendering

UI could only render on the main thread - now it can render on any thread thanks to command lists. This means whilst your game is rendering the 3D world it can also start rendering the UI layers.

You'll notice a performance boost mostly on low-mid range CPUs and in games with a considerable amount of UI and 3D at the same time.

It can be toggled with the convar r_ui_multithreaded to measure impact.

Profiler Overlay Improvements

We reorganized the timings so they now more accurately break down a the time needed to render a frame. Garbage collection pauses are now also tracked as individual timing, and subtracted from other timing scopes.

We also improved the visuals for various overlays with significant community contributions from @darkfated

Sandbox: New Inventory

The inventory got rebuilt to be slot based. You can drag and drop stuff from the spawnmenu right into your inventory. It's kinda cool.

Sandbox: UI Improvements

The scoreboard and HUD got a new lick of paint. You can also mute people.

Sandbox: Easy Weld Rotate

Brought up the weld tool to gmod parity by adding the ability to rotate after easy welding.

Sandbox: Physgun Screen

We also added a screen to the physgun that spits out info based on what you're doing with it. 

Changelog

🎁 Added

  • Clutter system — the clutter/scatter tool and system has been moved in-engine

  • CSS outline property — outline draws outside a panel's border without affecting layout, matching web standards

  • Multithreaded UI rendering — UI can now render off the main thread

  • New main menu front page — redesigned around flatgrass, refreshed navbar and footer

  • ContentBlock row scroll buttons — left/right scroll arrows appear on hover as an alternative to drag-scrolling

  • DepthTextureRef on RenderTargetHandle — lets you access the depth buffer of a render target in command lists, not just the colour buffer

  • Improved UI drag & drop — new OnDragEnter, OnDragLeave, and OnDrop panel events matching standard web behaviour

  • AdvancedDropdown — ComponentTypeSelector abstracted into a reusable dropdown that supports foldered menus

  • SerializedProperty.GetCustomizable() — creates a customisable copy of a property with an overridable display name and other metadata

  • MemberDescription.DeclaringType — exposes the type that declared the member

  • Json.Serialize / Json.Deserialize — low-level methods plus object/Type overloads for use with IJsonConvert

  • Package.MountAsync() — public API equivalent of the internal PackageManager.InstallAsync

  • Json.Patch, Json.CalculateDifferences, Json.ApplyPatch and related types are now public, along with GameObject.DiffObjectDefinitions and Scene.SerializeProperties()

  • TestAppSystem exposed to user unit test projects, replacing the old Application.InitUnitTest flow

  • Vector2Int and Vector3Int added to TryToType

  • Mirror tool now supports mirroring any selected object type, not just meshes

🧼 Improved

  • UI rendering now uses command lists — panels only rebuild their command lists when something actually changes, reducing per-frame work

  • Performance timing scopes — GC pauses now tracked separately and subtracted from other scopes, so GC spikes no longer bleed into unrelated categories. New Update scope tracks FixedUpdate/Update specifically.

  • Audio mixing allocations reduced — temp lists are reused in-place and the occlusion sort predicate is cached as a static

  • CommandList attribute access — switched from ConcurrentDictionary to a regular dictionary, cheaper and avoids expensive clears

  • Cluster lighting — Cluster::Query now takes a screen-space position instead of world-space, which was unstable near cluster boundaries

  • Razor incremental processing — only re-runs RazorProcessor on changed files and reuses SyntaxTree instances, speeding up hot reloads

  • Debug overlay visual clarity — render stats grouped into categories, timing fixed to CPU/GPU order, new metrics added, low-signal rows removed. Thanks @darkfated

  • SerializedProperty.TryGetAsObject now returns a SerializedObject of the actual runtime derived type, not just the declared property type

  • Close game if Steam is not running — instead of cryptic errors, the game now exits cleanly with a clear message

  • Error reports now correctly embed user information

  • Editor unit tests can now reference built-in tool packages (Shader Graph, Action Graph, Hammer, Movie Maker)

🪛 Fixed

  • DetermineHuman not checking the base model first, breaking dresser clothing for characters with a base model

  • PropertySignal.Compile(timeRange) not clamping the first/last blocks to the requested time range, causing "blocks must not overlap" errors when compiling Movie Maker recordings

  • :last-child pseudo-class updating a frame late when adding child panels

  • Cancelling a purchase incorrectly showing "You purchased X!" after the 20-second timeout

  • DefaultMaterialGroup not working for .vmdl files exported from MeshComponent

  • Clothing properties not serializing to JSON when marked internal — free clothes referenced by resource ID now save correctly

  • ScenePanel — render scenes are now kicked off during Tick, decoupling them from the render texture step.

  • CBaseFileSystem::AddSymLink overwriting the target path of an existing symlink

  • NavArea toggling behaving incorrectly due to stale MakeDirty usage

  • The M key resetting the active mapping subtool when merging vertices

  • Editor splash screen losing its taskbar window icon

  • Minor prefab serialisation and instance ID edge cases

  • An array pool use-after-free exploit — game code's ArrayPool.Shared usages are remapped to Sandbox.PublicArrayPool to prevent reading memory from other sandboxed games

  • Missing HTTP redirect URL validation — redirects are now manually followed so blacklisted local URLs cannot be reached through redirect chains

  • Hammer entity placement always inserting info_player_start instead of the selected entity type. Thanks @Kaikenny

  • Gizmo.Hitbox.Sphere behaving differently from all other hitbox functions, causing rotation gizmo priority and clickability issues. Thanks @nixxquality

More from s&box

Other announcements

All news
In-game event8 Sep 2026Update 26.09.08A new update has been released, you can view the full changes on our blog post. 2D Physics s&box now has 2D physics, powered by Box2D (yes, like Box3D). Switch the physics mode in your scene settings and bodies will simulate in the XY plane, using the same physics components and APIs you already know instead of having a 2D and 3D API split. Open Video Game Jam The Game Jam III has begun with a…Community4 Sep 2026Game Jam IIIThis is our third game jam. This time we have a £50,000 total prize fund up for grabs. The way our jams run have now changed. On the 4th September we'll announce the theme and you can submit your games. Users will be able to nominate your game. On the 28th September the 5 games with the most nominations will go into the finals. Each day the one with the fewest votes will drop out until there ar…In-game event1 Sep 2026Update 26.09.01A new update has been released, you can view the full changes on our blog post. New Main Menu I am aware that us re-doing the menu is a meme at this point, but the main menu has once again been rebuilt. The common complaint we get is that there are no good games. I think there are good games but we're not sufficiently putting them in front of people . Their instinct is the click on the server b…