This was always the plan, but we've finally open sourced our Sandbox gamemode for you to learn from and take stuff from. You can also make pull requests and report issues in the GitHub repository.
We've moved our documentation source code to GitHub, it was all already in markdown so it wasn't that difficult. This means it's open source, anyone can create or edit documentation with a pull request.
When the GitHub repository is updated the changes are synced to our docs page on this website.
This isn't a replacement for us writing documentation ourselves, if anything this makes it easier for us to do it too. But it's also something everyone has been asking to help out with for a while now, and given the quality of open-source contributions to the engine, it just makes sense.
Love it or hate it, people are using AI to code and it's trying to read our documentation. Instead of AI needing to request, crawl and read entire web pages, we've added a couple of things to help it along (and get off our servers):
llms.txt — a file llms look at to understand s&box as well as further links to all documentation pages
docs.md — appending .md to the end of any documentation page now outputs it in raw markdown, no html, no javascript, no styles.
Keeping with our goal to improve our platform's UI before release, we've made improvements to the UI for the games hub.
There's a nice big carousel showing featured games, and we're now using the new game card component, giving us consistency with the new home screen and the new hub.
We still have more improvements to make to the whole menu before and after we release.
I've added Doo to the engine. Doo aims to be a simpler, friendlier version of ActionGraph.. It's got very deliberate constraints and restrictions, it's not designed to build whole games in, or do crazy logic in. It's meant to be a more advanced version of EntityIO.Usage is simple, in a component define it:
[Property] public Doo OnPressed { get; set; }
Then to run it
Run( OnPressed );
// or with arguments
Run( OnPressed, config =>
{
config.SetArgument( "user", presser );
} );
This has been blocking us adding a standard library of components for mapping, so that's gonna be next to really test it out.
Noticed a lot of our frametime on Steam Deck on the main menu comes from the 2nd sunlight shadow cascade.
The only thing missing from our new CSM implementation that didnt carry over was that we never re-renderered what's inside the previous cascade previously, I have dealt with that.
Seeing that we now use a spherical cascade I derived that we can have our shadow far-z be at the edge of the sphere, also making the far plane cull off anything in beyond the sphere bounds.
Should improve perfomance in areas with a lot of sun shadowing.
I added two new NPCs this week. One is a simple combat NPC that tries to shoot and kill you with a gun.Another one is the Roller. This one is early days, but it's all physics-based, rolls over and leaps at you.NPCs kills are in the kill feed now too. Our NPC framework is open sourced as part of us making the gamemode publicly available, so feel free to copy and paste it into your own projects!
I added a bunch of stats & achievements, so get hunting! I'll be adding more of these. Got any ideas?
26.04.08
26.04.08
8 April 2026
🎁 Added
Doo, a simpler visual scripting system for wiring up component events — designed as a friendlier alternative to ActionGraph for common use cases
Mesh cable tool in the mesh editor for creating cables, working similarly to Hammer
New games dashboard with a rotating carousel and redesigned game cards
`lang.showkeys` cvar and editor toggle to display localisation keys instead of translated text for debugging
CSS `overflow: clip` and `overflow: clip-whole` properties for UI element clipping
CSS `background-playback-state` property to pause video backgrounds
`[ShowIf]` and `[HideIf]` attributes now support null checks
Center option added to the pivot list in mapping tools
`IFormattable` whitelisted for use in the sandbox. Thank you @RumBugen!
🧼 Improved
Texture editor moved into the inspector - Thank you @boxrocket6803!
Cascaded shadow map exclusion culling — shadows no longer render beyond each cascade boundary and objects from previous cascades are no longer re-rendered, significantly improving shadow performance
Networking thread now processes messages at the same tick rate as the main thread
Particle sprite GPU upload performance — buffer uploads moved into valid Graphics.Scope to avoid unnecessary render context creation
Network packet byte arrays are now pooled in DecodeStream, reducing GC pressure for large compressed payloads
Fixed a Steam buffer GCHandle leak where N-1 handles would leak per broadcast packet; replaced with a cheaper memcpy approach
`Package.MountAsync` now supports mounting specific package revisions, allowing games to pin map versions
`LoadingScreen.IsVisible` is no longer overridden every frame, allowing games to manually control loading screen visibility
`Game.ChangeScene` now shows a loading screen for all clients instead of just the host
Engine overlays remain visible during loading states
ScreenPanel `Scale` property now works when Auto Scale is enabled, and `Opacity` now correctly affects ScreenPanels
Undo support for WrapTextureToSelection and WrapTexture operations in the mapping tools
Pause modal now uses the lighter HtmlPanel instead of a full WebPanel
Launcher window geometry is saved when auto-closing
PATH changes are now a no-op on non-Windows platforms. Thank you @MrSoup678!
🪛 Fixed
Disabling shadows on a directional light now works correctly
Shader compiler shutdown crashes resolved by properly draining the material system and preventing Steam callbacks after managed shutdown
Exceeding the maximum light count no longer triggers assertions or causes directional light flickering
`GetPixels` arguments are now validated to prevent negative values, fixing a security vulnerability
Referencing a deleted prefab no longer crashes — the editor shows a warning and preserves instance data for recovery
Creating a prefab from a GameObject now correctly restores the object's position
Reverting changes on a nested prefab instance no longer wipes all outermost overrides
Applying changes to a nested prefab no longer regenerates all GUIDs
Fixed cyclical library references caused by built-in projects referencing libraries
Fixed a null `AssetTypeAttribute.Name` NRE that silently shut down the GameInstance on editor startup
Game loading is now properly cancelled on disconnect, preventing background loads from continuing
Fixed filesystem unmount exceptions when a load is cancelled
Prop gibs now properly inherit velocity when spawned in a batch group
`IgnoreSingleObject` trace now correctly checks both rigidbody and collider GameObjects
Glass shader tint now blends correctly through multiple layers using premultiplied alpha blending. Thank you @Infiland!
`backdrop-filter: blur` no longer generates excessive mipmap levels Thank you @Infiland!
Toast notifications (e.g. achievements) no longer persist indefinitely
Post-game info popup is no longer dismissed on click, so its actions can be used. Thank you @RumBugen!
Fixed human models having deformed hands with the "holditem" holdtype
Fixed TextRenderer alignment not updating on re-enable
I wouldn't underestimate what people can DOO with the doo editor. Hopefully, it can be worked on more and maybe be better than what I thought Actiongraph could be in the future.
> I wouldn't underestimate what people can DOO with the doo editor. Hopefully, it can be worked on more and maybe be better than what I thought Actiongraph could be in the future.
This is exactly what we don't want — making games in visual scripting is shit, people should learn to code.
Why do sausages have human hands?
This is exactly what we don't want — making games in visual scripting is shit, people should learn to code.