LinkedFolders — syncronizing assets, models, and scripts across places and games

As a Roblox developer, it is currently too hard to use the same set of utilities, models, or scripts across multiple places and games.

A LinkedFolder overwrites its contents with those from a model on the website when the game loads. This allows multiple places and games to have the same assets, models, or scripts, which update whenever the model on the website updates.

Studio Interface

LinkedFolders will have properties panel buttons and context menu options to update their contents globally:

  • With a new LinkedFolder, this will set it up for syncing with a new model on the website
  • With an existing LinkedFolder, this will update the existing model on the website

When creating a new LinkedFolder, you just insert like a normal Folder, add your contents, and press “upload”. From then on, the LinkedFolder and any copies will get updated to the newest version from the website when the game loads, and updates can be published to the website with one click.

API Example

LinkedFolder

  • AssetId: The LinkedFolder will download the children of the LinkedFolder at AssetId when the game loads
  • Updates: If false, the folder will not download contents from the website, and its contents will not be overwritten when the game loads.
  • :UpdateContents(): A method to download a newer version from the website. Returns true if updated, and false if no changes were made.
  • :GetNewestAssetVersionId(): Returns the newest version id, to compare with the current version id
  • AssetVersionId: A read-only property with the AssetVersionId of the currently-downloaded model
  • Loaded: A read-only property to check if the model has been downloaded

Other details

LinkedFolders will be synced by the server in live games. LinkedFolders will allow downloading of the game owner’s models, or public models.

I see this as a much cleaner and more flexible solution to the problems addressed by GameStorage:

  • LinkedFolders are not tied to Games, so developers can save and work on projects locally
  • It solves the synchronization weirdness with GameStorage. The LinkedFolders update at specific times and only have updates when a new version of the model is published.
  • LinkedFolders allow developers to control if the linked instances stay on the server or replicate to clients, depending on where the LinkedFolder is parented.
  • It allows for publicly share-able, update-able models.
  • Developers are able to use the same set of utilities in multiple games, too, instead of just within one game.

If Roblox is able to address this issue, I would find it much easier to manage both projects with multiple places and my set of projects as a whole. All of my projects share some utilities that I sometimes find bugs in and need to update, and multi-place projects usually all share a base set of code that should be easy to update all-at-once.

29 Likes

yes please!

this would allow us to create frameworks that remain consistent rather than out-of-date across all games we create.

an alternative is make universes not rely on a single lobby place (cough) so that we could use linkedsource more effectively, but this also includes assets other than source containers so i like this more.

You could do this already with Lua and InsertService. It doesn’t really call for any new functionality.

This request doesn’t address the largest pain point IMO, which is publishing to a model. Perhaps you should restructure your request to focus on how you want it streamlined rather than proposing an API for it that could be written in Lua.

Just my hopefully-constructive advice.

I think this concept would be cool if it represented an instance of a toolbox model in-game that gets automatically downloaded and uploaded. If you modify it within Studio, you can publish your changes with one click because it should be associated with an asset already.

1 Like

You can’t use it for anything that shouldn’t be available to clients:


The publish-with-one-click thing is an excellent idea, and I’ll add it to the list of what this can do. I really don’t publish to models a lot since I keep most of my assets saved locally, so I’ve forgotten how much of a pain it can be to find and republish models sometimes.

You can if you publish everything in your model parented to something that doesn’t replicate. It’s a bit of a hack though. We need official support for that, which is a separate problem unrelated to this.

Edit: I’m actually not sure if that’s true. It might replicate anyway because InsertService is a replication container. Regardless, I think it’s a separate issue.

1 Like