One of the few big question marks we had with Sandbox Mode was how addons would work. Would it even be possible? Would it be horrible? Would you have to pre-install addons like in Garry's Mod?

So this month I looked into that. I wanted to make it so you could open the spawnmenu and create an entity from the cloud, without pre-installing, or restarting. And after some hard work and refactoring.. it works just fine.. like you'd expect.
Here you can see we're spawning a prefab from the workshop, which has a particle system that is controlled by custom code.

This is the kind of powerful UGC system that has huge, huge potential. I can't even imagine the things that are going to be possible in Sandbox Mode with this.. but it's exactly the kind of thing that I love.. being able to jump in and see what people have made possible.

It's early days. I'll write some docs up this month to allow people to jump in and start experimenting with making Sents and Sweps and Npcs and Vehicles and whatever else they can come up with. 
You can now spawn assets from supported games you have installed in the Sandbox mode. There's no categories or real discovery here yet, but you get nice thumbnails.
The Natural Selection 2 mount has been shipped. This is a good addition because unlike Quake, it has ragdolls. If you own the game, you'll now be able to spawn all of their models in Sandbox by installing it.
We're aiming to ship 1 or 2 mounts per month, we have a pretty long list of games we'd like to mount.
Mounts work by procedurally creating models at runtime with our ModelBuilder API. This month, we’ve added support for attachments, material and model groups, and ragdolls.
This month we decided to get rid of the cloud browser tab and roll it into the main asset browser, as well as separating out things like mounts to help make sure that people know what's available to them.

We've done this by adding some nice simple side tabs:
Resources can now be embedded, removing the need for a separate asset. With the new decals and the upcoming sprites system, this has been a clear improvement.
This month, we're accepting our first community-made cosmetic. It's the Shark Head hat by Shadowbrain, and is available in the store. It'll be sold for a month and then removed from the store.
We're not sure how frequently we'll accept new community items, or how long they'll live on the store. This is an experiment, and will be experimented with for a while, until we find the right balance between price, store length and revenue share.

You can see all workshop cosmetics on the avatar screen now. You can try them out, rate them and review them.
The money from these items goes to the author of the item and the Play Fund. So this is a win-win. There are comprehensive guides here on how to make cosmetics and add them to the workshop.
You can now do await Cloud.Load<Model>( ident ), or await Cloud.Load<MyCustomAsset>( ident ) and it will automatically fetch the desired package, and only mount it if the package's primary asset is the same type as the one you are attempting to load, returning the asset once complete.
async void AddRandomClothing()
{
	// Get a completely random ident for clothing
	var cloudIdent = await GetRandomClothingIdent();

	// Get the clothing definition from the ident
	var clothing = await Cloud.Load<Clothing>( cloudIdent );

	// Apply the clothing to the citizen dresser
	CitizenDresser.Clothing.Add( new() { Clothing = clothing } );
	await CitizenDresser.Apply();
}
If you're using serverside code, your IDE will now add a server .csproj that you can toggle between, adding proper intellisense support.
Sprite renderers are now batched, this includes particle sprite renderers. Previously every particle sprite rendered would be it's own individual draw submitted to the GPU — now they are all batched together into a single draw.

This makes it a lot faster, our benchmarks saw a 2x performance increase going from 4.30ms to 2.12ms when rendering 40,000 particles. The remaining overhead is mainly non-rendering related.
Additionally the particle systems have been updated to reduce memory allocations, which will help relieve any potential GC stutters.
Documentation - There was zero documentation for getting started with ShaderGraph, so I wrote up the pages I found to be most important. You can check them out here.

Subgraphs - They now have a dedicated "Subgraph Input" node for defining inputs instead of using Constants, so there's a clear distinction between Material Inputs and Subgraph Inputs. Any existing Subgraphs should be upgraded to use the new nodes automatically.
The navigation settings have been moved from the toolbar to a dedicated Navigation tool.
The settings have been moved into a sub-tool, which contains the same options as the previous toolbar menu, along with a new Navigation Testing tool. This tool allows you to visualize and test your navigation mesh and navigation links interactively. You can select a starting position and a target position to see the calculated path. 
  • A green path indicates that the target was successfully reached.
  • A yellow path means only a partial path was found.
  • A red path indicates that no valid path could be found.


Networking Optimizations

We found that at high player counts, processing time for building and sending delta snapshots for networked objects - including any Sync Vars they have - would be really high. 

I spent a lot of time profiling and optimizing this path, bringing frame times down significantly. Previously with 30 players and a lot of networked objects, we'd see upwards of 30-40ms. After these optimizations, I've managed to reduce that by nearly 60%.

Granular Network Refresh

Previously you could only Network Refresh an entire networked object - this would serialize the entire hierarchy and send it to clients, which would then create any missing children and components.

