Change log

{{Change log
 * 451 =

Changes

 * If the new bubble chat is enabled, the old one will automatically disable itself.
 * Added ChatService API for toggling and customizing the new in-game bubble chat.
 * Updated SocialService’s invite prompt to accept gamepad and keyboard controls. Users can navigate with WASD or Thumbstick to select entries and use Gamepad’s ButtonA or Keyboard’s Enter key to send an invite. They can dismiss the menu with Gamepad’s ButtonB or Keyboard’s Backspace.
 * New script editor setting: `Clean Empty Line1. Formatting selection will clean up indentation from empty line when it’s on.
 * Removed “break on all exceptions” from Debug Errors selection.
 * Script Analysis will now allow global assignments only when it’s at module scope and the script is in nonstrict mode.

Fixes

 * TextBox no longer prevents overlaid buttons from being clicked.
 * Fixed a studio setting being set to a random value by default.
 * Fixed auto-indent bug if function declaration parameters include table symbol.
 * Fixed an issue with the terrain tools window reopening every time you open a place.
 * Bones can be dragged using the Lua Draggers while simulation is active (previously this would throw an error).
 * Lua Draggers will no longer throw an error if you attempt to move a part outside of the Workspace while simulation is active.
 * Fixed the WaitForChild spam in the output window.
 * Graphics Quality in in-game settings now ranges from 1 to 21. SavedGraphicsQuality still takes on a value in the range 1-10 to preserve existing behavior.
 * Typed Luau: Produce an error message when module scripts cyclically require each other.
 * “Load Animation” popup no longer covers the “Animation too long” warning popup.

Improvements

 * If the new bubble chat is enabled, the old one will automatically disable itself.
 * Parallelized the broadphase update after stepAnimatedJoints.
 * Luau will now provide a clearer warning when function return type annotations are not wrapped in parentheses when returning multiple values.
 * Luau will now correctly check global types that are exported from modules.
 * 450 =

Improvements

 * Attachments will now be ignored when grouping a selection containing Attachments and Parts.
 * Removed non-user facing Lua Settings from Studio settings.
 * Updated SocialService’s invite prompt to accept gamepad and keyboard controls. Users can navigate with WASD or Thumbstick to select entries and use Gamepad’s ButtonA or Keyboard’s Enter key to send an invite. They can dismiss the menu with Gamepad’s ButtonB or Keyboard’s Backspace.
 * Lua Draggers Rotate Dragger will no longer throw an error when rotating exactly edge-on after aligning your view with the view selector.
 * Improved vehicle cameras.
 * Typed Luau: Better analysis feedback for errors in function calls.
 * Improved debugger stepping behavior through while loops when the loop body ends with an if…then statement.

Changes

 * Removed remaining legacy Game Options settings.
 * Removed some defunct network settings, and corrected a long-outstanding typo in another. Incomming -> Incoming Replication Lag.
 * Added ChatService API for toggling and customizing the new in-game bubble chat.
 * Added Camera.FieldOfViewMode
 * Added Camera.DiagonalFieldOfView
 * Added Camera.MaxAxisFieldOfView
 * Added DoubleSided in MeshPart. When enabled both faces of polygons in the MeshPart will be rendered.
 * Changed Humanoid:/ApplyDescription to allow it to be used on the client for locally created Humanoids.

Fixes

 * Controller dead-zone logic works again in Roblox Studio, so users using a mouse while having a game controller with stick drift plugged in will no longer experience cursor flickering to the center of the screen.
 * Fixed an issue with copy/pasting Decals and Textures when Face dragging is enabled.
 * Fixed the WaitForChild spam in the output window.
 * Fixed loading screen freezing on mobile when joining a game that’s full.
 * Fixed assert(false[, message]) to now be properly handled when linting for unreachable code or implicit returns.
 * 449 =

Changes

 * Added 25 new fonts to Enum.Font.
 * Uploading images and selecting existing images through the properties widget now applies the uploaded asset as an rbxassetid instead of a legacy rbxgameasset (mainly noticeable in conjunction with SurfaceAppearances, which don’t support rbxgameasset).
 * Added search functionality to File > Publish to Roblox As…
 * Add additional information (the full instance path) to the instance indexing error message, for example:
 * MyModule is not a valid member of Folder
 * Becomes:
 * MyModule is not a valid member of Folder "ReplicatedStorage.MyLibrary"
 * IK Move and Rotate behavior of the draggers has been slightly adjusted. Now parts will attempt to return to their original orientation (with the Move tool) / position (with the Rotate tool) when their movement is unconstrained.

Improvements

 * Created Script Editor Colors presets.
 * The Lua Draggers now cause the Explorer pane to correctly jump to the most recently selected object when multi-selecting. In addition, the Explore pane will now jump to the item you clicked on when normal clicking objects in the selection.

Fixes

 * The Ctrl/Shift + Scale behavior the Scale dragger used to have has been restored by popular demand.
 * Fixed LightGrid shadow for large meshes.
 * Fixed an issue that caused SurfaceAppearance normal maps to appear weak or not-at-all on certain MeshParts.
 * Addressing WeldConstraint bugs related to Enabling and PropertyChangedSignal handling.
 * Fixed a bug that caused GuiService:InspectPlayerFromHumanoidDescription to consistently fail.
 * Fixed invalid label momentarily appearing for valid animation ids.
 * 448 =

Changes

 * Removed a handful of dead settings from Game Options in File > Studio Settings that did nothing.

Fixes

 * Fixed a case where Humanoid physics would sometimes raycast against one frame out-of-date terrain geometry.
 * Fixed grass decoration in “Lighting.Technology” = Future.

Improvements

 * Improved the readability of some Script Analysis warnings by trimming table types to a certain length.
 * Typed Luau now prevents more cases where it was possible to bypass the type system by accident.
 * Luau beta: Smarter warning to catch cases where foo.bar was written, but foo:bar may have been required.
 * 447 =

Changes

 * Added support for font face tags in rich text. (e.g. SciFi).
 * Added a CFrame constructor: CFrame.lookAt(at, target [, up]), which replaces CFrame.new(at, target) and extends it with an optional parameter letting you specify the up direction.
 * Removed orbital cam debug print statements.
 * Rewrote the PlayerScript camera input layer.
 * For devs using the legacy CSG system, the release will force them switching to the new CSG system one-time and notify them the change using an informational bar. However, they can still revert to the old system.

Fixes

 * Fixed issue where game might not resume after single stepping the debugger.
 * Plugins will now get an accurate mouse position for the first click when the user clicks in the 3d view to focus the previously defocused Roblox Studio window.
 * Fixed an issue with the terrain smooth tool attempting to set materials to nil.
 * Lua Draggers Rotate Dragger will no longer throw an error when rotating exactly edge-on after aligning your view with the view selector.
 * Fixed a potential regression in NavigationService when small movement from simulation could cause obstacles to block/unblock a path without properly invalidating the path.
 * Fixed a rare crash on some models when setting CollisionFidelity to PreciseConvexDecomposition.
 * Forced streaming minimum radius to be always at least 64 studs. Streaming target radius cannot be less than minimum radius.
 * Fixed a case where Typed Luau would incorrectly allow some expressions and disallow others.

Improvements

 * Luau beta: Smarter warning to catch cases where foo.bar was written, but foo:bar may have been required.
 * 446 =

Fixes

 * Fixed a bug which restricted users from editing descriptions of their games when there was not already a description there previously.
 * Fixed a bug where syntax checking would not update with code change before committing in team create mode.
 * Fixed an asset fetch issue that was causing SurfaceAppearance objects to fail to render.
 * Fixed an issue that caused SurfaceAppearance normal maps to appear weak or not-at-all on certain MeshParts.

Changes

 * Revised the confirmation message when reverting a package.

Improvements

 * Added search functionality to File > Publish to Roblox As…
 * Modified lifetime of BrickColor/Color3 pickers in Properties so that they do not crash when closed if the selected part has been deleted while they were open (e.g. by a Team Create collaborator or a plugin).
 * Luau beta: Smarter warning to catch cases where foo.bar was written, but foo:bar may have been required.
 * Luau beta should now be much smarter about typechecking overloaded operators.
 * 445 =

Fixes

 * Fixed a problem with the physics simulation radius that occurred in low memory situations with small minimum radius values (<196).

Improvements

 * str:foo calls are now 10% faster for strings (although for maximum performance we still recommend string.foo(str)); additionally, string.sub is now noticeably faster to execute for short substrings.
 * Luau type checking should be smarter about when it thinks that you have written a.b rather than a:b or vice versa.

Changes

 * (Luau Beta) In nonstrict mode, it will warn when too many arguments are passed to a function.
 * Added Humanoid.RequiresNeck. If disabled the Humanoid will not die when its Neck joint is removed. This should make temporary ragdoll states easier.
 * Changed the way Humanoid state replicates from the network owner of the Humanoid. Currently uses physics replication, will use property replication. This may change the timing of state change events for remotely owned Humanoids.
 * More strict wav file parsing rejecting files with invalid chunks.
 * 444 =

Changes

 * Added icons in tabs for Server, Module, and Local scripts to make it easier to differentiate between them.
 * Added tooltips with asset titles to overwrite asset view.
 * Added a preview region to terrain generate and import tools.
 * Tilting / Rotating a part with the Lua Draggers Beta should always tilt / rotate on the correct axis even when Use Local Space is turned off.
 * The Lua Draggers Beta now updates the insert point (where pasted / inserted objects are placed) when selecting objects, this restores the behavior the legacy draggers had.

Improvements

 * Dragger tool icons now change to reflect the dragger mode context.

Fixes

 * Fixed bug to show group names correctly in Toolbox (not as user names with the same ID).
 * Fixed a bug where standing on something and then attaching it to yourself with a rope could cause a server crash.
 * TeleportService:TeleportToPlaceInstance now has validation to check for an empty instanceId when the function is invoked.
 * 443 =

Changes

 * Added gui/FontData, gui/FreeType, gui/HarfBuzz, and gui/TextLayout memory categories to the Dev console.
 * The permission settings page for group games now includes individual permissions. (These cannot be added now, but may have been added in the past via script or plugin.)
 * Added Scrolling UI to game selection in the Publish to Roblox As… menu.
 * Added success screen when successfully choosing a place to overwrite in Publish Place As… > Update Existing Game…
 * Added ability to access Game Settings directly from the File Menu. Minor adjustments to order of items in the File Menu.
 * Added Scrolling UI to updating and publishing places in Publish to Roblox As…
 * Added math.round to standard math library which rounds the number to nearest integer.
 * Changed animation import window to have a direct import id text box rather than a filter. Export window will still use the filter for now.

Improvements

 * The Lua Draggers Beta should now work reliably when you use the ribbon bar in collapsed mode.
 * It should be much harder to accidentally click on the resize handles while trying to freeform drag a part using the Scale tool with the Lua Draggers Beta is enabled.
 * Tilting / Rotating a part with the Lua Draggers Beta should always tilt / rotate on the correct axis even when Use Local Space is turned off.
 * Dragger behavior toggle UI has been revamped for added clarity.
 * WeldConstraint changed to store relative offsets to reduce floating point precision loss.
 * Luau will no longer treat __meta as a special property to indicate the type of the metatable for the given table.
 * Changed Humanoid:ApplyDescription to allow it to be used on the client for locally created Humanoids.

Fixes

 * Resizing a part with the Resize tool will now allow you to resize down to smaller than the grid increment again (this restores the behavior the tool had before the Lua Draggers release).
 * Rotating parts with both Constraints and rotational snapping enabled should now work correctly in all cases.
 * Fixed a bug where moving welded parts after using the Align tool could cause the parts to revert to their old positions.
 * Using T / R to tilt and rotate parts with the Lua Draggers Beta will no longer generate a small floating point error.
 * Fixed Android gamepad DPad button mapping.
 * Fixed os.time to assume that the input table is in UTC (which used to be true in 2018 & 2019, but stopped being true in June 2020).
 * Fixed an issue with the in-game purchase prompt and products that contain a % in the name.
 * 442 =

Fixes

 * ScrollingFrames can now scroll horizontally if the scrolling frame can only scroll horizontally and no parent scrolling frame can scroll vertically.
 * Freeform dragging parts with the Lua Draggers Beta with “Use Local Space” disabled would sometimes give slightly wrong results with some models. This has been fixed.
 * Fixed an issue where the loading spinner in Plugin Management would never disappear.
 * Fixed a physics sleep bug where waking part would fail to wake the whole mechanism.

Improvements

 * ScrollingFrames can now be scrolled horizontally without pressing shift if the scrolling frame cannot scroll vertically.
 * Introduced LevelOfDetail property to model instances to automatically generate impostor meshes to be rendered out of streaming radius.
 * Luau will now permit you to write parentheses around type annotations without trying to parse it as a function type annotation.

Changes

 * Shift select has been added for multiple element selection in Asset Manager.
 * This further removes deprecated SurfaceTypes and JointInstnace functionality. Hinge and Motor surfaces are deprecated, and should not be used for any new work. Please use the constraint counterparts instead. Surface properties will be hidden when all surfaces are set to Smooth. JoinToOutsiders will only create Weld JointInstances.
 * Added memory simulation to device emulator for testing StreamingEnabled on low memory devices. Includes simulation for standard list of devices and for custom devices.
 * Changed Humanoid:ApplyDescription to allow it to be used on the client for locally created Humanoids.
 * 441 =

Improvements

 * Add a new Emoji implementation with more crisp rendering, and supporting new Emoji added in version 12.
 * Entering “=expression” on the command line will now print out the value of evaluating “expression”, copying the behavior of the vanilla Lua CLI tool.
 * Added InnerRadius and Angle properties to CylinderHandleAdornment enabling the creation of partial (pies / pie slices) and hollow cylindrical adornments.
 * Improved mac gamepad support.
 * Luau now supports string.pack/packsize/unpack from Lua 5.3; integer format sizes are fixed for all platforms to allow for consistent behavior (b is 1 byte, h is 2 bytes, i/j is 4 bytes, l is 8 bytes, T is 4 bytes).
 * (Luau Beta) Script analysis can now distinguish between types with identical shapes. eg Vector3 and CFrame.
 * MeshLoD V2 offering 3 RenderFidelity options to satisfy high-quality or high-performance requirements.
 * Improved stitching between Terrain LODs. Especially noticeable with StreamingEnabled.

Fixes

 * Dragging large non-welded models with the Lua Draggers Beta will no longer cause a short freeze when ending the drag.
 * Lua Draggers will no longer break if you switch tools using a hotkey in the middle of a drag.
 * Edit asset window now clearly indicates loading state.
 * When returning to Editing after a Play Solo session in Roblox Studio, the Select tool will reliably be reselected in all cases.
 * 440 =

Fixes

 * Fixed issues with Japanese and Korean input methods on Windows Client.
 * Fixed ‘Share’ option (in Start Page) for public places.
 * Fixed an issue that package performance drops when user drags a 3D model in the 3D view.
 * When using the Lua Draggers, the outline displayed where joint will be created will no longer desync from the part position when pressing T or R while freeform dragging.
 * Instance:GetDebugId(len) will return if passed len=0. Otherwise, a _ for len > 0. The scope will be up to len long but may be shorter. This fixes a bug where passing a len == the ascii length of the scope would output just the scope. For example, GetDebugId(1) would return “1” vs “1_23456” but GetDebugId(2) would return “1_23456”.
 * A minor memory leak during CharacterLoad was fixed.

Changes

 * After a fresh installation of Roblox Studio, or after a complete removal of Roblox Studio and re-installation, the default save folder should be the user’s Documents folder.
 * Added an “Align Dragged Objects” toggle to the context menu when using the Lua Draggers Beta, which will allow you to drag objects without modifying their rotation when unchecked.
 * Certain properties of the player that were spoofable are no longer spoofable.

Improvements

 * The Rotate dragger has a new visual, including rotation ticks so that it is easier to see how far you have rotated, and slightly thinner handles to get in the way less.
 * Performance improvements for the new in-game menu.
 * 439 =

Fixes

 * Fixed duplicate asset insertions from Toolbox.
 * Fixed GuiObject.TouchSwipe events on android.
 * A memory leak identified by brinkokevin in https://devforum.roblox.com/t/character-memory-leak/588468 is fixed. It occurred when an accessory was created, added to a character, and then destroyed multiple times.

Changes

 * Added internal error reporting for plugins.
 * Studio Beta for SurfaceAppearance advanced textures.
 * Added support for Circular thumbnails to the rbxthumb ContentId format. Used like rbxthumb://type=AvatarHeadShot&id=261&w=150&h=150&filters=circular.

Improvments

 * Performance improvement on Android Vulkan devices.
 * Improved stitching between Terrain LODs. Especially noticeable with StreamingEnabled.
 * A ~40% performance improvement for games using terrain.
 * Debugger is now able to inspect constant upvalues via watch expressions.
 * Optimized solver.
 * Luau will now generate a warning for each use of => tokens, and will request you to replace it with the new suggested token.
 * 438 =

Improvements

 * Improved the reliability of the TextLabel/TextButton/TextBox TextBounds/TextFits properties.
 * Using non-string hash keys in Luau is now noticeably faster than it used to be.
 * xpcalls second argument is now verified to be a function. __tostring has to return a string now for tostring to work.
 * Microprofiler dump edge case improvements and bugfixes. Tooltip averages are now more accurate in some edge cases.

Changes

 * Prepare for Lua Draggers Beta full rollout (We will be doing a staggered rollout where we gradually start force enabling).
 * Added new Security tab to GameSettings, along with toggles for 3rd party Purchases and 3rd party Teleport.
 * _VERSION is now set to “Luau”.
 * Studio Beta for SurfaceAppearance advanced textures.
 * Added CollisionGroup property to RaycastParams. This allows you to set a collision group for outgoing raycasts.

Fixes

 * Dragging with Collisions enabled with the Lua Draggers Beta will work correctly again.
 * Prevented Sounds from autoplaying when uploaded as models.
 * 437 =

Improvements

 * Improve. the reliability of the TextLabel/TextButton/TextBox TextBounds/TextFits properties.
 * TextLabel./extBounds and TextService:GetTextSizenow round up the result to the nearest whole integer. This means fractional TextBounds are no longer returned irrespective of device ResolutionScale.
 * Lua Draggers Beta no longer has a rare edge case where models could sometimes disappear / become distorted when dragged onto surfaces at a very specific angle.
 * Camera sensitivity can be set to fine-grained values in the new settings menu.
 * Slider values in the new settings menu are properly clamped to min and max values when using keyboard input
 * os. library now exposes os.clock (a high resolution timer with no defined base, suitable for measuring performance of the code) and makes os.date match behavior of vanilla Lua (with support for format strings beyond “*t” and “!*t”)

Changes

 * Allow Copying is a new setting added in the Edit Place tab from Game Settings.
 * New feature in Game Setting->Options called Shutdown All Server, which shuts down the server and disconnects all the clients that are currently connected and playing the game.
 * ColorSequences will sanitize input values a bit more aggressively now, clamp colors to 0…1.
 * Added a tool tip window to NoCollisionConstraint.

Fixes

 * The Lua Draggers Beta can now effectively drag Attachments in run mode. There were several issues with this functionality before which have been resolved.
 * Fixed a rare error occurring when opening the Permissions tab in Asset Configuration.
 * Fixe a crash in Studio Script Analysis that could occur when typechecking extremely long Lua expressions.
 * 436 =

Fixes

 * TextLabel.TextBounds and TextService:GetTextSizenow round up the result to the nearest whole integer. This means fractional TextBounds are no longer returned irrespective of device ResolutionScale.
 * Fixed a bug regarding removing assets inside Asset Manager.
 * Lua Draggers Beta will no longer generate any floating point error when doing 90/180 degree rotations.
 * Lua Draggers Beta no longer unanchors parts while dragging, meaning copying or duplicating parts during a drag should be completely safe. Dragging performance with Collisions enabled should also be noticeably improved.
 * Fixed PromptBlockPlayer not being registered by the Corescripts.
 * Fixed an issue with gamepad connection while Studio is open.
 * On the off chance that you get a reference to a StudioTheme Instance, you can no longer add children or set its parent.
 * Fixed an issue with the “Print Join Size Breakdown” feature in Studio that caused all numbers to be reported inaccurately.
 * Fixed a crash in Studio Script Analysis that could occur when typechecking extremely long Lua expressions.

Improvements

 * Dragging in an asset from the Toolbox to insert it now only requires a single undo to revert.
 * When dragging parts with the Lua Draggers Beta, the position and orientation properties in the Properties pane should update in real-time as the parts are dragged.
 * Several Lua Draggers Beta perf improvements. Box select in particular should be noticeably snappier.
 * The drag handles in the Lua Draggers Beta will no longer be unusably large when working zoomed in on extremely long skinny parts.
 * When end is missing in Lua code, the parser error message now highlights the likely location of mismatch using indentation as a guide.
 * Luau can now possibly suggest properties found in the table if the actual key wasn’t found.
 * Optimized typeof; it is now ~6-7x faster.
 * BasePart:UnionAsync and BasePart:SubtractAsync should properly respect the CollisionFidelity argument when creating new geometry.
 * Improved the clarity of Luau errors in some cases, for example arithmetic operations on builtin userdata types now mention the types involved instead of “userdata”.

Changes

 * Duplicating a part while handle dragging under the Lua Draggers Beta will no longer end the drag, letting you stamp objects while handle dragging. This restores the same behavior the old draggers had.
 * Added a VR Mode toggle to the new in-game menu.
 * 435 =

Improvements

 * New feature in Game Setting->Options called Shutdown All Server, which shuts down the server and disconnects all the clients that are currently connected and playing the game.
 * Updated Studio builtin translations.
 * Luau coroutine resumption is now ~10% faster (as measured on a prime sieve benchmark using coroutine based generators).
 * Lua tables are now ~20% smaller (doesn’t apply to array-like tables).
 * Luau now supports compound assignments (+=, -=, *=, /=, %=, ^= and ..=). The assignments only work on single values (a, b += 1 is invalid); the left hand side is only evaluated once. When modifying table keys, __index and __newindex will be called as necessary - no new metamethods are introduced.

Fixes

 * Fixed missing textures on some gles 2.0 devices.
 * Fixed overwriting group plugins when publishing.
 * Add method WorldRoot:BulkMoveTo, which moves a table of parts to CFrames in a table of CFrames, without firing property changed events. Not firing property changes makes this a very fast method for moving parts, at the cost of the changes not replicating to the client or being recognized by the undo history.
 * 434 =

Fixes

 * Fixed localization of color picker frame.
 * Fixed a bug with the auto-creation of AnalyticsService.
 * Lua Draggers Beta no longer throws an error if you drag select Parts parented to other Parts or Attachments in the hierarchy.
 * Lua Draggers Beta will no longer generate floating point error when attempting to move a part whose movement is blocked with Collisions enabled.
 * Orientation of models will remain more stable as they are dragged across terrain using the Lua Draggers Beta.
 * Fixed a bug where grass (decoration) updates sometimes would fail.

Improvements

 * The hover box shown around hovered parts in the Lua Draggers Beta no longer flickers when hovering over the drag handles.
 * Lua Draggers Beta now respects grid snap when dragging onto terrain.

Changes

 * Added PluginManagerInterface. Calling PluginManager will return this instance, which is per-DataModel. It also prevents adding children to PluginManager.
 * 433 =

Improvements

 * Improved the reliability of the TextLabel/TextButton/TextBox TextBounds/TextFits properties.
 * Luau GC accounting is a bit more precise now, which results in slightly faster collections and slightly smaller Lua heaps.
 * Solver single threaded part optimized.
 * In streaming enabled games local parts are no longer streamed out, unless they have an ancestor that is a server created part.
 * Optimized string.byte/char/len to run faster; for the optimizations to be effective, it’s important to call the functions (string.byte(foo, 5)) directly instead of using method calls (foo:byte(5)). string.byte is up to 4x faster as a result of this change when reading a few bytes per call.
 * Improved table.unpack to be ~15% faster
 * Optimized solver.

Changes

 * The title bars of Lua dialogs (e.g. Game Settings) do not contain the question mark (?) button anymore.
 * Changed the Developer icon in the leaderboard to be for every developer who can edit the group game instead of just the owner.
 * Outlines are no more.
 * coroutine.create and coroutine.wrap now support C functions as an input.
 * 432 =

Changes

 * Hid info button on beta features that did not have an associated DevForum or DevHub page.
 * Added new Studio Script Editor setting “Rulers”. You can set up multiple rulers to be drawn at the columns you specified.
 * Adding DateTime type in studio.
 * Removed specular highlight on the terrain under the grass.

Fixes

 * Fixed conveyor behavior for anchored parts with mass lower than the character. The mass threshold should not have applied to anchored parts.

Improvements

 * Reduce the size of Luau debug line information by ~3x (as a result some large scripts now take ~1.5x less memory total for script bytecode).
 * Improved Luau type definitions for a majority of Roblox APIs.
 * Improvement to the visual behavior of Terrain streaming.
 * 431 =

Fixes

 * Fixed the developer console freezing clients with the new scrolling frame layout code.
 * Fixed localization of color picker frame.
 * Dragging parts right at the origin with the Lua Draggers Beta will no longer occasionally cause an error.
 * Fixed materials glitching out on parts when physics convex decomp display is turned on.

Improvements

 * Updated studio built-in plugin translations.
 * Luau GC is now up to ~25% faster on userdata-heavy scripts due to a faster and more secure __gc implementation.

Changes

 * The constraint details tooltip now displays in the Lua Draggers Beta.
 * Updated text in Plugin Management from “Remove” to “Uninstall” to reflect that removing a plugin will also uninstall it from your computer.
 * Luau type aliases must now use the syntax “export type” to define a type alias that can be imported from other modules.
 * Adding Lighting/DepthOfFieldEffect. When enabled can independently adjust near and far-field blur intensities as well as focus distance.
 * Removed specular highlight on the terrain under the grass.
 * 430 =

Improvements

 * ScrollingFrames can now be scrolled horizontally without pressing shift if the scrolling frame cannot scroll vertically.
 * Lua Draggers Beta now pastes parts at the location of the most recently moved part, as the old draggers did.
 * Improved Luau type definitions for all of Lua APIs, excluding the coroutine library.

Fixes

 * Setting the Icon of a PluginMouse will no longer cause the icon to get stuck as that icon even after the Plugin is deactivated.
 * Truncate overly-long asset names in the Asset Overwrite view.

Changes

 * Added a new service for running server and client logic in a single container.
 * Adding Lighting/DepthOfFieldEffect. When enabled can independently adjust near and far-field blur intensities as well as focus distance.
 * SmoothingAngle property for CSGv2.
 * 429 =

Changes

 * Added Studio script editor setting “show whitespace”, and script editor color setting “whitespace color”
 * Primary Part Line Thickness setting will no longer change the Lua Draggers Beta’s hover box thickness.
 * Updated Toolbox decal insert.
 * Special cased infinite timeouts in WaitForChild to not bother scheduling a timeout task. Made NaN timeout throw.

Fixes

 * Fixed an issue with the new scrolling frame layout code that prevented elastic scrolling from working correctly.
 * Fixed scrolling frames handling touch drags that happen to pass over the scrolling frame.
 * Disabled asset/folder tiles in Asset Manager when explorer overlay is open.
 * Fixed Import button visibility in Game Explorer.
 * Lua Draggers Beta now correctly shows the default cursor when no selectable object is under the cursor (further cursor improvements are still coming).
 * Lua Draggers Beta Scale tool will no longer freeze up when trying to scale a very large part intersecting with terrain
 * Copying or Duplicating a model while dragging it with the LuaDragger will no longer leave behind Temp Movement Welds under the duplicate.
 * Lua Draggers Beta no longer throws an error after drag dropping a single Script object from the Toolbox into the 3d view.
 * Fixed an issue that used Updated instead of Relevance to fetch plugins.
 * Fixed gamepad cursors on mobile.
 * Fixed various issues with gamepads on mobile.
 * Fixed a bug where jumping over local definitions inside repeat…until loop with continue would allow reading these locals in the until expression, potentially revealing protected metatables of builtin userdata objects.
 * Fixed an issue with BaseParts parented to other BaseParts with streaming enabled.
 * Fixed an exploitable crash.
 * Fixed a few rare PreciseConvexDecomposition cases where the result would be full of holes.

Improvements

 * In the Lua Draggers Beta, Tools will now be treated exactly the same as Models by drag and box select operations.
 * Made small improvements to collisions between MeshParts, Unions, and other shapes.
 * Improved the multicore scaling of parallel contact stepping by reducing the work done in the serial phase.
 * Luau type checking is now much smarter about tracing require calls.
 * 428 =

Changes

 * In Studio, ScrollingFrame/Active defaults to true.
 * In Studio, ScrollingFrame.ScrollBarImageColor3 defaults to black.
 * A message has been added in the Team Create widget to convey users about the Permissions management move to Game Settings.
 * Lua Draggers Beta will now orient models with no PrimaryPart in the same way as their bounding selection box suggests they will be oriented.
 * You can now deselect the Select tool (leaving no tool selected) with the Lua Draggers Beta enabled
 * The Lua Draggers Beta now supports manipulation of parts which aren’t in the Workspace, such as those in ViewportFrames.
 * When deleting a part you’re hovering over with the Lua Draggers Beta enabled, a hover box will no longer be left lingering where the part was.
 * RotateDragger is now able to rotate attachments in the Lua Draggers Beta.
 * Added stats for throttling and dropped time steps to physicsStepped in the microprofiler.
 * Added a memory profiler tag for the physics solver internal allocations. Also, the solver will periodically release its internal memory buffers.
 * Adding DepthOfFieldEffect. When enabled can independently adjust near and far-field blur intensities as well as focus distance.

Fixes

 * Fixed several bugs and inconsistencies in scrolling frames’ layout behavior. Scroll bars should be more predictably visible/not visible now.
 * Lua Draggers Beta will no longer break when attempting to modify selections including VectorForce constraints.
 * Fixed a crash related to the terrain importer.
 * Editing properties of Attachments in the properties window will now correctly update handle positions in the Lua Draggers Beta.
 * The tools in the Lua Draggers Beta will no longer break if another tool is selected while the mouse is held down.
 * The “Use Local / World Space” dropdown option when right-clicking in the 3D view is no longer missing when using the Lua Draggers Beta.
 * The Scale tool in the LuaDraggers Beta now handles scaling parts down to the minimum part size correctly.
 * The scale tool in the LuaDraggers Beta will now scale the correct side of a rotated part when in global coordinate mode.
 * Fixed terrain region tool merge empty option.
 * Fixed mouse cursor snapping to incorrect places when zooming out of first-person mode
 * Fixed an exploitable crash.
 * Luau compiler accidentally enforced the limit of 255 locals instead of 200 locals. This is now fixed and the error messages for running out of various limits (200 locals, 200 upvalues, 255 registers) are substantially improved, but please note that this may break scripts that previously didn’t run in vanilla Lua but did run in Luau VM (e.g. because they had 210 locals).

Improvements

 * Enabled merging multiple drafts at once.
 * Axis handle dragging is now smooth when using the MoveDragger to drag attachments in the Lua Draggers Beta with Constraints enabled.
 * The Scale tool no longer has bad perf issues in large places with the Lua Draggers Beta enabled.
 * Hide Toolbox’s TreeView button when only one asset is available in the tree.
 * Now sending ‘Cancel’ callback event when dragging off a ContextActionService mobile button and letting go.
 * Sped up reprocessing CollisionFidelity in bulk by re-using recent results.
 * Developers can now copy an asset ID from the upload result page after publishing it.
 * 427 =

Improvements

 * ScrollingFrames now support trackpad input.
 * Added audio duration filtering into the Toolbox’s Marketplace.
 * When there is a test server launched pressing Alt+F7 will launch an extra player. When there is no test server launched, pressing Alt+F7 will first launch the test server and then one client.
 * Types which we do not support through reflection will now error when passing from Lua into the engine.
 * Now, zooming out will move the camera the same amount as when zooming in.
 * Errors with require(assetid) will now be more informative and will contain the assetid.
 * Instead of breaking execution when trying to step through non-yieldable code, the debugger silently steps until it has an opportunity to break. Breakpoints in non-yieldable code are ignored but a message is printed to the output.

Fixes

 * Fixed the Lua Draggers Beta to no longer create joints between parts in models with Humanoids in them.
 * Exposed WorldRoot:IKMoveTo publicly for use by community plugins.
 * Added audio duration filter tags into Toolbox’s Marketplace
 * Fixed error messages cleanup using ‘Clear’ button in Bulk Import view.
 * d crashes caused by certain corrupt audio files.

Changes

 * Changed casing to Vector3/fromNormalId / Vector3/fromAxis to match current casing conventions.
 * ContextActionService mouse wheel event sinking is now functional.
 * Changed the way Humanoid state replicates from the network owner of the Humanoid. Currently uses physics replication, will use property replication. This may change the timing of state change events for remotely owned Humanoids.
 * Changed Motor6D/Transfrom to always be an offset from Part0 (parent) to Part1 (child), even if Part1 becomes the parent in the internal spanning tree because of a root change.
 * Luau: Changed the format for function types to use a skinny arrow (‘->’) instead of a fat arrow (‘=>’).
 * Luau: Changed the format for the function return type specifier to use a colon (‘:’) instead of a fat arrow (‘=>’).
 * 426 =

Fixes

 * Fixed override asset loading issue. Also, added support for GroupModels and GroupPlugins.
 * Creating a new game will no longer overwrite the opened game’s name.
 * ClickDetector’s MaxActivationDistance now calculates from the torso instead of the head. Also, fixed a bug in CTRL-clicking on a part with a ClickDetector while a tool is equipped
 * Fixed a few bugs in the new resume/pcall/xpcall/implementation. Third time is the charm!

Changes

 * Added a commit button to the Drafts widget to commit selected scripts.
 * Changed the name BallSocketConstraint.MaxFrictionTorque serializes as to MaxFrictionTorqueXml and fixed uninitialized value.

Improvements

 * Made dirty publish dialog more intuitive & provided an option to open a modal Drafts widget directly from the dialog.
 * Reworked the internals of the debugger for new Luau VM to make it more robust
 * Enabled a new CollisionFidelity under CollisionFidelity/PreciseConvexDecomposition. This will generate a collision shape that will more closely match the outside surface of the visual geometry.
 * 425 =

Improvements

 * Exposed whether constraints should be drawn on top with the StudioService.DrawConstraintsOnTop property.
 * SelectionBox can now Adorn Attachments and Constraints as well as Models and Parts.
 * Added Humanoid.RequiresNeck. If disabled the Humanoid will not die when its Neck joint is removed. This should make temporary ragdoll states easier.
 * In new Luau VM xpcall now supports yielding inside the function object. This comes at no extra performance cost.

Changes

 * Added Phone and Tablet as playable devices by default in the game creation for new lua publish flow.
 * If you are in a group-owned game, the default option in creator and group dropdown for the publish flow will be that group.
 * Changed the Developer icon in the leaderboard to be for every developer who can edit the group game instead of just the owner.
 * Players can no longer interact with the core GUI when the gameplay paused GUI is displayed.

Fixes

 * Games in new publish flow existing games page are now sorted by last updated correctly.
 * Create/Overwrite button will be re-enabled as expected after publishing finishes in new publish flow.
 * Game settings dialog will not show an error anymore when trying to close it manually after pressing the Save Settings button.
 * Fixed a bug where in multiplayer scenarios Touchedand TouchEnded would fire in a cycle.
 * Improvement to the visual behavior of Terrain streaming.
 * 424 =

Fixes

 * Fixed selected text not being cleared when typing using an input method.
 * Studio: Fixed input methods becoming inactive after clicking on an already focused textbox.
 * Fixed a bug with TweenService that would cause the client to crash.
 * Fixed an issue by which setting the “Playing” property on a VideoFrame would result in excess network traffic even if the property did not change.
 * Fixed an issue by which setting the “Playing” property on a sound would result in excess network traffic even if the property did not change

Improvements

 * Added BasePart.Mass as a property. Once the property is enabled we’ll deprecate BasePart:GetMass in favor of it.

Changes

 * Changed microprofiler labels “uiStep” to “frameStep” and “jointsStepUi” to “stepAnimatedJoints”. Also, added joint counts to the tooltip for stepAnimatedJoints.
 * 423 =

Improvements

 * Added Gradient/Enabled (bool) which allows you to enable/disable the effect of gradient easily. Similar to Particle/Enabled/Beam.Enabled.
 * Added double/triple click support with a new argument to GuiObject/Activated.
 * Updated Manage Plugins design (text size and coloration).
 * Added creator dropdown in the new publish dialog.
 * Implemented initial support for first-class yieldable C calls in Luau VM, which makes pcall ~30x faster. This reworks the fundamentals of coroutine resumption so there be dragons.
 * Made updateVisuallySleeping (formerly known as onMovingHeartbeat) super fast.
 * Improved the performance of parallel collision detection in some cases.
 * Added Animator/ApplyVelocities. Takes a list of motors and applies velocities to Part1 (the assumed child part). Requires that the joints were already removed from the World by changing parent or setting JointInstance.Enabled = false before calling. Should be called on the network owner immediately after disabling joints and before animations are canceled.
 * Behavior improvements to the physics sleep system.

Changes

 * Users with edit permission cannot edit permission or add or remove users in new game settings permissions.
 * Publish buttons in new publish dialog will be disabled when a publish is in progress.
 * Renamed the onMovingHeartbeat (microprofiler lablel) to updateVisuallySleeping and will no longer be performed for headless server DataModels.

Fixes

 * Open Studio
 * Go to File->New
 * Create an empty place
 * Go to File->Save and save it in a newly created folder (one that did not exist before, for instance on the desktop).
 * Close the file/place in Studio
 * Now delete the folder that you created when saving it, the one on your desktop.
 * You should be able to delete that folder without any problems, unlike before when you would get an error message from Windows Explorer saying unable to delete.
 * Fixed an issue with streaming enabled that occurs when child parts are moved before parent resulting in the child part not being streamed in.
 * 422 =

Fixes

 * Fixed text selection not working correctly on macOS in Studio.
 * Fixed the return type of WorldRoot:Raycast.
 * Fixed a bug in Manage Plugins where removing a plugin goes into the Pending Update section.
 * “Drag Multiple Parts as One” studio setting will now function correctly again when dragging onto a rotated part. This fix will incidentally reduce floating point error some part dragging scenarios.
 * Luau no longer slows down or crashes Studio with expressions such as ("foo"):lower:lower ... :lower:lower.

Improvements

 * Added StudioService.ShowConstraintDetails, exposing the status of the Roblox Studio “Show Constraint Details” toggle to Lua.
 * Added a new StudioService property, StudioService/DraggerConstraintsEnabled, allowing plugins to determine whether the Constraints (Solve constraints while dragging) toggle is active in Studio.
 * TweenService updates have been moved from RunService.RenderStepped to RunService.Stepped.
 * Users can now copy/paste keyframes between animations in the new animation editor.

Changes

 * In new access permissions, group owned games will no longer be able to add user or group permissions.
 * Searchbar text in user-owned games will reflect that only users can be added for permissions.
 * Friends playability button removed in group owned game in new access permissions.
 * Team create is not forced for group-owned games for permissions.
 * Added a publish confirmation dialog if you forget to commit drafts.
 * 421 =

Fixes

 * Fixed an error in some game joins resulting in the following in the dev console:
 * 16:50:19.088 - BlackFrame is not a valid member of ScreenGui
 * 16:50:19.088 - Script ‘LoadingScript’, Line 370 16:50:19.088 - Stack
 * End 16:50:19.089 - Disconnected event because of exception
 * Fixed a benign CoreScript error in NotificationScript.

Improvements

 * ScrollingFrames now scroll smoothly when scrolled via the mouse wheel.
 * Added CFrame/XVector, CFrame/YVector, and CFrame/ZVector, exposing what LookVector, UpVector, and RightVector already do but in a more consistent and more mathematically friendly way.
 * Standalone Plugin development is now available to third party developers.
 * Added more microprofiler labels for work in Kernel::stepWorld:
 * BuoyancyAccumulator::computeForce
 * Humanoid::computeForces
 * KernelJoint::computeForces
 * copyCollisionConnectors
 * 420 =

Improvements

 * Updated and prettified the Plugins UI design.
 * Added a unified raycasting API, WorldRoot:Raycast, which takes a RaycastParams and returns a RaycastResult.
 * Added StudioService:GizmoRaycast, which raycasts against Attachments and constraint system gizmos in Roblox Studio.
 * Fixed a bug where the PlayerModule API unintentionally exposed members of CameraModule.
 * Added BallSocketConstraint.MaxFrictionTorque and AngularVelocity.ReactionTorqueEnabled to support simple joint friction.

Fixes

 * Added the Pants ID entry field back into the Game Settings Avatar tab.
 * 419 =

Fixes

 * ScrollingFrames now scroll by a fixed amount instead of by a percentage of the ScrollingFrame’s height.
 * Fixed an issue with override asset loading and added support for GroupModels and GroupPlugins.
 * Fixed an issue causing using Updated instead of Relevance to fetch plugins.
 * Fixed being able to commit scripts in the Drafts widget while they were already being committed (resulted in a UI error logged to Output).
 * Fixed drafts still being selected in the Drafts widget if you committed them and then checked them out to Drafts again.
 * Copy ID for meshes in game explorer now copies Mesh ID not MeshPart ID
 * Studio will now recover from fatal exceptions created by Luau.
 * Luau now correctly believes that string.byte returns a number, not a string.
 * Fixed an issue preventing users from entering payment information for Robux on Mac clients.
 * Fixed Studio issue in which previewed sounds continued playing after their parent parts are deleted.

Improvements

 * Improved Japanese and Korean input methods on the win32 client.
 * Enabled MSAA on recent PowerVR mobile devices.
 * Improved the behavior of the scale tool with grid snapping turned off, will now align things smoothly like the move tool does.
 * Improved the performance of the terrain generator.
 * Improved the power of large terrain brushes, and the results from the auto material brush setting.
 * In Luau, closing over upvalues that don’t change (that is, aren’t assigned to) is now substantially faster, generates less GC pressure, and the resulting closures take less memory.
 * Made behavior improvements to the physics sleep system.

Changes

 * Added a no checking mode which can be enabled through “–!nocheck” at the start of the script. While in this mode and you have the new Lua script analysis beta feature enabled, type annotations are allowed but are ignored.
 * Added . keybinding to open the Emotes Menu, and 1-8 keys are used to activate emotes on the wheel while it is open.
 * 418 =

Fixes

 * Fixed an issue preventing you from changing the cursor position by clicking in a TextBox that was already focused.
 * Fixed text cursor desyncing when typing into Studio in Japanese.
 * Fixed an issue where TextBox.Focused could fire multiple times when it should only fire once.
 * Fixed an issue with override asset loading and added support for GroupModels and GroupPlugins.
 * Fixed a crash that would occasionally happen while working within the ScriptEditor.
 * Fixed macOS texture stretching issues.
 * Fixed occasional crash when using the typed lua beta feature in Studio.

Improvements
Note that for this statement to work in Studio, you have to be opted into Luau VM beta.
 * Improved performance of the lighting update on mobile devices with PowerVR GPUs.
 * Added Min / Max methods to Vector2 and Vector3 classes.
 * Added a details page to edit allowed/denied plugin HTTP permissions into Manage Plugins.
 * Improved CSG/MeshPart physics memory usage when using identical but rescaled meshes.
 * Luau now supports continue statement in all loops; instead of breaking out of the loop, the statement skips the rest of the current loop iteration and continues with the next iteration.
 * Streaming properties in the workspace are now hidden unless streaming is enabled.

Changes

 * Asset ids for currently running plugins are now tracked in the same manner as the identity visible from printidentity in Studio. You should see -2 as a placeholder for user plugins loaded from the plugins folder in the filesystem when you printidentity and the asset id when using printidentity from a published plugin asset.
 * Deprecated Plugin:GetStudioUserId in favor of StudioService:GetUserId.
 * Team.PlayerRemoved now fires after the Player has been removed from Players when a player leaves the game.
 * Switched to using the game icon on the loading screen.
 * 417 =

Fixes

 * Fixed an issue with small gaps appearing in horizontal scrollbars.
 * Fixed CollisionGroupEditor making selection 10 seconds slower when the plugin is not in use.
 * SteerFloat and ThrottleFloat should now replicate correctly from Client to Server.
 * Fixed Game Settings not working if the start place was not in the first 10 places of the game.
 * Fixed “X” button in confirmation popup for deleting scripts checked out to drafts deleting scripts instead of canceling the operation.
 * Fixed CSGs and MeshParts to not use extra memory with physics geometry when duplicated and resized.
 * Fixed a bug where deleting and creating terrain in the same place in the same frame would cause physics to not work.
 * Fixed UI updating problems with Sound.Playing and Sound.TimePosition in Team Create.
 * Partially fixed an issue with Sound.Playing and Sound.TimePosition not behaving properly in Team Create.

Changes

 * Lua kick should now display the custom error message even if the client is disconnected early in the game load process. Lua kick adds a message that shows in logs. Do not rely on that log message existing or only existing for Lua kicks.

Improvements

 * The pcall handling of Roblox API errors is now ~1.5x faster
 * Humanoid/ApplyHumanoidDescription will now apply animations successfully to Humanoid NPC characters which have an Animate Script instead of an Animate Localscript.
 * 416 =

Fixes

 * Fixed an issue where TextBox.Focused can fire multiple times when it should only fire once.
 * Studio updates (Windows) will no longer…
 * forcibly shut down Studio. Shutting down Studio is now an exclusive right of the developer!
 * prevent you from opening new instances of Studio.
 * impact test sessions.
 * pull you out of a fullscreen game at 1 AM to tell you all of your open place instances are shutting down. If Studio is idle, it will remain idle!

Changes

 * TextScaled text will now respect UIPadding inserted into it.
 * CoreScript now has RobloxScript class permission. Cannot be moved, renamed, disabled, etc… by plugins or gamescripts.
 * Removed specular highlight on the terrain under the grass.

Improvements

 * Deduplicated collision geometry for Unions and MeshParts. This will lead to less memory usage when using identical but resized meshes.
 * Improvements to the LDL constraint solver performance.
 * WorldModel for limited physics functionality in a ViewportFrame.
 * 415 =

Improvements

 * Terrain generator now offsets its noise based on the target position so that contiguous generations blend together.
 * Optimized table.pack (~1.5x faster) and table.create with a second argument (also ~1.5x faster).
 * Optimized table construction when the last element is the varargs specifier (…); for 10-element tables constructed via {…} this is now ~3x faster.
 * Optimized physics memory when using MeshParts or CSGs with identical geometry but different sizes.
 * Improved debug line number generation for multi-line table literals and multi-line assignment statements https://devforum.roblox.com/t/attempt-to-index-nil-table-with-error-output-at-wrong-line/383894

Fixes

 * Fixed an issue where having over 100 plugins results in 0 plugins appearing in the Plugin Management window.
 * Fixed an issue where instances called Terrain would break the terrain tools plugin in Studio.
 * Fixed an issue where touch button wouldn’t always show up on thumbstick.
 * Fixed ContentProvider:PreloadAsync crash when given callback function.
 * Fixed a recently introduced memory leak.

Changes

 * Moderated Plugins will be automatically uninstalled.
 * 413 =

Fixes

 * Fixed the presentation of a dialog when installing a plugin from a web link.
 * Fixed Studio freeze due to loading of plugins having ‘wait’ or any other yield calls called before creation of plugin itself.
 * Fixed TextLable/TextTruncate truncating text unnecessarily.
 * Fixed children of UITableLayout rows not being sorted based on LayoutOrder.

Changes

 * Updated the text of the button when installing a plugin.
 * Disabled autosave to the cloud.
 * In studio, http proxy settings will be reset. These properties will no longer be writable from plugins or the command bar. They will remain readable.
 * Models that contain “Studio” or other settings objects will have these instances skipped but will continue to load the rest of the model. This should not affect models created by unmodified studio.

Improvements

 * Moderated plugins now show a reason indicating that they contain malicious content and can’t be run from the plugin management UI.
 * A new beta feature UIGradient is added and will take effect in studio if you turn on the feature. Publishing with this new feature is temporarily unavailable while we are collecting feedback.
 * Added support for trackpad gestures on the Windows client.
 * Added support for attributes in team create.
 * Optimized physics memory when using MeshParts or CSGs with identical geometry but different sizes.
 * Improved memory tracking with additional categories under the developer console.
 * 412 =

Improvements

 * DateTime is not ready for use. Right now, it will return nil.
 * Now, Play Solo will use the Studio language by default instead of English.
 * Click and drag thumbnails to rearrange them in Game Settings in Studio.

Fixes

 * Fixed the terrain flatten tool always treating plane lock as turned on.
 * Fixed a bug where the Toolbox would show “No Results Found…” even when there were results.
 * Fixed being unable to edit Jump settings in Game Settings after switching between height/power as reported in https://devforum.roblox.com/t/jump-option-in-game-settings-stops-accepting-input-when-toggling-between-height-power/390177.
 * Fixed text selection breaking when textbox contains invalid UTF-8.
 * Fixed invalid Unicode when deleting selected text in a TextBox

Changes

 * Moderated Plugins will be automatically uninstalled.
 * UserGameSettings.RCCProfilerRecordFrameRate and UserGameSettings.RCCProfilerRecordTimeFrame can no longer be written to via script and existing changes will be reverted.
 * 411 =

Improvements

 * DateTime is not ready for use. Right now, it will return nil.
 * Added the ability to import multiple terrain height maps to the same location and layer them over each other, and added (255, 255, 255) for the air material in color maps.
 * Added the ability to hold the alt key to select the terrain material under the mouse in the terrain tools plugin.
 * Improved terrain tools UI performance and activation logic
 * Added a “Log” button to the developer memory console to log those stats to the console.
 * Increased maximum brush size in the terrain tools to 64 voxels.
 * Converted dead wiki links to devhub URLs in Studio aside from Object Browser.
 * Added output dialog if publishing fails on close (async publishing).
 * Added new script folding behavior as a beta feature.
 * Refined the render/GPU memory allocation statistics.
 * If a character is removed within 5 seconds of a join, replaced, then re-removed, then respawns and is removed again then they will now have to wait the normal respawn time vs the 5 seconds from the second replacement.
 * Removed specular highlight on the terrain under the grass.
 * Improved the efficiency of Terrain streaming. Now there are lower CPU and memory costs on large levels.

Fixes

 * Fixed terrain tools to only use the biomes that have been selected for terrain generation.
 * Fixed an issue where Studio would sometimes enter a “flickering pop-up” state when disconnecting from a Team Create session.
 * Fixed being unable to open Game Settings with a script focused.
 * UDim2/lerp|UDim2:lerp now rounds offset instead of truncating.
 * Scrolling frames now sink left mouse down events on their scrollbars.
 * 410 =

Fixes

 * Fixed warnings/errors appearing in the output window for users whose installed paths include unicode characters.
 * Fixed an issue where the plugin installation button was displaying the incorrect colors.
 * Made “File->save As” not block the screen.
 * Fixed an issue with the interaction between “File->save As” and Draft Games.
 * Fixed the color picker from appearing in the wrong location.
 * Fixed frame spikes when complex mechanisms awaken.
 * Welds that are created automatically with Join Surfaces enabled are removed automatically when connected parts are deleted. Saved/published selections also will not save welds that are connected to outside the selection.

Improvements

 * Improved terrain tools UI performance and activation logic.
 * Added a pivot position selector to terrain tools brush settings.
 * Added a brush height slider to the terrain tools to allow for short but wide or tall but thin brushes.
 * Enabled users to mass update nested packages.
 * Fixed a bug where Humanoids would walk towards 0, 0, 0 for 8 seconds when they are reparented.
 * WorldModel for raycasting, animation and Humanoid:ApplyDescription in a ViewportFrame
 * 409 =

Improvements

 * Added DateTime type which can be used to create DateTime userdata (by values, timestamp, now or iso date string), switch a DateTime to local or universal time, and format a DateTime into a string.
 * New Plugin Management UI refreshes on Start Page and in-game.
 * Added attributes, which allow developers to extend instances with additional metadata and properties.
 * Developers are now allowed to open and close the Emotes Menu when the Topbar is disabled.

Fixes

 * Fixed a bug in standalone plugins where PluginMenus could not be used multiple times on the Start Menu.
 * Fixed issue with Async Publishing and “Publish To Roblox As”.
 * Partially fixed Sound.Playing and Sound.TimePosition not behaving properly in Team Create.
 * 408 =

Fixes

 * Fixed issue where plugin installation window was appearing twice.
 * Fixed the asset configuration window showing all groups instead of just those you can publish assets to.
 * Fixed brackets auto-completion inside nested function calls.
 * Fixed a crash when removing UI objects under certain circumstances.
 * Fixed several issues with ScrollingFrames.
 * Fixed a major performance regression when setting ScrollingFrame.CanvasPosition.
 * Fixed a crash on macOS 10.11 with shadowmaps.
 * Fixed graphics tearing on Google Pixelbook.

Improvements

 * InputObject:IsModifierKeyDown tells you whether the modifier key was down for a given input event Enum.ModifierKey.[Ctrl, Alt, Shift, Meta].
 * Added attributes, which allow developers to extend instances with additional metadata and properties.
 * Add Animator:GetPlayingAnimationTracks and Animator.AnimationPlayed to Animator. Animator.AnimationPlayed is not enabled yet. Along with the model search change, this eliminates the need for an AnimationController in animated models without a Humanoid.
 * Added JointInstance.Enabled, but waiting for supported clients to take over before enabling.
 * Implemented some changes to change Animator joint search root from “my parent’s parent” to FindFirstAncestorOfClass("Model"). Also implemented analytics to find games that may be affected in advance of enabling this change.
 * 407 =

Improvements

 * Plugins will now install immediately when clicking on the Install button on the web, rather than opening the web page inside Studio.
 * Refactored the avatar sound scripts.
 * Added two new Lua table functions:
 * table.create(size, [value]): creates an array-like table of size size, optionally filled with value. Note that due to Lua table length semantics, length of the result is nil if value is nil or not specified.
 * table.find(table, value, [init]): returns the numeric index of the first occurrence of value in the table, starting with init (that defaults to 1), or nil if the value isn’t found. The search stops at the first hole in the array similarly to ipairs.
 * Similarly to Lua 5.2, math.log now accepts logarithm base as a second, optional, argument: https://www.lua.org/manual/5.2/manual.html#pdf-math.log
 * Fixed a bug with getfenv(0) deoptimizations.

Fixes

 * Fixed a crash while loading places that contained MeshParts with bad data.
 * Fixed a bug where trying to drag after an in-place duplicate would drop the multi-selection.
 * Fixed a bug where BorderSize would not update the padding of a GuiObject when GuiObject.BorderMode was set to Middle or Inset.
 * Fixed incorrect text rendering in the Game Settings page when Studio is set to Chinese
 * Fixed an issue where seeking would not work properly for some sound files.

Changes

 * Brackets and quotes are no longer automatically closed in comments or strings.
 * Now, Model:MoveTo will only Move the model to the given point, and not attempt to join the model to outside parts. If you want a model to join after move, call Workspace:JoinToOutsiders.
 * Removed the following from DebugSettings:
 * DebugSettings.RobloxProductName
 * DebugSettings.VideoMemory
 * DebugSettings.OsPlatformId
 * DebugSettings.OsPlatform
 * DebugSettings.OsVer
 * DebugSettings.OsIs64Bit
 * DebugSettings.SystemProductName
 * DebugSettings.GfxCard
 * DebugSettings.SIMD
 * DebugSettings.ErrorReporting
 * Removed JointType.
 * 406 =

Improvements

 * Added autocomplete information for bit32, table.pack/table.unpack, string.split.
 * Since the automatic “RecentSave” causes confusion and unexpected data losses to some users, we decided to remove this feature gradually. The first step is to stop auto-generating files into the “RecentSave” folder, but such existing files are still accessible through the “Open Recent Saves” file menu.
 * Added support for text written in Bengali, Hindi, Georgian, Khmer, Burmese, Sinhala, and Thai.
 * Dynamic Thumbstick no longer forces auto jump.
 * Added SourceGameId as a field in player join data. This will make it easier for developers to verify the origin of a teleport.
 * Made RbxThumb accept arbitrary orders of parameters.
 * Implemented coroutine.isyieldable from Lua 5.3: https://www.lua.org/manual/5.3/manual.html#pdf-coroutine.isyieldable.

Changes

 * Now, you can call plugin:SetSetting("key", nil) to remove a setting.

Fixes

 * Fixed a memory leak in dynamic thumbstick.
 * SpawnLocations will no longer move characters above parts that they do not collide with.
 * Fixed StarterPlayer/MinCameraZoomDistance and StarterPlayer.CameraMode not being correctly taken into account until the user zoomed their camera.
 * Fixed an error with ContextActionService:BindAction where createTouchButton = true would sometimes error when being called too early.
 * Fixed a crash in manual joint adorn rendering code when one of the parts was destroyed.
 * 405 =

Fixes

 * Potential fix for observed crash on Studio close.
 * Fixed gamepad navigation not working correctly when the avatar context menu is enabled.
 * Fixed a bug that would cause disabled LayerCollectors to sink PointerActions.
 * Fixed an issue causing a changed event for UIGridLayout.AbsoluteCellSize to never be fired.
 * Fixed an issue where GetStringForKeyCode was not working correctly for dead keys on Windows.
 * Fixed recently broken tick function on Windows.
 * Fixed a performance issue with the new Beta Animation Editor.

Improvements

 * Added new GameIcon sizes 128x128, 256x256 and 512x512 to rbxthumb thumbnail loading.
 * String literals now support \z, \x and \u escapes from Lua 5.2. Number literals now support binary literals (0b10101) and digit separators (1_000_000).

Changes

 * Now, the remote exhaustion message for the event delayed invocation queue will display less often.
 * Disabled string.dump.
 * 404 =

Improvements

 * The Quick Access Menu config now supports selecting and manipulating multiple items at once.
 * FixedRobloxPluginGuiService not showing up in the explorer when the “Show Hidden Objects in Explorer” setting was enabled, as reported in https://devforum.roblox.com/t/show-robloxpluginguiservice-in-the-explorer-when-show-hidden-objects-in-explorer-is-true/337989.
 * Improved package performance when user typing in a script, which is a descendant of a very large package (>10000 parts).
 * Improved mechanism interpolation on some of the more complicated mechanisms.

Fixes

 * Fixed WeldConstraint Part property replication when using TeamCreate.
 * Fixed a Studio crash that happened while trying to insert an archived mesh using the Game Explorer.
 * Luau now correctly interprets vertical tabs and form feeds as whitespace in scripts.

Changes

 * Users will be warned on opening the same place file from multiple Studio instances. Only the first Studio instance that opens the file has the file ownership (others cannot save to this file to avoid an accidental file overwrite).
 * Deprecated the legacy thumbstick touch movement mode.
 * Removed DPad and Thumbpad movement modes.
 * Deprecated GlobalDataStore:OnUpdate.
 * Added table.move from Lua 5.3: https://www.lua.org/manual/5.3/manual.html#pdf-table.move
 * 403 =

Changes

 * Made explorer icon grayscaling work with all instances (previously just scripts/physics constraints).
 * Moderated Plugins will be automatically uninstalled.
 * Plugins can now call plugin:SetSetting("key", nil) to remove a setting.
 * Large Humanoid characters are now allowed to have a Humanoid.HipHeight of greater than 100 (up to 2048). So very large Humanoid characters should now get correctly placed on the ground.

Improvements

 * Users will be warned on openning the same place file from mutiple Studio instances. Only the first Studio instance that opens the file has the file ownership (others cannot save to this file to avoid an accidental file overwrite).
 * Improved Lua interpreter dispatch performance for Windows, making Lua-heavy benchmarks ~5-6% faster in Studio.
 * Addition to Surface Changes Beta Feature - changing a part surface with the Surface tool on the Studio toolbar now correctly removes joints and joins with surface welds only. Hinge and Motor surfaces are removed from this list.

Fixes

 * Fixed bug with SetCore("AvatarContextMenuTarget") not working correctly when attempting to close the menu.
 * Mac Studio (Release 401) failed to self-update due to a bug. Please delete your Mac Studio bundle and download the latest DMG from Roblox and do a clean installation.
 * Fixed the 3-5% crash increase caused by interpolation multithreading.
 * Fixed an issue where WeldConstraint wouldn’t be selectable in Studio when Constraint Details is off and Show Welds is on.
 * Fixed a bug where humanoid raycasts for standing/climbing would not ignore parts connected via NoCollisionConstraint.
 * 402 =

Changes

 * Brackets and quotes are no longer automatically closed in comments or strings.
 * Removed 'ExplosionType/CratersAndDebris`.
 * Removed Comma, Period, PageUp, and PageDown camera pan shortcuts.
 * Studio autocomplete now recommends using R, G, B, Lerp instead of r, g, b, lerp for Color3 objects.
 * Now scripts are allowed to write to the StarterPlayer.UserEmotesEnabled property.

Fixes

 * Now the CursorPosition property fires changed events when typing into a textbox.
 * Fixed a crash in manual joint adorn rendering code when one of the parts was destroyed.
 * Fixed a crash in mass/inertia calculation code when welding chains of ~4K parts. We still recommend against welding things that way if it’s not literally a four thousand block stack. Do whatever is natural for the construction, but everything in the assembly welded to one central part is definitely the best case for performance.

Improvements

 * Now, the X/Y/Z accessors for Vector2, Vector3 and CFrame are ~30% faster.
 * Improved clarity of Lua error messages, for example foo.bar now fails with attempt to index nil with 'bar' if foo is nil.
 * 401 =

Improvements

 * Removed the yellow package modification banner in Studio to unblock users from saving a place with a modified package inside.
 * Now UserInputService:IsKeyDown and UserInputService:IsMouseButtonPressed work for the entire application, not just when the main viewport has focus.
 * Unblocked users from saving a place with a modified package inside.
 * New Animation Editor plugin as a Beta Feature.

Changes

 * support for Mac OSX 10.9 and below is being sunsetted.
 * Surface join welds created with the Surface Join Change Beta Feature will now be plan Weld instances named “Weld”, rather than ManualWelds with custom names.
 * 400 =

Improvements

 * Introduced the flatten terrain tool.
 * Added UDim2/fromOffset and UDim2/fromScale constructors.
 * New API Terrain:ReplaceMaterial to replace the terrain material within a region.
 * Property access and method calls are now noticeably faster for objects in deep hierarchies.
 * Added APIs to allow plugins to access the Studio Rotate Increment, Grid Size, and Local Space settings.

Fixes

 * Fixed a bug where the options in Developer Console on mobile appeared unselectable and behind the console.
 * Fixed a crash while uploading a mesh where the texture file path is missing.
 * Fixed a bug where cars would be stuck in reverse with gamepad throttle inputs.
 * Fixed several bugs with ScrollingFrames.
 * Fixed the issue described in this report: https://devforum.roblox.com/t/replication-race-condition-when-reparenting-a-model-while-a-client-is-connecting/339084.
 * Fixed a problem where touch events were not generated for parts created too close to each other when one of the parts has CanCollide = false.
 * Fixed rigid body mass sometimes not being updated when a Massless part become it’s own root, causing a body to have 0 mass, instantly warp into the NaNiverse, and be destroyed. This fixes a hat dropping bug.
 * 399 =

Improvements

 * Added support for Deep Links for mobile apps using custom URL schemes “robloxmobile:” and “roblox:”.
 * Now, the save as local plugin always saves using the .rbxm file format. You no longer need to make a non-script parent element to have model or GUI elements in plugins you write locally.
 * Added support for PointerActions to PlayerScripts.
 * New ContentId type to allow easy loading of thumbnails.
 * Improved interpolation on some complicated mechanisms.
 * Interpolation should now run on multiple cores.

Fixes

 * Fixed a bug that user cannot open local places that contain packages.
 * Fixed a crash in Studio when displaying tooltips on OSX.
 * 398 =

Improvements

 * Updated the Terrain Tools UI.
 * Comment Selection and Uncomment Selection will no longer be available in favor of having one button for Toggling comments. (Shortcut Ctrl+Shift+c)
 * New ContentId type to allow easy loading of thumbnails.
 * Added a method to disable the gameplay paused GUI.
 * The loading screen will not default to landscape orientation. Instead, it will start as the phone’s orientation, then when the game loaded, change to whatever the game supports.
 * Added UserInputService.PointerAction.
 * Under a Studio setting, print some diagnostic information about game joins to the Studio output window. Diagnostic information helps provide some information about how much data is sent from the server to join the game. Note that for games with StreamingEnabled set to true the reported Terrain bytes will always be 0 because of the timing of how *Terrain is sent in StreamingEnabled games.
 * CollisionFidelity is now scriptable in the Studio Command Line and Plugins.
 * Calling functions from bit32 library is now substantially faster with new Lua VM (minor exception: lshift/rshift/arshift expect arguments in [0…31] range, larger or negative arguments prevent the optimization from happening; extract/replace expect explicitly specified width argument).
 * Now, calling functions from the math library as well as assert is now substantially faster with new Lua VM (except for math.random/math.randomseed and Roblox extensions, math.noise/math.clamp/math.sign).
 * Beta Feature - Removed the “Surface” option from the JointCreationMode dropdown in Studio, consolidating the option to simply being ‘on’ or ‘off’. This means if Surface Joining is on, all parts will join with a ManualWeld if flat coplanar sides are touching, regardless of surface type. Exceptions are for Hinge, Motor, and SteppingMotor surfaces.

Fixes

 * Fixed being unable to click output logs to open the source script/line.
 * Fixed auto-closing bracket commenting.
 * Fixed several bugs in ScrollingFrames.
 * Fixed a studio bug that resulted in the chat window taking up over half the screen and overriding developer input.
 * Fixed a bug where parts would still float/collide with terrain water even if set to ignore the collision via *Collision Groups or NoCollisionConstraint. Also, fixed an issue where a canCollide=false part would still collide with water if listening on a touch event.
 * Fixed a crash on the Apple Intel HD 3000.
 * Fixed a bug where parts were sometimes not selectable within the animation editor.

Changes

 * Streaming Pause UI is no longer shown on the first occurrence to avoid displaying over the loading screen.
 * 397 =

Improvements

 * The quick find script function can now be accessed via  or an icon indicating the type of script to the left of the script name.
 * The script editor now supports replacing strings in all scripts ( and ). You can choose to open scripts when replacing for the option to undo your changes. The Find Widget works on replaced results and updates accordingly.
 * The quick find function (filter function) is available with  and in the script editor context menu. It now shows functions across all scripts and can jump between scripts. Each function item also shows a corresponding path name which is also visible by hovering over an item.
 * Added a new property GuiObject.BorderMode that allows developers to specify how the border is positioned for the GuiObject.
 * Now the new Lua VM optimizes loops in the form of for k,v in next, table and for k,v in p(table) where p is a local variable initialized with pairs (or ipairs).

Fixes

 * Fixed a bug where AnalyticsService.ApiKey was unable to be saved while in TeamCreate mode.
 * Fixed graphics stability issues on some Huawei phones.
 * Fixed LOD distance to be calculated from camera focus.
 * Fixed issue where the R6 HumanoidRootPart failed to collide with walls.
 * 396 =

Improvements

 * Moved items around on the top of the Studio start page.
 * Intellisense should now turn off autocomplete suggestions when a closing bracket is inserted.
 * UX improvements to output. Fixed snapping to the bottom when a new message is logged, selection being dragged to the bottom of the output while messages were being logged, and Clear not resetting the duplicate message counter.
 * Improved the speed of Publishing & Saving to the cloud is to be much faster.
 * Users are allowed to quickly open a script from an existing script by using the Ctrl+P shortcut.
 * Made easing styles more consistent.
 * Added a new CoreGUI that is displayed to players when they have a poor connection.
 * Added UIGridLayout.AbsoluteCellSize and UIGridLayout.AbsoluteCellCount to UIGridLayout.
 * Now, HttpService:JSONEncode and HttpService/Decode support top level primitives.

Fixes

 * Fixed graphics stability issues on some Huawei phones.
 * Fixed holding backspace and arrow keys to delete/move multiple characters in textboxes.
 * Fixed a bug that auto-update doesn’t uncheck when user makes modification to a package.
 * Fixed the game settings panel to close properly with the “X” button after exiting play solo.
 * Fixed EasingStyle Back for EasingDirection InOut.
 * UI elements with zero size are allowed to be resized by the UI editor.
 * Fixed multiline parsing under some conditions in the new Lua VM.
 * Fixed “Massless” property not being respected by Inertia calculations.
 * Fixed register allocation issues in the new Lua compiler when compiling sequences of hundreds of chained calls (obj:Method1:Method2:…).

Changes

 * Removed Workspace.AutoJointsMode and AutoJointsMode.
 * 395 =

Improvements

 * Fixed issues with auto-closure of bracket comments.
 * Added three additional easing styles. Circ, Expo, and Cubic.
 * Added additional shortcuts to text boxes. Home will jump to the start of the current line. End will jump to the end of the current line. CTRL + Left Arrow will jump to the start of the current word. CTRL + Right Arrow will jump to the start of the next word.
 * HttpService:JSONEncode and HttpService:JSONDecode now support top level primitives.
 * DataModel.JobId is now set on Client, although it can still be empty in Studio.
 * Made the LDL-PGS solver multi-threaded.

Fixes

 * Fixed crashing when restarting Studio from the start menu.
 * Allowed developers to override backpack bindings through ContextActionService.
 * Fixed issues with the rendering of decals and boxmapped textures in ViewportFrames.

Changes

 * Disabled camera movement while editing text with the UI editor.
 * 394 =

Improvements

 * Fixed a corner case in global access in Lua where foo.bar would resolve to nil instead of failing when foo was an unassigned global.
 * Implemented table.pack / table.unpack from Lua 5.2
 * Fixed os.date("*t", -1) returning nil on Windows but a valid result on Mac (it will now always return nil)

Fixes

 * Fixed issue where we were not prompting developers on dirty quit.
 * Fixed Crash on restart from the start menu.
 * Fixes to cut command freezing key input in text boxes.
 * Fixed textboxes so that they will not occasionally replace all text with a paste clipboard with v.
 * Fixed keys so that they do not get stuck when switching window focus.
 * Fixed game icons in Game Settings always showing as moderated.
 * Fixed a crash in Roblox Studio involving mock purchases of products that are free or not for sale.
 * Rthro heads' part should not be bigger than (2, 1, 1).
 * Fixed issues with rendering of decals and boxmapped textures in viewPortFrames.
 * Fixed a bug where sometimes Mechanisms look disassembled when joining a game.
 * Now, the scale of an anchored humanoid will sync between client and server.
 * 393 =

Improvements

 * With the removal of the Context Help Widget, Plugins that utilize the OpenWikiPage API will now redirect the URL to an external browser.
 * With the removal of the Contextual Help widget, Script Inspection warning hyperlinks will now open in an external browser.
 * The "Help" context option in the Team Create widget now redirects to an external browser instead of showing the Context Help widget.
 * Removing the Context Help Widget and Ribbon Item because it was intrusive and not helpful.
 * Comment Selection and Uncomment Selection will no longer be available in favor of having one button for Toggling comments. (Shortcut )

Fixes

 * Sections of elements that have been clipped by ClipDescendants will no longer be selectable in the UI editor.
 * 392 =

Improvements

 * Added new Terrain:FillCylinder (CFrame, height, radius, material) API.
 * Added text selection and Ctrl+C to copy for TextBox.
 * Closing quotes and brackets will be skipped when the user types the closing character and is to the left of that character.
 * An open quote and a closing quote should be closed automatically.
 * An open bracket and a closing bracket should be closed automatically.
 * Introduced a native captcha in Studio.
 * Set LayoutOrder as the default of SortOrder for UIGridStyleLayout when inserting it in Studio.
 * Characters are now spawned directly above spawn locations, rather than dropping down on to them from several studs above.
 * Fixed Humanoid stepping while outside of Workspace. It was only doing a ndFirstAncestorOfType("Workspace") check and exiting in that case, but this could add up if there are many Humanoids outside of Workspace.
 * Added bit32 library to Lua.
 * Fixed os.date("*t", -1) returning nil on Windows but a valid result on Mac (it will now always return nil).
 * Now, printing a table (ex: print(_G)) will print a value that is formatted similar to a 64b pointer but is not a 64b pointer.
 * Updated microprofiler labels for the physics job. The frame job label Physics was often misleading; that job includes a lot more than just physics!
 * Renamed the Physics job to Simulation to better reflect its broad scope
 * Added physicsStepped label to cover the actual physics simulation
 * Renamed doWorldStep to worldStep
 * Renamed updateNetworkedObjects to interpolateNetworkedAssemblies
 * Added handleFallenParts label
 * Also changed labels under gameStepped and Heatbeat for clarity.
 * Renamed Stepped to stepLegacy (specifically covers Humanoids, Rockets, BodyPositions, FlagStands, Skateboards, and Explosions…)
 * Added stepLegacyControllers (splitting Controller updates from stepLegacy)
 * Renamed Animation to stepAnimation
 * Renamed Script to RunService.Stepped (more specific and easier to identify)
 * Added heartbeatInternal and RunService.Heartbeat labels
 * Added RunService.RenderStepped and fireBindToRenderSteppedCallbacks labels
 * BasePart:CanCollideWith (Instance part) will now correctly return false for two parts connected by constraints that do not allow collisions (HingeConstraint, BallSocketConstraint, NoCollisionConstraint).
 * Emotes Menu will only be shown when the Animate script in the players Character supports Emotes.

Fixes

 * Corrected the "Send" variable as UTC time in the callback of MessagingService:SubscribeAsync.
 * Fixed some crashes that occur while closing a place.
 * Fixed the Toolbox button in the View tab from being disabled when a script is open.
 * Now, the Keypad period should appear when typing in textboxes with numlock on.
 * Fixed keys getting stuck in the down state when switching between windows.
 * Fixed bug where imported multi-mesh can have wrong locations for some objects.
 * Currently, there is a bug where if you store a value between (2 ^ 63) and (2 ^ 64 - 1) in datastores it will fail to read and will be read as nil. Fixed this defect so that those values will be read. As always, all numbers larger than 2 ^ 53 will be subject to limited precision.
 * ChatService/FilterStringAsync and ChatService/FilterStringForBroadcast are now rate-limited when called from Client.
 * Removed the keybinds that open the Emotes Menu.

Changes

 * Removed the Context Help Widget and Ribbon Item.
 * From now on, scripts that have "[Embedded]" in the LinkedSource value field will have the LinkedSource property hidden. Developers are encouraged to use Packages in place of Linked Scripts.
 * The 'Scripts' directory of the Game Explorer will no longer be visible if that Game does not have any Linked Scripts. Games that have Linked Scripts will be unaffected.
 * The 'Enable Autocomplete' option will now show up in the Script Editor section of Settings instead of the Advanced section.
 * 391 =

Improvements

 * Released AnalyticsService which provides Roblox developers with out-of-the-box analytics so they can improve their games.
 * Released a new Terrain Tool for importing height and color maps.
 * Added text selection and Ctrl+C to copy for TextBox.
 * Now you can add unofficial supported languages to the cloud by updating cloud translation tables.
 * Reduced the amount of memory required for Roblox userdata objects (e.g. Lua storage for Instance handles is 1.5x smaller on 64-bit platforms).
 * Added support to auto capture date and time format.
 * Introduced Texture/OffsetStudsU and Texture/OffsetStudsVto control UV offset of texture objects.

Fixes

 * Fixed the “Send” variable as UTC time in the callback of MessagingService/SubscribeAsync.
 * Fixed squish test for zooming in the Script Editor.
 * Fixed several ScrollingFrame bugs.
 * Fixed issues caused by setting UIScale to 0.
 * Now, any modifications to CustomEvent receiver connections will not be reflected while CustomEventReceiver/SourceValueChanged is being called for each receiver due to setting value.

Changes

 * Moved the placeholder image on newly inserted ImageLabel|ImageLabels and ImageButton|ImageButtons from being a web asset to the content directory.
 * The second chat icon on mobile has been removed.
 * Changed ContextActionService to now send Cancel inputs when a enum/KeyCode is bound over by a related enum/UserInputType.
 * 390 =
 * Characters are now spawned directly above spawn locations, rather than dropping down on to them from several studs above.
 * Improved rendering of stroked text on BillboardGui / SurfaceGui on high retina devices.
 * Now, Automatic Text Capture uses named parameter.
 * Added an option found in Beta Features menu to enable the new Lua VM for Studio only.
 * The receipt in MarketplaceService/ProcessReceipt is cached to prevent it from being processed successfully multiple times in some corner cases.

Fixes

 * Fixed zooming issues with the Script Editor.
 * Fixed “too many constants” error when compiling large scripts.
 * Fixed a bug in physics data computation for MeshPart|meshParts with LoDs.
 * Restricted playback speed to be less than or equal to 18 to fix improper looping and playback.

Changes

 * Deprecated Instance/DataCost.
 * 389 =

Improvements

 * The Mouse and Keyboard are now supported in-game on Xbox.
 * Added the new NoCollisionConstraint physics constraint, which prevents collisions between a specific pair of parts.

Fixes

 * Fixed a sizing issue for the Quick Access Configuration dialog.
 * Parallelized collision detection.
 * Fixed a bug in physics data computation for MeshPart|MeshParts with LODs
 * Fixed crashes when MeshPart|MeshParts with LODs were displayed in ViewportFrame.
 * Added property changed messages for PlaybackSpeed in addition to Pitch, to make the name consistent with the property.
 * PlayerId is now correctly reported in crash dumps uploaded from Client.
 * 388 =

Improvements

 * StaterPlayerScripts and StarterCharacterScripts (the Instances with these names, not the scripts they usually refer to) cannot be created with Instance.new.
 * Optimized MeshPart and PartOperation collisions for speed and stability.

Fixes

 * Fixed issue on Xbox One client where the leaderstat in top right did not respect StarterGui/SetCoreGuiEnabled.
 * Fixed an issue with “Logging out” not appearing long enough on the login page.
 * Fixed the issue that the TestRoot ScreenGui is not destroyed after testing.
 * 387 =

Improvements

 * Enabled Vulkan for some Android devices with PowerVR GPUs and recent drivers.
 * Changed all fog computations to use camera distance (range fog).
 * CSG and MeshParts have three levels of detail.
 * Now, Ctrl+L will work with attachments in Studio.
 * Added an optional callback function parameter to ContentProvider/PreloadAsync.

Fixes

 * Fixed an issue with “Logging out” not appearing long enough on the login page.
 * Fixed invisible expand arrows in Explorer window (on Mac).
 * Fixed an issue where pressing tab could delete a line in the script editor.
 * Fixed an issue where IDE document title was not updating when developers “published as” on local places.
 * Now, meshes with LODs should be exported and displayed correctly on humanoids.
 * SpecialMesh|SpecialMeshes will no longer be rendered with LODs.
 * Fixed the color of handle adornments when rendered as always on top in Voxel, Compatibility and ShadowMap Lighting/Technology.
 * Fixed low-quality grass texture tiling.
 * MeshPart/RenderFidelity and PartOperation/RenderFidelity properties moved from the Behavior category to the Appearance category.
 * Placeholder text used in TextBox GUI elements is now captured and added to the localization database .CSV file, and will be correctly localized if data is entered and the place is run with an appropriate locale.
 * 386 =

Improvements

 * Enabled Vulkan for some Android devices with PowerVR GPUs and recent drivers.
 * Changed all fog computations to use camera distance (range fog).
 * Now, Ctrl+L will work with attachments in Studio.
 * Added an optional callback function parameter to ContentProvider/PreloadAsync.

Fixes

 * Fixed an issue where IDE document title was not updating when developers “published as” on local places.
 * Meshes with LODs should be exported and displayed on humanoids correctly.
 * SpecialMesh|SpecialMeshes will no longer be rendered with LODs.
 * Fixed the color of handle adornments when rendered as always on top in Voxel, Compatibility and ShadowMap Lighting/Technology.
 * Fixed low-quality grass texture tiling.
 * MeshPart/RenderFidelity and PartOperation/RenderFidelity properties moved from the Behavior category to the Appearance category.
 * Placeholder text used in TextBox GUI elements is now captured and added to the localization database .CSV file, and will be correctly localized if data is entered and the place is run with an appropriate locale.
 * 385 =

Improvements

 * Added a third zoom level to gamepad controls.
 * The “/me” command for chat is default off. If you want to turn it back on, set ChatSettings/AllowMeCommand to true.
 * Pressing Spacebar in Animation Clip Editor will now play or pause the animation.
 * The MeshPart/RenderFidelity property automatically resets to the default value when the MeshPart/MeshId is changed.
 * Running the installer with the “-bundle” command, will create an installer bundle that can be used to install the Roblox Client/Studio without requiring additional downloads.
 * Optimized physics collisions to run on multiple CPU cores.

Fixes

 * Fixed keys getting stuck in the down state when switching between windows.
 * Now, the textbox cursor blink timer will be reset on user input so that it will always be visible while typing.
 * Fixed viewport focus issue on Play Solo launch.
 * Fixed Studio crash on OS X when changing a game name.
 * Fixed a crash with a corrupted install. Now, it will display an error message.
 * Fixed an issue where IDE document title was not updating when developers “published as” on local places.
 * Placeholder text used in TextBox GUI elements is now captured and added to the localization database .CSV file, and will be correctly localized if data is entered and the place is run with an appropriate locale.
 * 384 =

Improvements

 * Now, a Toast notification will appear when a package fails to Auto-update in edit mode in Studio.
 * Calls to the Lua Instance/isA|IsA function has now been optimized to be ~2x faster.
 * Added ViewportFrame properties: ViewportFrame/Ambient, ViewportFrame/LightColor, ViewportFrame/LightDirection.
 * Now, changes in enum/RenderFidelity are immediately picked up by the rendering engine.
 * Developers can choose to have players in streaming enabled games pause when the minimum radius is not present around the player. The pause is a client-side physics pause, preventing the player from moving. Only physics for parts that are owned by the player are paused. Networking and scripting is unaffected. Must be enabled via workspace property.

Fixes

 * Fixed being unable to scroll in some Game Settings pages if the previous page did not have a scrollbar.
 * Fixed datatype/ColorSequence dialog’s Close button display text.
 * Fixed a crash during autocomplete on the first line of a script.
 * Fixed bug to correctly handle invalid values entered in the Properties widget.
 * Fixed Humanoid/MoveTo with cameraRelative set to true when the camera is facing straight down.
 * Fixed Sun and Moon looking flat when the camera is far away from origin.
 * Fixed so that developer should be able to import small (<100) triangles without a crash.
 * Fixed an issue with a crash due to the D3D11/driver refusing to work with certain errors.

Changes

 * Changed Player/CharacterAdded signal ordering such that the CharacterAdded signal is fired after the Player/Character has been added to the DataModel and the Character rig and appearance has been fully initialized before this point.
 * 383 =

Improvements

 * The error message for MessagingService will be modified when the topic name is too long or the topic name is empty.
 * The select all action (Ctrl+A) is now significantly faster.
 * Auto-update packages will not update more frequently.
 * Added a PixelsPerStud property to SurfaceGui that automatically scales with part size.
 * When excessive numbers of invalid animations are attempted to be loaded, the error messages will not always be printed. Error messages will also show rbxassetid formatted id’s with only the number arg displayed, even when the original id uses a different protocol.
 * Migrating PartOperation and MeshPart physics data to a more efficient pipeline. Should speed up loading on levels with a lot of MeshParts and PartOperations.

Fixes

 * Fixed an issue where pressing tab could delete a line in the script editor.
 * Fixed an issue with Package actions when there are a large amount of versions of said package.
 * Fixed an issue where IDE document title was not updating when developers “published as” on local places.
 * Fixed UISizeConstraint/UIAspectRatioConstraint not updating correctly in some cases.
 * Fixed buttons in PluginGuis getting stuck hovered when the mouse exits the window.
 * Changed CharacterAdded signal ordering such that the CharacterAdded signal is fired after the Character has been added to the DataModel and the Character rig and appearance has been fully initialized before this point.
 * Fixed noise pattern showing up on glass on some devices.
 * Fixed a minor bug where sometimes parts would not wake up when connected constraints were disabled.
 * 382 =

Improvements

 * Auto-update packages will not update more frequently.
 * Added a PixelsPerStud property to SurfaceGui that automatically scales with part size.
 * Updated Players:GetNameFromUserIdAsync and Players:GetUserIdFromNameAsync to short-circuit and return value from *Player instance if the player is in the game.
 * MeshParts can now be rendered at different levels of detail depending on distance to player. LODs are generated automatically for every new mesh imported from file or can be added to any existing meshPart. Adding LODs to a part imported before this change will create and assign a new AssetID to the part which will lead to moderation.
 * Added new BillboardGui properties for controlling scaling.

Fixes

 * Fixed broken link to game icon tutorial in Studio Game Settings.
 * Minor text changes in the make private dialog in Game Settings.
 * Fixed Roblox failing to load many files when installed under a directory junction on Windows. Beware! Roblox will not recognize junctions as symlinks anymore!
 * Fixed BrickColor.palette throwing the wrong error message.
 * Fixed a bug where you could not create welds on selected parts if they were canCollide = false.
 * Fixed an issue with animation root joint translation scaling for imported FBX animations.
 * Fixed a bug where models pop after moving the Lower Torso in Animation Editor.

Changes

 * Made the developer console render over top of the disconnect prompt.
 * 381 =

Improvements

 * Only large thumbnails will be rejected during image upload for game settings.
 * The “Restart” dialog after changing settings now offers a control to actually do the restart for you, and it will re-open your currently opened place.
 * AnimationId will be sanitized in client dev console, but not studio.
 * New Lighting mode option which enables a new shadow system that allows casting shadows from any object in the scene.
 * MeshParts can now be rendered at different levels of detail depending on distance to player. LODs are generated automatically for every new mesh imported from file or can be added to any existing meshPart. Adding LODs to a part imported before this change will create and assign a new AssetID to the part which will lead to moderation.
 * Game Settings for the avatar can now be set on unpublished places.
 * Added a generic timeline to UILibrary.

Fixes

 * Fixed an issue where places were not being saved when turning Team Create on.
 * Fixed issue with Plugin Management tab name.
 * Fixed crashes related to Find All.
 * Fixed a crash on Adreno 530 with sparkles particles.
 * Fixed Roblox failing to load many files when it is installed under a directory junction on Windows. Beware! Roblox will not recognize junctions as symlinks anymore.
 * Fixed a bug where turning Interpolation off in the Animation Editor did nothing.

Changes
Auto-update disabled for child packages.
 * SocialService.GameInvitePromptClosed will now fire when users close the ESC menu entry point of the in-game Invitation prompt. This event will no longer pass which UserIds were invited to the game.
 * Changed iOS app icon.
 * In Roblox Studio, the Game Explorer will no longer refresh after publishing a package object.
 * 380 =

Improvements

 * The website game setting “Enable Studio Access to API Services” can now be configured in Studio Game Settings.
 * The “Restart” dialog after changing settings now offers a control to actually do the restart for you, and it will re-open your currently opened place.
 * Created new API UserInputService/GetStringForKeycode to allow help text for keyboard actions to be localized based on the user’s keyboard layout.
 * New Lighting mode option which enables a new shadow system that allows casting shadows from any object in the scene.

Fixes

 * Now, updating a game’s name in Game Settings will correctly update names in the Game Explorer.
 * Fixed Game Explorer universe name display to update correctly.
 * Textboxes in Game Settings will now follow the cursor when text fills the box.
 * Fixed an issue with being unable to publish places with nested Packages in Team Create sessions.
 * Fixed crash related to script Diff on Script Recovery Widget.
 * Improved performance for games with over 250,000 Weld instances.
 * Fixed Modal property being ignored when the ScreenGui is in a Folder.
 * Fixed crash for importing empty FBX files with Avatar Importer.
 * Errors in MarketplaceService.PromptPurchaseFinished and MarketplaceService.PromptGamePassPurchaseFinishedwill cause isPurchase/wasPurchase to be set to false. This arg will be checked on RCC automatically. The client is rate limited to a rate based on how fast the purchase prompt could be interacted with.
 * Places should not grant one-time benefits based solely on these two remote events. As mentioned, there are cases where wasPurchased could be changed to false. Further, the server verification of wasPurchased only checks that the user owns the gamepass – not that the user just now purchased it. Gamepasses can also be purchased outside of the game. Places should use DataStore to determine that a one-time benefit has already been granted.

Changes

 * Changed iOS app icon.
 * Minor text changes in the make private dialog in Game Settings.
 * Removed support for uploading gif, tga, and bmp files as thumbnails/icons from Game Settings in Studio because they cannot be previewed. Supported files now include: png, jpg, and jpeg.
 * Developers will no longer be able to enable/disable team create while testing.
 * 379 =

Improvements
Updated reflection to accurately reflect that Joint.Active is not replicated or serialized.
 * New “update” option in Studio Localization Plugin allows updating/adding translations to the cloud table without replacing the entire thing.
 * The “Restart” dialog after changing settings now offers a control to actually do the restart for you, and it will re-open your currently opened place.
 * Created new API UserInputService/GetStringForKeycode to allow help text for keyboard actions to be localized based on the user’s keyboard layout.
 * Added new StarterPlayerService properties ‘StarterPlayer/CharacterUseJumpPower’, ‘StarterPlayer/CharacterJumpPower’, ‘StarterPlayer/CharacterJumpHeight’, ‘StarterPlayer/CharacterWalkSpeed’, and ‘StarterPlayer/CharacterMaxSlopeAngle’.

Fixes

 * Fixed when TeleportService:TeleportPartyAsync was missing GetJoinData.
 * Fixed locking issue related to opening places with many packages.
 * Fixed crash for importing empty FBX files with Avatar Importer.

Changes

 * The back button in the toolbar of the search friends screen will now take users back to the screen they were previously viewing.
 * Developers will no longer be able to enable/disable team create while testing.
 * The function xpcall now accepts function arguments similarly to pcall.
 * Marked Glue and JointsService as deprecated.
 * Relative paths will no longer allow navigating out of the content sandbox, even a relative path eventually returns to the sandbox.
 * 378 =

Improvements

 * Improvements to the Toolbox in Studio.
 * Improved text rendering for Simplified Chinese on iOS devices.
 * Allow ScreenGui.DisplayOrder to be set to negative values.
 * Added the ability for the Animation Editor to scroll when dragging mouse past the edge of the window.
 * Client/Studio icons pinned to the taskbar will now be updated when the client/studio is updated to correctly point to the new location.

Fixes

 * Fixed breakpoint lines not being highlighted until manually scrolling editor when they were originally off-screen.
 * Fixed issue with Save To Cloud where users in Team Create would not be able to publish twice.
 * Fixed leaderstats sometimes not displaying in the top bar.
 * Fixed input for ScreenGuis inside Folders sometimes being processed out of order.
 * Fixed several bugs with ScrollingFrames.
 * Fixed a bug where the joint panel in world space was showing incorrect values.

Changes

 * Developers will no longer be able to enable/disable team create while testing.
 * Changed default dark theme colors to make finding and selecting text more readable.
 * Jumping to a breakpoint focuses it in the center of the screen instead of at the edge.
 * BillboardGui.Active defaults to true in Studio.
 * The GuiObject.MouseEnter and GuiObject.MouseLeave events will no longer fire for Touch input.
 * Deprecated UIGridStyleLayout:ApplyLayout, which is a no-op unless you are using the already-deprecated UIGridStyleLayout:SetCustomSortFunction API.


 * 377 =

Improvements

 * Add “View Selector” that replaces “Display Axis” tool in studio.
 * Improved line breaking for CJK text.
 * The Game Settings now have a new World panel for various world and avatar related settings.
 * Optimized the Animation Editor to run faster with many keys.
 * New AngularVelocity constraint that maintains a constraint angular velocity on a body.

Changes

 * It is no longer possible to deselect all filters in the developer console log.
 * Scripts will no longer have numbers added to them showing how many unsaved scripts you have.
 * Separated Ctrl+W/Ctrl+F4 combined shortcut to Ctrl+W=close current tab & Ctrl+F4=close file. Closing the current tab will not do anything if the place is the active tab, preventing accidental place closes with Ctrl+W. Use Ctrl+F4 to close the place.

Fixes

 * Fixed breakpoints being treated as invalid on valid lines.
 * Fixed a bug where moving keys in Animation Editor would clear out copy clipboard.
 * Fixed a bug where animation event names from one animation were carried over to another in Animation Editor.
 * The tostring function no longer works on normally restricted Instances.
 * Fixed a bug where joints would not always disable collisions if a joint that does not disable collisions was enabled first.


 * 376 =

Fixes

 * Correct some error messages about MessagingService.
 * The dropdown menus for the developer console will no longer appear behind the developer console.
 * It will no longer be possible to open the non-functional server view if the developer console in games where you are not the developer.
 * Fixed a bug where Terrain load optimization was causing buoyancy to not work in deep water.

Improvements

 * Added the function GetValue to TweenService, which can be used to transform a linear alpha from 0 to 1 into any EasingStyle/EasingDirection combination.
 * Improved UX for middle mouse panning with Studio camera so it feels better.
 * Improved large-terrain map loading in Studio and Servers. Requires to open and save map in Studio to see improvement first.
 * Game Settings for the avatar can now be set on unpublished places.

Changes

 * New Humanoid CollisionType property which adds support for using InnerBox collision mode for R15/Rthro non-player characters.


 * 375 =

Improvements

 * Corrected the "Send" field as "Sent" in the table argument of the MessagingService:SubscribeAsync callback.
 * Reduced the size of the dollying cursor.
 * Added a Lua API for retrieving the Studio icon (seen in the Explorer widget) for any Roblox class.
 * Renamed auto-save to auto-recovery to distinguish it from saving to the cloud.
 * Now packages can revert to a specific version.
 * Removed internal GuiItem, GuiRoot, and ButtonBindingWidget classes. Change base class of Backpack, BackpackItem (Tool base class), and StarterPack from GuiItem to Instance.
 * Reconnect will now connect you back to the starter place of the current game.
 * The new game settings world panel can be used to set gravity, player avatar jump power, jump height, walk speed, and max slope angle.
 * New World panel in Game Settings for the various world and avatar related settings.
 * New props on Humanoid can be used to set jump height and whether to use jump height or jump power.
 * Game Settings for the avatar can now be set on unpublished places.
 * Optimized the Animation Editor to run faster with many keys.

Fixes

 * The feature which allows you to dolly the camera with the middle mouse button will no longer work on camera’s with a CameraType of Scriptable.
 * Fixed raw strings IDs being shown for Studio users having the Danish locale.
 * Fixed incorrect mesh version insertion after removing and importing a mesh with the same name.
 * Fixed issue with Team Create places sometimes being unable to publish when there are Packages in the place.
 * Avatar page in the Game Settings now has the correct colors for dark and light themes.
 * Fixed an issue with some mp3 audio files being decoded incorrectly.


 * 374 =

Fixes

 * Fixed warnings when the Data Store queue is exceeded to include the key.
 * Made a small change to the scale tool that should only prevent edge cases related to resizing rotated parts.
 * Fixed raw strings ids being shown for Studio users having Danish locale
 * Fixed crash when using "" as a separator to string.split
 * Fixed issues caused by setting UIScale to 0

Changes

 * Enabled "Copy Texture ID to Clipboard" context menu.
 * Changed text of open/save options under file menu to reflect where the open/saves are coming from. Removed "Published as" from the title bar.

Improvements

 * Renamed auto-save to auto-recovery to distinguish it from saving to the cloud.
 * Can now enable diff view from script recovery view
 * The bulk importer now fails immediately when the daily upload limit is reached instead of retrying indefinitely until a timeout is reached.
 * Option to import mesh files with multiple meshes as a single mesh vs importing each as a different mesh has moved from Studio settings to import dialog. This option can now be configured per-file.
 * Added a function for packages to undo local changes.
 * Now the chat's system messages will be automaically localized if you never fork the following module: SystemMessage.lua
 * Improved performance when a large minimum radius is used with streaming enabled games.
 * Updated LocalizationService/GetEntries to be non-yielding.


 * 165 =

Client

 * Touch Gestures now return processed booleans as true as long as gesture is over a visible GUI element.


 * 164 =

API
}}
 * New service, with methods , , and.