A new drawing API, razor-sharp GPU text, improved host migration, game hover cards, and Block Party. Plus mesh editing tools, performance gains, and Mac and Linux improvements.
Painter - added a shared drawing API for panels, HUDs, world panels, textures and command lists, with antialiased shapes, paths, fills, strokes and clippingPR #5785 by @garrynewman, @handsomematt
Panel drawing - added OnDraw(Painter painter) for custom panel renderingPR #5785 by @garrynewman, @handsomematt
Overscroll behaviour - added overscroll-behavior and per-axis controls to disable scroll edge bounce8296281 by @handsomematt
Mesh flipping - added controls to flip selected meshesPR #5786 by @bakscratch
Surface-aligned blocks - hold Shift while dragging to create a block along the hit surface normalPR #5781 by @bakscratch
Graphics presets - switch rendering quality directly from the viewport toolbar080e430 by @lolleko
Multiplayer testing - added editor and MCP tools to host sessions, spawn local instances and migrate the host5acd730 by @lolleko
Hover cards - hover a game to see an interactive preview with play, rating, favourite, review and hide actions87e792911e4a11 by @lolleko
Game context menu - added like, dislike, favourite and hide actions to the right-click menu6a4bd24 by @lolleko
Jam nominations - nominate eligible games from hover cards, the game modal and the end-of-game toast, with minimum play-time checksbab2a6357aa0db by @lolleko
Shader feature values - read a feature by name as an integer in shader code without extra declarationsPR #5776 by @wheatleymf
Mac geometry shaders - added geometry shader support to KosmicKrispPR #5798 by @sampavlovic
GPU text rendering - UI, HUD, TextRenderer and particle text now render directly from glyph outlines on the GPU, staying sharp when transformed or viewed up closePR #5685 by @sampavlovic, @garrynewman
Panel rendering - panels now use the shared Painter backend with batching and cached paint dataPR #5785 by @garrynewman, @handsomematt
HUD drawing - deprecated HudPainter in favour of Painter.Begin, CameraComponent.BeginHud and BeginOverlayPR #5785 by @garrynewman, @handsomematt
Connect Vertices - validate selections before editing and explain why vertices cannot be connectedPR #5720 by @aylaylay
Movie Maker export - capture frames through scene update hooks in the main loop; AV1 is now the default video codecPR #5784 by @metapyziks
Game modals - moved rating, favourite, review and hide controls beside Play, and added a write-review prompt57aa0db by @lolleko
Jam browsing - jam shelves link to the Jam tab, nomination controls use gold styling, and entry cards show Play until eligible088bfc2612c2ec by @lolleko
Storage settings - redesigned downloaded-content usage and type breakdowns, with scan progress, clearer cleanup recommendations and removal confirmationPR #5806 by @xezno
Linux runtime - native Linux x64 builds now use Steam Runtime 4, with updated libcurl dependencies and bundled ICU0df6dcd062c296PR #5808 by @handsomematt
Source setup - simplified bootstrap, added timed build and download progress, and introduced public Setup.bat / Setup.sh with platform-specific artifact downloads and Git update hooksPR #5808 by @handsomematt
Graphics diagnostics - include the graphics environment alongside hardware information in system reports4c60c25 by @lolleko
GameObject cloning - reduced cloning time and allocations; the commit benchmark reports approximately 2.6x faster cloning and 38% fewer allocationsd527633 by @lolleko
Snapshot encoding - moved JSON, blob and packet encoding for join, scene-load and migration snapshots onto workers while preserving per-connection send orderb21367e by @lolleko
Razor outros - keep child content alive while the parent plays its outro animation#1117545fd884 by @handsomematt
Scroll bounce - enforce a hard boundary on edge overscroll8296281 by @handsomematt
Dragging - clear stale drag state when a mouse press lands outside any panelbd40b95 by @ryleigh
Bitmap text - preserve HDR colours, ignore the bitmap pen and align text using layout boundsPR #5685 by @sampavlovic, @garrynewman
Colour emoji - fixed emoji alpha and added Twemoji glyph fallback on Mac and LinuxPR #5685PR #5801 by @sampavlovic
Asset Browser layouts - restore every saved Asset Browser, reuse disabled browsers and remove stale closed-browser menu entries after restartingPR #5557 by @carsonkompon
Publish hotload - recover from hotload by returning to compilation so the wizard uploads fresh assembliesPR #5775 by @devultj
Doo editing - mark scene changes dirty and integrate Doo edits with undo handling#11772PR #5721 by @handsomematt
Mesh mirroring - preserve grouped mesh transforms and scalePR #5763 by @handsomematt
Pivot picker - set the pivot without changing the selected meshPR #5782 by @bakscratch
Mapping materials - use the latest Asset Browser material selection in mapping tools, including Hammer#11399d2ed97c by @handsomematt
FBX import - preserve bone streams when scale helpers are generatedPR #5787 by @aylaylay
Connection serialization - correctly resolve connection types that differ between peersd9ae0de by @lolleko
Targeted messages - prevent recursive nested messages from overflowing the server stackc7fc6de by @lolleko
BytePack - track nesting depth explicitly and limit nested data to 32 levelsdb678e4 by @lolleko
HTTP requests - prevent hostnames resolving to 0.0.0.0 from bypassing loopback restrictionsc354923 by @lolleko
Refractive materials - fixed a VRAM leak from unused framebuffer-copy texturesPR #5791 by @sampavlovic
Clutter LOD - match coverage between perspective and orthographic views#11313PR #5729 by @handsomematt
Resource reloads - preserve procedural resources when mounted files reloadPR #5797 by @ryleigh
Mac rendering - fixed procedural-render callback lifetime crashes and Highlight component crashesPR #5798 by @sampavlovic
Mac editor - fixed game-view input, DPI scaling, Finder folder opening and scene stagingPR #5798 by @sampavlovic
Mac and Linux tools - fixed code editor detection and availability of publish/export controlsPR #5798 by @sampavlovic
Agent transforms - runtime object and parent transforms no longer reset the simulated agent or its path; use SetAgentPosition to reposition it explicitly#11811364a039 by @lolleko
Custom link traversal - preserve the agent landing position when completing a custom linke472ae8 by @lolleko
Navmesh rebaking - discard loaded tiles that the latest bake leaves empty5e0fe16 by @lolleko
As for $10, it's the burger theory, but will it work? Probably. I hope Facepunch has everything under control, and that in December we won't see s&box go free, because that could only mean one thing, that things are going badly.
Lorenz, the light theme is mvp!