I've added new overloads to Network.Refresh to let you pass in a GameObject or Component that exists in the hierarchy - this will send only that descendant/component and create or destroy it for other clients appropriately.

Notable Changes

When joining a server, it used to make you download the latest version of the game - this could cause various issues and conflicts. Now joining a server will download the exact version of the game that the server is running.
The Library Manager has been greatly improved, and acts more like familiar package managers such as NuGet.
  • The previous navigation view on the left has been removed, with a navbar at the top of the widget instead
  • You can now use search in either tab, with Category and Sort By dropdowns in the Browse tab
  • Added "Package Details" section to the currently selected package, shows additional information
  • The version dropdown now shows currently installed and latest versions, including tooltips with changes
  • A bunch of smaller QOL changes and bug fixes that can be read in the full changelog below
The old wiki has been deleted, it was full of outdated information which was adding a lot of confusion for new people.

The documentation is here: https://sbox.game/dev/doc/
We collect a lot of data to help us improve performance and stability; crashes, startup times, performance, benchmarks and more. We want to publicize this stuff, have it display on sbox.game so not only can the community hold us more to account but also see things improve too.
Our crash rates are probably at an all time worse with at least 3% of sessions crashing. There's a ton of low hanging fruit here I hope we can improve on for the next patch.
The game client on average takes 5 seconds to start from launch to menu, I'm relatively happy with that.
Editor startup times have been getting abysmal, even our best case scenarios are too long at 20 seconds. We have a good idea of the problems as well as how to solve them.
To help identify performance bottlenecks, we started developing in-engine profiling tools.
You can start/stop a profiling session by using the profiler console command, both in-editor and in-game.

This means you can record performance data yourself, hold us accountable for any issues and help us solve them by sending us the data.

The profiler outputs two file formats: an .ETL/.ETLX file (compatible with various profiling tools) and a JSON file that can be visualized and shared using Firefox's profiler at https://profiler.firefox.com/.

It's been a slower month with the team taking time off for the summer, as well as a hack week. But we still made some solid progress.

More and more focus is going towards performance and stability now that we have a solid feature set. We know it sucks, we have the data for why it sucks and we're actively working on improving it. The sprite batching is just the start, but it's already greatly improved the performance in games with lots of particles.

Embedded resources are one of my favorite features this month, they unlock a lot of doors required for the next iteration of materials, sprites as well as improving existing experiences with decals and other resources.

Getting the Shark Head in as the first workshop skin is a great milestone for us and the community. The money going to the creators as well as the play fund creators feels great.

Sandbox mode is making huge strides month on month, finally getting addons back feels great as they're such a core experience of Garry's Mod. Mounts are being pulled forward too.

This month we sent out the July 2025 payments. A few people now earned over $2,000 from their games and maps, and in total we paid out just over $24,000.
September Update
0.6.0
1 September 2025
🎁 Added
  • Workshop Cosmetics
  • Cloud Addons
  • Embedded Resources
  • Server .csproj
  • Natural Selection 2 Mount
  • UI: VirtualGrid Panel
  • Add "Replace With Prefab" Context Menu Option for GameObjects
  • Add warning popup when opening KV .vtex with Texture Editor
  • Pirate outfit human version
  • Add FindMode to ISceneEvent.PostToGameObject
  • Add `nav_debug_draw_distance` ConVar
  • Add NavMesh.CalculatePath
  • Add NavMeshAgent.SetPath
  • Pirate outfit human version
  • Cylinder Hitbox API
  • Renderer Component LOD Override
  • Added Cloud.Load<T>(ident) for fetching Cloud Assets at Runtime
  • ModelBuilder attachments
  • ModelBuilder body groups
  • ModelBuilder material groups
  • Model body & joint builder
  • DDS texture loader
  • Editor: Asset browser side tabs
  • Granular Network Refresh
  • Added privacy modes to Create a Game Modal
  • Added Subgraph Input nodes to ShaderGraph
  • Package.IRevision now includes a Summary property
  • Cached Packages no longer have Summary = null even when a summary is present
  • Library Manager: Added "Category" and "Sort By" dropdowns in the Browse tab
  • Library Manager: Added "Package Details" section to the selected package
