Packages


To keep assets organized and reusable across your team or across multiple projects, group your instances and convert them into reusable packages. Packages make the overall process of building worlds faster and more ergonomic, but they also help with consistency, deduplication, collaboration, and versioning:

  • Easily update all copies of a package to the latest version (or only update specific copies).
  • Set packages to automatically update whenever there's a new version.
  • Give collaborators Edit or Use permissions to the contents of a package.
  • View the full version history for a package, compare versions, and restore old versions.

The most efficient workflow is to create a package, share it with any collaborators, and set it to auto-update. And you don't have to wait for a model to be "done" before using it in a package. Even if the package is a placeholder on top of a simple shape, you can use it to greybox your environment and then have the placeholder copies automatically update as you publish more detailed versions.

Creating Packages

You can create a package from any single object or any single parent and children branch of objects. If you want to create a package for a single object, we recommend adding it to a Model grouping first so that you can add, remove, or scale instance within the package later without breaking the package.

  1. In the Explorer window or 3D viewport, right-click the desired object and select Convert to Package.

    The context menu that display when you right-click an object in the Explorer window. The Convert to Package menu item is highlighted.
  2. In the new window, fill in the package details. In particular, if you're working in a group, set Ownership to the appropriate group in which you have permission to create/edit group experiences.

  3. Click Submit.

  4. After the conversion completes, the object receives a "chain link" symbol in the Explorer window to identify it as a package. Additionally, you can see a new PackageLink object parented to the object.

    A maple tree model in the Explorer window with the package icon next to it.

  5. (Optional) Select the PackageLink object and enable AutoUpdate in the Properties window. Note how the icon changes to indicate that the package is set to automatically update.

    A maple tree model in the Explorer window with the auto-update package icon next to it.

Inserting Packages

To insert a package that doesn't already exist in the current place, you must initially insert it from the Toolbox:

  • From InventoryMy Packages for packages that you've published to or obtained from the Creator Store, as well as packages that a friend owns and has given you permissions to use.
  • From CreationsGroup Packages for packages published by members of your group (including yourself).
A close up view of the Toolbox with both the Inventory tab and the assets dropdown menu highlighted.
Toolbox → Inventory → My Packages
A close up view of the Toolbox with the Creations tab highlighted.
Toolbox → Creations → Group Packages

Once you've inserted a package into a place's data model, it appears in the Packages folder of the Asset Manager and remains there even if you later delete all copies of it. However, when you publish the place, the folder will update to reflect only packages used within the place.

The Asset Manager window with a few example packages.
Packages in Asset Manager

Publishing Package Changes

You can publish any changes you make to a package as a new version to make them available to other copies of the package throughout the place and across all experiences. Note that it's not required to publish a modified package before publishing a place (the modified version is saved along with the place for future iteration).

To publish changes to a package:

  1. In the Explorer window or 3D viewport, right-click the modified copy and select Publish to Package.

    The context menu that display when you right-click an object in the Explorer window. The Publish to Package menu item is highlighted.
  2. If a package copy has auto-update turned on, it immediately pulls in the updated version when you open the place that contains them. Other copies get a white dot on the package icon that indicates an update is available. You can individually update or mass-update them as needed.

    Two packages in the Explorer set to auto-update, and one with an update available.

  3. (Optional) Add a description of your changes:

    1. Right-click the package and select Package Details.
    2. In the Asset Configuration window, select Versions.
    3. Under your most-recent change, select Add.
    4. Describe your changes and click Submit.

Updating Outdated Copies

You can update outdated package copies to the most recent version, or you can continue to use the older version.

To update one or more package copies to the latest version:

  1. In the Explorer window, locate outdated copies by the white dot on the package icon. You can also select the outdated copy in the 3D viewport, but it might be harder to find this way.

    Two packages in the Explorer set to auto-update, and one with an update available.

  2. Right-click the outdated copy and select Get Latest Package. You can also select multiple packages, right-click, and Get Latest For Selected Packages.

