Problem
As a Roblox developer, it is currently too hard to share data across multiple experiences.
Use Cases
Although the following use cases are presented, there are more use cases that I can think of.
Use Case 1
This use case is more or less moot since the creation of the player banning API. However, a player that cheats or exploits can be banned in one game which will ban them from all games for a publisher.
Use Case 2
A player who earns in-game currency in one game can carry their currency into another game. The same can be said for player levels, and other stats.
Use Case 3
Certain common data such as notes on the player, alts, etc… for game master (moderator) use can be stored in a common location for access to those individuals within all games from a publisher.
Use Case 4
(Provided by @mastawba)
When one makes a game that contains mature content (17+) and also has the same game which is for younger audiences, sharing player save data between games becomes paramount. Since it’s different versions of the same game with separate experience identifiers, it is an issue not being able to do this.
Additional Information
Currently, the only way to do this involves the use of Cloud APIs and storing the data off the Roblox platform, or looping the request back to the Roblox platform with the new destination.
Both methods create additional headaches with security and reliability. The big issue here is once the player’s data leaves the platform, Roblox has lost control of it.
Proposed Solution
One implementation that I thought of is having a separate API for a global datastore which can share data across multiple experiences and/or universes.
You would have a web interface for the specific datastore in which one could add or remove the experiences which are allowed to access it, similar to the current sound permissions. Unlike the sound permissions, you can revoke access for security reasons. This would also allow the creation and deletion of said datastore. You would have to create the datastore first in the web interface to use it. Upon creation, you would be given a system generated identifier for that specific datastore. The identifiers are unique across the platform.
Within the experiences, you can create sub-datastores like you do now with the APIs. Alternatively, the identifier is used to create a datastore instance similar to DataStoreService:GetDataStore() which will make it easier for developers to adopt such a system. However, this would use a new API which could be called GlobalDataStoreService
or something along those lines.
Conclusion
If Roblox is able to address this issue, it would improve my development experience because then I will be able to share common data across experiences to facilitate and improve the user experience in related games. It would also allow for the improvement of game management by the publisher. Furthermore, it would improve security since the data is not leaving the Roblox platform. Once the data leave the platform, it’s vulnerable to tampering and theft by a threat actor. By keeping the data on the platform, these issues are mitigated.