Release Notes for 461

Notes for Release 461


Client Difference Log

API Changes

Added Class DataStoreKeyInfo : Instance [NotCreatable] [NotReplicated]
	Added Property string DataStoreKeyInfo.KeyName [<💾> SaveOnly] [ReadOnly] [NotReplicated]

Added Class DataStore : GlobalDataStore [NotCreatable] [NotReplicated]
	Added Function Instance DataStore:ListKeysAsync(string prefix = "", int pageSize = 0) [Yields]

Added Class DataStoreKeyPages : Pages [NotCreatable] [NotReplicated]

Added Function void AssetManagerService:InsertMeshesWithLocation(Array aliasNames) {RobloxScriptSecurity}
Added Function void NotificationService:SwitchedToAppShellFeature(Enum<AppShellFeature> appShellFeature) {RobloxScriptSecurity}

Added Enum AppShellFeature
	Added EnumItem AppShellFeature.None : 0
	Added EnumItem AppShellFeature.Chat : 1
	Added EnumItem AppShellFeature.AvatarEditor : 2
	Added EnumItem AppShellFeature.GamePage : 3
	Added EnumItem AppShellFeature.HomePage : 4
	Added EnumItem AppShellFeature.More : 5
	Added EnumItem AppShellFeature.Landing : 6

Added EnumItem AnalyticsLogLevel.Information : 2

Changed the category of Property BasePart.CanTouch 
	from: "Data"
	  to: "Behavior"

Removed EnumItem AnalyticsLogLevel.Infomation

(Click here for a syntax highlighted version!)


Does this only apply to SteamVR? Afaik the issue also existed with the Oculus client and wasn’t isolated to just SteamVR. If the change currently doesn’t apply to the Oculus client, will it in the near future?

(cc @Tom_atoes)


This is bad, why not just have a toggle in the settings menu thats why it exists


This does only apply to SteamVR. It’s not clear if Oculus has a similar mechanism that we could tap into; ideally we’d have some more first-class product integration but that requires a lot of product & engineering work that we currently don’t have scheduled. So we don’t have any current plans to implement a similar change for Oculus.


If there’s more interest in VR this year, I’m hoping that we’ll see support for finger tracking from Valve Index controllers. Perhaps even OpenXR?

I still think VR on Roblox has a lot of potential. It just needs more care and attention than it’s currently getting.


Woah, does this mean I’ll be able to migrate my DataStores? This would be a huge relief, and enable me to make changes and add new types of persistent content without stressing about maintaining the content’s save format long-term. Supporting and maintaining old save versions is a burden.

It would also be great to see support for binary save data. I’m designing a scalable player home customization system where players can have multiple houses with lots of space, and my game’s server-side save process would be much more performant if could encode directly to a binary string, instead of needing to remap the bits to a base 64 alphabet.

Along with binary save support, it would be helpful if string.format("%q", foo) formatted newlines as \n instead of as \ followed by an actual newline. This would make it much easier manage binary strings from the command line, considering that printing a 16kb binary string takes 64 lines on average. It’s also possible to optimize "\000A" as "\0A" (being mindful of cases like "\0001").


Woah, lots of cool DataStore improvements in the pipeline, huh?! If the keys are sorted by recently-added, this will have really awesome implications for matchmaking/server browsers and similar implementations. As others may have suggested, batch get and set functionality (get data from multiple keys at once) would further extend the usability of this feature.

I also noticed we’re finally going to be able to associate DataStore entries with userIds, so hopefully the right of erasure spam goes away. I’m interested to see if we’ll ever get something like a DataStore that can be shared across multiple games of the same owner.


Added the capability to create different modes of attachment placement at creation time.

Our game uses attachments a lot to line up real-time welds and stuff like that, so this change might be neat if it was more clear what it actually does. Can you elaborate or give some examples?