Mass Updates

Extensive use of packages may result in many package copies across multiple places in an experience. In addition to individual syncing and automatic updates, you can update all copies of a package through mass updating.

  1. (Recommended) Close other Studio instances with any of the experience's places open; this prevents another unsaved instance of a place from potentially overwriting your updates.

  2. In the Explorer window or 3D viewport, right-click the desired package and select Update All.

  3. Choose all places in the experience or some subset of places and click Update.

    A view of the mass update window, showing two places.

    To prevent unintended overwrites, mass updating does not affect modified versions of a package. After the mass update completes, Studio displays a warning with the number of packages that it did not update, if any.

Automatic Updates

To make syncing easier, you can set a package copy to update automatically whenever a newer version is published. Auto-update of the package copies will take place when a place is opened in Studio.

  1. In the Explorer window, expand the package's hierarchy tree and select its PackageLink object.

    A close up view of a packaged chandelier model in the Explorer window. The PackageLink object is highlighted.
  2. In the Properties window, enable the AutoUpdate property. If you have nested packages, this property only applies to the highest-level parent package, meaning automatic updates only occur when the parent package is updated.

Sharing and Access Levels

If desired, you can share packages with friends or grant access to specific user roles within your group.

  1. In the Explorer, Toolbox, or Asset Manager, right-click the desired package and select Package Details.

  2. In the Asset Configuration window, select Permissions.

    • For a group-owned package, expand the roles tree. Then choose a permission level for each role. Selection boxes that are disabled indicate that the permission is already configured for that role and cannot be changed from this window.

      A close up view of some settings in the pop-up window. The arrow icon next to the group icon and the member Edit dropdown menu are highlighted.
      PermissionDescription
      EditMembers of the role can able to use, view, and edit the current and previous package versions, including publishing changes to it. Granting edit access to a role from this window only grants access to the specific package.
      No AccessMembers of the role do not have access to any new versions of the package, although they retain access to the current version inserted into the place.
    • For a user-owned package, search for friends through the search field, click their username, and choose a permission level.

      PermissionDescription
      Use & ViewThe user can use and view (but not edit) the current and previous package versions. Once you provide a user with this ability, you cannot revoke access to a copy they already inserted into their experience; revoking access prevents reinsertion or package updates, but package copies in their data model remain intact.
      EditThe user can use, view, and edit the current and previous package versions, including publishing changes to it.

Modifying Packages

You can edit packages and their children just like other objects. Modifying packages disables auto-update until you publish or revert the changes.

The pop-up notice that you cannot update a modified package until you publish or revert your changes.

Most edits flag the package as modified, although the following changes are not considered package modifications:

  • Changing the name of the root node.
  • Changing the position or rotation of the root node of a package that is a BasePart, Model, or GuiObject.
  • Changing the Enabled property of a root node GuiObject such as a ScreenGui, SurfaceGui, or BillboardGui.
  • Changing a part reference of a Weld inside the package that references an instance outside of the package.

Once modified, packages with unpublished changes get a modified icon in the Explorer window:

The Explorer window with an icon that identifies unpublished package changes.

Adding or Updating Configurations

You can include instance attributes at the root of a package to customize its behavior, for example the max speed of a packaged vehicle or the debounce time for a packaged button.

When you publish a package, the current set of attributes/values will become the package's default configurations. On any given copy of a package, configurations are shown in bold italics and those attribute values can be changed on a per-instance basis. When package copies are updated, modified configuration values will be preserved, while other attributes will be updated to the latest default value.

The Attributes section of the Properties window. Two properties are highlighted as having their default values while two other italicized properties are highlighted to show they have been configured.

Nested Packages

You can nest packages inside of other packages to maintain and collaborate on complex hierarchies, such as a series of vehicle mechanics which can be modified independently of the vehicle's parent package. This example shows a car package that contains four copies of the same wheel package:

