In-Experience Creation of Packages [Disabled]

[Update] January 8, 2024


[Update] August 24, 2023


[Update] August 3, 2023


Hi Creators,

Today, we are releasing a new API that enables you to allow users to save creations they make in your experiences to their Inventory on Roblox. It’s a first step towards empowering creative activities that happen within experiences and to bring their contents to life at the platform level.

Vision for In-Experience Creation

You fuel creativity across Roblox today–not just in Studio, but within your experiences where users can also partake in creative expression. Until now, such creative activity was siloed within individual experiences. We envision a world where every user can create, and their creations transcend experiences to become platform content.

Imagine that you can open “building” experiences – enabling users to create shoes, dresses, weapons, vehicles, and anything they can imagine. Users can then save their creations directly onto the platform, to dress their avatars, to use in gameplay in other experiences, or to sell on the marketplace. Users will enjoy richer and more diverse content on Roblox, while creators gain new opportunities to drive engagement and monetization through the produced content from their experiences.

New API: Enable saving from your experience to a user’s inventory

We are releasing a new API for creators to optionally allow their users to save packages from an experience to their personal Inventories. Imagine that as a creator, you give your users the ability to create custom creatures as pets in your game. With this new API, users can save these objects from your experience as packages! You have full control to specify which objects can be saved.

Users can display their amazing creations on their profiles or utilize them in Studio. These creations attribute your “building” experience when displayed on the platform, so that any admirer can use the attribution link to come to your experience and create their own.

You can use the new API AssetService:PromptCreateAssetAsync() to specify what objects in your experience you want to support this save capability. This API is invoked on the server through client remote events. When invoked, the API displays the Submit Package dialog to the user. It will output creations as a Package into the users’ Inventories.

Note: We encourage you to implement additional constraints on the content type you would like to enable from your experience, such as limiting object shapes or combinations. We will continue to work with the community on improvements/tools/workflows that can make oversight into content easier.

Want to see the API in action? Try it out in this demo experience: In-Experience Creation Demo Arena (read below for details).

For more information on how to develop using this API, refer to this tutorial doc.

Submit Package dialog

When the API is invoked, the Submit Package dialog is displayed in the experience. Roblox provides the dialog UI out-of-the-box, as the save workflow is a platform-level functionality. The Submit Package dialog prompts users of your experience to provide a name and description (required) for the Package they’re saving.

By clicking on Submit, your users allow your experience to save a package into their Inventory. As part of save, the package will be automatically submitted to moderation. The packages created from in-experience are subject to the same moderation rules as any other Packages or Models on the platform.

Once a package is saved, your users can see it in their Inventory:

The packages also show up in these places for the user:

  1. Creator Dashboard > Creations > Development Items > Models & Packages:

  2. A User’s Profile, under Creations > Models & Packages

Attribution: Crediting the original experience for enabling creation

Unlocking creativity makes our platform richer and creators that enable in-experience creation should get full credit for their work. All assets that were created from within an experience will be attributed to their source experience, wherever users see them on the platform.

When users click on the attribution link to the original experience, they will be redirected to the Experience Page. In the future, we will enable users to deep-link directly into a creation workflow in-experience. They can come to your experience and make their own creations!

Currently, attribution for in-experience packages are shown in:

  • User’s Inventory, in the asset details page
  • Creator Dashboard
  • User’s Profile
  • Toolbox in Studio, under the asset’s details page

Note: Attribution is currently tied to a specific version of the created package. If a user further edits a package in Studio to create a new version, attribution will not be displayed for the new version.

Try it out in this demo experience!

We have created an experience In-Experience Creation Demo Arena to showcase how you can use the new in-experience creation API. Try it out!

  1. When you enter the experience, you’ll see a house and a car, with paint buckets in front of them.

  2. Try customizing the house or the car with the color of your choice, by interacting with the paint buckets. For example, I’ve colored the car black:

  3. Once the house or the car is your desired color, move to the green C sign (C for Create).

    1. Press the “E” key (or tap on mobile) to interact with the Create sign. When you do, the experience is calling the new AssetService:PromptCreateAssetAsync() API to invoke the in-experience Submit Package dialog.
  4. In the dialog, put in a name and description for the package. Click Submit. You should see a confirmation on whether the save succeeded or failed.

  5. Go to your Inventory and see the house or car that you just saved from this experience!

We have made the In-Experience Creation Demo Arena experience downloadable as a copy, so you can check out how it was built using the new API!

  1. On the Experience page, click on the menu icon (marked by the red circle in the image below)
  2. Click Edit in Studio.
  3. This opens up a copy of the experience in Studio
  4. Look through the content and scripts! Feel free to build on top of it and make it your own.

Release scope & Known issues

This release is only the first step towards the limitless possibilities of in-experience creation. It is currently scoped to these functionalities:

  • Only Packages can be saved from in-experience.

  • Packages with scripts or any private assets (including nested packages) cannot be saved from in-experience.

    • The API will block in-experience save when it detects scripts or private assets in the content that is leaving the experience. The save prompt will not load for the users.

    • As the creator, when you are running/playtesting your experience, you will see error messages logged to the Studio Output Window or the Developer Console if the API fails to save due to the presence of scripts or private assets.