🧼 Improved
  • Updated Box3D
  • Reactive EnvmapProbe (#2634)
  • Minor Editor Visual Cleanup
  • Networking CPU Optimizations (#2683)
  • Editor Selections are now correctly ordered according to what was selected first/last
  • Support convert to prefab when multiple game objects are selected
  • Ensure a prefabs RootObject name always matches the file name
  • Inspector prefab instance override context menu.
  • Can drag-and-drop files to WildcardPathWidget
  • Don't create Texture Asset when dragging an Image into the Scene
  • Constrain Editor Flyouts/Popups
  • Rework Impact Sound Networking
  • Support empty selection in SequenceControlWidget
  • Flag open prefab editors as unsaved when applying instance changes.
  • Make project's launchSettings.json actually useful and launch the editor with -project
  • Navmesh Debug Draw transparency
  • Movie Maker: Curve painting optimizations, recording fixes
  • Menu Server List fixes #2687
  • Shadergraph: always serialize default values
  • Hotload: support compiler-generated readonly collection types
  • WorldInput uses cursor ray when mouse is active
  • Fix text renderer bounds not respecting alignment
  • Text render point filtering
  • Asset browser shows folder paths when searching/recursive
  • Batched Sprite Renderer
  • Particle Optimizations
  • Can now use the [Order] attribute for tabs in the Widget Gallery
  • SubgraphInput and FunctionResult nodes now have unique colours in ShaderGraph
  • Library Manager Visual Improvements
  • Library Manager: The left and right sides can now be resized using the splitter
  • Library Manager: Hovering over a version in the dropdown displays the version's changes/summary in a tooltip
  • UI: CSS property image-rendering is now inherited properly
  • UI: Samplers are now bindless
  • Razor: RenderFragment now uses the correct context
  • Replaced [GameResource] with [AssetType]
  • TypeLibrary cache system
🪛 Fixed
  • Hammer static overlays being batched incorrectly making them not appear
  • CameraComponent.RenderToTexture not applying post processing
  • Editor startup hanging on package downloads
  • Networking: Exploit where you could impersonate other users
  • Memory leak on managed layers causing high memory usage and poor hotload performance
  • Release branch sentry uploads not getting tagged with version
  • TreeNode OnHashChanged triggering node rebuild twice
  • Fixing a bunch of .Clothing files
  • Sliders not working in avatar screen
  • Bring back terrain brush overlay
  • Janky SceneViewport input with DPI scaling
  • Sandbox.Compiler blacklist running under editor or standalone code
  • "Preprocessor directives must appear as the first non-whitespace character on a line" error in codegen
  • SERVER define constant not getting set for libraries
  • ActionGraph: fix return trip node serialization, type selector widget
  • Color multiselect (while using ColorUsage.HasAlpha) stomping values
  • Managed ConVars not showing default values
  • New prefab system producing large diffs, for Bone/Attachment GameObjects
  • Various event handler and FileWatch leaks
  • EngineOverlay never drawing (UI inspector)
  • fix multi-select for hierarchy treeview
  • simplify dof code, clamp to avoid NaN on overbrightened areas
  • RectControlWidget and ParticleVector3ControlWidget now use correct capitalization
  • InputActionPanel now uses one font everywhere and no longer resizes improperly on hover
  • Removed the gap between the options and the scrollbar in EnumControlWidget dropdown. Fit to full-width when no scrollbar is present.
  • Fixed the faulty TreeView example in the Widget Gallery
  • Fixed the broken RenderToWidget examples in the Widget Gallery
  • Fixed NRE when searching in the Library Manager and no packages are found
  • Fixed Library Manager displaying some older descriptions as raw JSON
  • Fixed search not working in the Installed tab of the Library Manager
🚯 Removed
  • Obsolete NavMesh.GetSimplePath
  • Remove S_SPECULAR and ENABLE_NORMAL_MAPS (#2635)
trophy 1110
Apr 2021 80 posts
September Update : news/september-2025
trophy 545
Jul 2023 1 post
nice job team
trophy 565
Jul 2022 13 posts
entity
trophy 1990
Apr 2021 48 posts
Great stuff as usual, excited to make some addons for the sandbox game
trophy 13
Aug 2023 1 post
GOOD!
trophy 400
Jul 2023 8 posts
Nice 👍
trophy 115
Aug 2024 2 posts
Thank you, Son.
trophy 60
Jul 2021 13 posts
Pour one out for the old wiki lads
trophy 1285
Sep 2021 84 posts
It looks really cool, and most of you have been on vacation. We are waiting for a license for standalone games 💖
Is this the first devblog where Matt wrote Summary?
trophy 180
Mar 2022 8 posts
I have bought 1800 shark heads
trophy 0
Jul 2022 1 post
please rotate the workshop skins like fortnite. we dont want one off exclusive fomo cosmetics or a bloated shop with everything at the same time
trophy 475
Aug 2025 1 post
GG
trophy 2224
Feb 2023 1 post
"Networking: Exploit where you could impersonate other users"
I wonder who discovered this exploit 🤔🤭
trophy 0
Mar 2024 1 post
In my opinion, embedded resources is the best feature of the Godot engine. Unreal Engine has an inline property feature that is similar, but not quite as robust, and Unity just doesn't have it at all without paid assets.

It's fantastic to see it added to S&box.
people
Log in to reply
You can't reply if you're not logged in. That would be crazy.