An expanded hierarchy in the Explorer window showing how packages can contain packages.

Package Scripts

Each script within an unmodified package is read-only and shows a notification on the top with a hyperlink to unlock the script.

A script tab with a yellow notification that you can click to modifiy the script that's within an unmodified package.

Clicking the hyperlink:

  • Flags the package as modified regardless of whether you edit the script.
  • Removes the notification/hyperlink from other scripts within the package.

Once the package is published and moved to an unmodified state, the scripts under it become read-only with a hyperlink to modify.

Reverting Package Changes

Instead of undoing an entire series of package changes one by one, you can revert unpublished changes in one action, restore a package to a previous version, or revert changes to specific configurations.

Reverting Unpublished Changes

To undo an entire series of unpublished changes:

  1. In the Explorer window, locate modified copies by the exclamation point next to their names. You can also select modified copies in the 3D viewport, which might be easier.

  2. Right-click a single modified copy and select Undo Changes to Package, or select multiple copies (at least one of them modified), right-click, and select Undo Changes to Selected Packages.

Restoring to Version

To restore a package to a previously published version:

  1. In the Explorer window, 3D viewport, Toolbox, or Asset Manager, right-click the desired package and select Package Details.

  2. In the Asset Configuration window, select Versions. The window displays details for each published version, including the date and time of publication, along with any descriptions of the changes.

  3. Click the checkmark next to the version you want to restore and click Submit.

    The pop-up window for a chandelier asset. It displays multiple versions.

Reverting Configurations

To revert any configuration attribute to its default, select the Reset option from the gear menu in the Attributes section of the Properties window.

The Attributes section of the Properties window. The gear menu is expanded and the Reset menu item is highlighted.

Comparing Package Versions

When a package has multiple versions, you can compare changes between versions using the diff viewer, which is helpful for reviewing package updates, comparing your local changes against the latest version, and checking the content of past versions before restoring.

The tool has a package hierarchy menu that indicates all added, removed, or modified instances between versions using corresponding icons, with the following tabs available:

  • Visual Overview shows the visual differences of the 3D rendering under different camera positions. It's the default view for packages with a 3D object (models, parts) as the root object, and it's currently only available for the root object.

    An example of the Visual Overview tab in the diff viewer. One version of a building displays on the left-hand side, and another on the right-hand side.
  • Properties shows changes of properties and attributes. It's the default view for packages with a non-3D object (scripts, lights, 2D objects) as the root object, and it's available for all instances in a package.

    An example of the Properties tab in the diff viewer. Modified properties in different versions are highlighted.
  • Script shows line-by-line script differences. It's available for packages containing scripts, regardless of whether the script is the root object or not.

    An example of the Script tab in the diff viewer. Modified script lines in different versions are highlighted.

To compare package versions:

  1. In the Explorer window or 3D viewport, right-click the target package and select Compare Package Versions.

  2. By default, the window compares changes between your local copy and the latest version. Use the two dropdown menus to compare different versions.

    A close up view of an example diff viewer. The compare settings are highlighted.
  3. After selecting versions:

    • To compare the visual renderings of the root model, if applicable, select the Visual Overview tab and adjust the camera control for your desired angle. Controls are synchronized across views:

      • Pan the camera using left mouse clicks.
      • Rotate the camera using right mouse clicks.
      • Zoom in and out the camera with the mouse wheel.
      • Recenter using the keyboard shortcut -F.
    • To compare properties and attributes of an instance, select the instance and the Properties tab.

    • To compare script differences, if applicable, select any script to open the Script tab for line-by-line changes between your selected versions, similar to source control applications.

Alternatively, you can open the script diff tool directly:

  1. In the Explorer window or 3D viewport, right-click the target package, which must either be a script or contain scripts, and select View Script Changes.
  2. In the diff tab that opens, compare all changes of the selected script between the current package copy and the latest published or local version.