Known issues

  • When testing the new API in Studio, use the Play Solo or Team Test modes. The save flow currently fails when using Local Server testing mode.

  • In the Submit Package dialog, currently there is no inline validation of the text being entered into the Name & Description fields.

    The validation and moderation happens once you click Submit, which is why you may see a slight delay before seeing the save success/fail confirmation dialog.

What’s next

This is just the beginning, and some capabilities we are exploring next are:

  • Expanding the in-experience save functionality to Avatar items! Imagine people creating custom bodies in your experience and wearing them wherever they go on the platform.

  • Unlocking safe and secure inclusion of scripts in in-experience creations.

  • Allowing the ability to import creations back into an experience.

  • Enabling new monetization mechanics for in-experience creation.

  • Enabling easier moderation of content by the creator inside experiences.

We would love to hear your thoughts on these topics.


We will work with the community to expand in-experience creation to its full potential. Please comment below for your feedback or ideas!

Many thanks to @FlyingButter2008, @bluestann, @yipiokay, @vreddym, @GeneralRelish, @goofysufi, @almondpvdding, @leek_clee, @friendly_totoro, @poppyphizzy, @Bug_0xFF, @rbxeash, @Aleutian_Tern, @GreatPrinceZuko, @manyglacier, @TheGamer101, @FarazTheGreat, and others for their work on this initiative.

345 Likes

This topic was automatically opened after 10 minutes.

Now, while you’re already working on packages, can you PLEASE fix this bug that makes packages not updatable?
This bug has been causing me problems for several months now, and makes it practically impossible to continue development on this project at the moment.

Edit: This has finally been fixed!

106 Likes

This is AWESOME! I can’t wait to see all the cool new things that could come as a result of this! Keep up the great work!

55 Likes

Lol what’s next! The ability to make experiences within an experience :joy:

In all seriousness, pretty cool update! I tested out the place linked, and I just have a suggestion. I feel like this UI should animate in instead of it just showing. It reminds me of the gamepass/dev product UI which does animate in.

And this couldn’t have came at the right time, I am working on a building game myself. Maybe I could use this feature here?

84 Likes

I see both good and bad in an update like this. The goods include the ability to allow non-developers to learn how models work, and to give them the ability to publish some for which they can look a the source code on their own terms. Kind of like a work backwards to progress forwards kind of scenario. Now the bads would be in case if the model consists of a script that contains phrases or backdoors that would get the unknowing players banned.

76 Likes

This actually seems very helpful to most people, although I probably won’t do this myself, i do see that some people will like this!

47 Likes

Will this service be accessible in plugins? When scripts are unlocked, I would like to use it to create a package distributor.

39 Likes

These feel like things that should have been implemented on release, while I understand that releasing these features with the overall product launch would make the release much later. The feature currently satisfies very little use-cases because of these very strict limitations and still requires developers to serialise each and every single asset that a player may wish to save for future customisation.

As for importing assets back into experience, all we need is the ability to use LoadAsset on assets created within our experiences, yet we can’t do that :sad:

52 Likes

That’s already possible with AssetService:CreatePlaceAsync(). Building games use that to allow players to make their own worlds and save them with AssetService:SavePlaceAsync()

48 Likes

Oh, I never knew about this API! Does it save scripts too?

30 Likes

Seems good, now I can have the same truck I made in a game!

30 Likes

Sorry but why is this at all necessary? I honestly see no use cases for this in any game. Not just that but think about the amount of potential vulnerabilities that will be created, players accidentally uploading inappropriate models because of developers taking advantage of Roblox’s vulnerabilities.

37 Likes

Building games could use this, also it says what game the model was created in, and then the developer would be banned if they upload something to the players inventory that should not be there.

31 Likes

I understand that, but I feel there should be an alternative to having to upload models into a player’s inventory, EG: Datastores shared across games.

32 Likes

Yep, they have pretty much everything normal places have. It’s a bit awkward to update those worlds, but you can make an updater system. How it works is that you have a script on the created place that loads in a model, and inside that model you have code and assets to update the worlds. The biggest annoyance imo is that you can’t modify automatically what objects are in those places before runtime, which means you can’t change the meshid of objects, or changing scripts that are like in starterplayerscripts doesn’t really work because the scripts can be loaded into the player before you are able to update them

32 Likes

Imagine you build a really cool structure in a building game. You want to take this really cool structure and put it within your own game, so you can keep it to yourself, forever. Maybe you even want to show this really cool structure off to your friends within Roblox Studio. You can save the creation and it’s forever yours. This’ll be helpful for newbie creators if they wish to create something in their favorite game to migrate it to their own games.

Welcome to Bloxburg would be an especially good case if it had this implemented.

41 Likes

This was actually a feature for multiple years and actually gave you no preview of what was being uploaded under your profile via the (now removed) AssetService:CreatePlaceInPlayerInventoryAsync function, this is a major step up in security since this former alternative. On top of this, unlike the former mentioned function, all copies of the asset via this new function have the game attached to them reducing the risk of malicious abuse.

32 Likes

Definitely a step up in security, but I can see developers just moving a thumbnail camera to hide any inappropriate content. It’s good that the experience it was uploaded from is also included in the model’s data, however I am also slightly concerned of the possibility of a player building something inappropriate through in-game build systems, uploading it from the game and then blaming it on the game. I still feel something like this should be handled through datastores.

31 Likes

Hey really sorry about this problem. We are actually working on a fix as we speak.

41 Likes