Configuration Reference

owner

|

The owner of the resources that will be created.

ValueDescription
'personal'All resources will be created in the authorizer user's account.
group: <id>All resources will be created in the specified group's account.

payments

Determines which account should make payments when creating resources that cost Robux. Note that Mantle will never make purchases unless the --allow-purchases flag is enabled.

ValueDescription
'owner'All payments will come from the balance of the user or group specified by the owner property.
'personal'All payments will come from the balance of the authorized user.
'group'All payments will come from the balance of the group specified by the owner property. Payments can only be set to 'group' when the owner is also set to a group because Roblox does not currently allow groups to pay for resources outside of themselves.

environments

requiredarray<>

The list of environments which Mantle can deploy to.

environments.*.label

requiredstring

The label of the environment that is used to identify the environment via the --environment flag. Must be unique across all environments.

environments.*.branches

optionalarray<string>

An array of file globs to match against Git branches. If the --environment flag is not specified, Mantle will pick the first environment which contains a matching file glob for the current Git branch. If no environments match, Mantle will exit with a success code.

environments.*.tagCommit

optionalboolean

Whether or not to tag the commit with place file versions after successful deployments. It is recommended to only enable this on your production environment. Tags will be of the format <label>-v<version> where <label> is the label of the place and <version> is the place's Roblox version.

For example, a start place with Roblox version 23 would have the tag start-v23.

environments.*.targetNamePrefix

optional |

Adds a prefix to the target's name configuration. The implementation is dependent on the target's type. For Experience targets, all place names will be updated with the prefix.

ValueDescription
'environmentLabel'The target name prefix will use the format [<ENVIRONMENT>] where <ENVIRONMENT> is the value of the environment's label property in all caps. For example, if the environment's label was 'dev' and the target's name was "Made with Mantle", the resulting target name will be "[DEV] Made with Mantle".
custom: <prefix>The target name prefix will be the supplied value.

environments.*.targetAccess

optional

Overrides the target's access. The implementation is dependent on the target's type. For Experience targets, the playability property will be overridden.

ValueDescription
'public'The target will be accessible to all Roblox users.
'private'The target will only be accessible to the authorized user.
'friends'The target will only be accessible to the authorized user and that user's Roblox friends.

environments.*.targetOverrides

optional

Environment-specific overrides for the target resource definition. This will override all configuration, including changes made by the targetNamePrefix and targetAccess properties.

Override the target configuration. Should match the type of the target configuration.

target

required

Defines the target resource which Mantle will deploy to. Currently Mantle only supports targeting Experiences, but in the future it will support other types like Plugins and Models.

target.experience

required

target.experience.configuration

optional

The Experience's Roblox configuration.

💡
In order to configure the name and description of an experience, use the name and description properties of the experience's start place

target.experience.configuration.genre

The experience's genre.

target.experience.configuration.playableDevices

array<>

The devices that the experience can be played on.

target.experience.configuration.playability

Determines who has access to play the experience.

ValueDescription
'public'The experience will be playable by all Roblox users.
'private'The experience will only be playable by the authorized user.
'friends'The experience will only be playable to the authorized user and that user's Roblox friends.

target.experience.configuration.paidAccess

|

Determines whether or not paid access is be enabled, and if it is, how much it costs. This should not be enabled when privateServers are also enabled as they are incompatible.

ValueDescription
'disabled'Paid access will be disabled.
price: <price>Paid access will be enabled and will cost the provided number of Robux. Must be a minimum of 25.

target.experience.configuration.privateServers

|

Determines whether or not private servers are enabled, and if they are, how much they cost. This should not be enabled when paidAccess is also enabled as they are incompatible.

ValueDescription
'disabled'Private servers will be disabled.
'free'Private servers will be enabled and will be free to purchase.
price: <price>Private servers will be enabled and will cost the provided number of Robux.

target.experience.configuration.enableStudioAccessToApis

boolean

Whether or not studio should be able to use Roblox APIs for this place.

target.experience.configuration.allowThirdPartySales

boolean

Whether or not this experience should allow third-party sales.

target.experience.configuration.allowThirdPartyTeleports

boolean

Whether or not this experience should allow third-party teleports.

target.experience.configuration.avatarType

The types of avatars that players can use in this experience.

target.experience.configuration.avatarAnimationType

The type of avatar animation that players can use in this experience.

target.experience.configuration.avatarCollisionType

The type of avatar collision that players can use in this experience.

target.experience.configuration.avatarScaleConstraints

optional

The scale constraints to apply to player avatars in the experience. Defaults to Roblox's defaults. Each entry may include a min, max, or both. If one is excluded, the default will be used.

Supported properties: bodyType, head, height, proportions, width.

target.experience.configuration.avatarAssetOverrides

optional

The asset overrides to apply to player avatars in the experience. Defaults to Roblox's defaults.

Supported properties: face, head, leftArm, leftLeg, rightArm, rightLeg, torso, tshirt, shirt, pants

target.experience.places

optionaldictionary<>

The experience's places. There must be at least one place supplied with the label 'start', which will be used as the start place for the experience.

target.experience.places.<label>.file

optionalstring

A file path to a Roblox place (either .rbxl or .rbxlx).

target.experience.places.<label>.configuration

optional

A place's Roblox configuration.

target.experience.places.<label>.configuration.name

string

The display name of the place on the Roblox website and in-game. If the place is an experience's start place, it will be the experience's display name as well.

target.experience.places.<label>.configuration.description

string

The descirption of the place on the Roblox website and in-game. If the place is an experience's start place, it will be the experience's description as well.

target.experience.places.<label>.configuration.maxPlayerCount

uint32

The maximum number of players that can be in a server for the place.

target.experience.places.<label>.configuration.allowCopying

boolean

Whether or not other Roblox users can clone your place.

target.experience.places.<label>.configuration.serverFill

|

Determines how Roblox will fill your servers.

ValueDescription
'robloxOptimized'Roblox will attempt to automatically leave some space for friends to join.
'maximum'Roblox will never leave room for friends to join.
reservedSlots: <count>Roblox will always leave the provided number of slots available for friends to join.

target.experience.icon

optionalstring

A file path to an image that will be used as the experience's icon.

target.experience.thumbnails

optionalarray<string>

An array of file paths to images that will be used as the experience's thumbnails. The order used here will be the order they appear on the Roblox webpage.

target.experience.socialLinks

optionalarray<>

A list of social links that will appear on the experience's webpage.

target.experience.socialLinks.*.title

requiredstring

The display name of the social link on the Roblox website.

target.experience.socialLinks.*.url

requiredstring

The URL of the social link. Must be one of the Roblox supported social link types.

target.experience.products

optionaldictionary<>

Products that can be purchased within your experience for Robux.

Because Roblox does not offer any way to delete developer products, when a product is "deleted" by Mantle, it is updated in the following ways:

  1. Its description is updated to: Name: <name>\nDescription:\n<description>
  2. Its name is updated to zzz_Deprecated(<date-time>) where <date-time> is the current date-time in YYYY-MM-DD hh::mm::ss.ns format.

target.experience.products.<label>.name

requiredstring

The display name of the developer product on the Roblox website and in the experience.

target.experience.products.<label>.description

string

The description of the developer product on the Roblox website and in the experience.

target.experience.products.<label>.icon

optionalstring

A file path to an image to use as the product's icon on the Roblox website and in the experience.

target.experience.products.<label>.price

requireduint32

The price of the developer product in Robux.

target.experience.passes

optionaldictionary<>

Passes that can be purchased within your experience for Robux.

Because Roblox does not offer any way to delete game passes, when a pass is "deleted" by Mantle, it is updated in the following ways:

  1. Its description is updated to: Name: <name>\nPrice: <price>\nDescription:\n<description>
  2. Its name is updated to zzz_Deprecated(<date-time>) where <date-time> is the current date-time in YYYY-MM-DD hh::mm::ss.ns format.

target.experience.passes.<label>.name

requiredstring

The display name of the game pass on the Roblox website and in the experience.

target.experience.passes.<label>.description

string

The description of the game pass on the Roblox website and in the experience.

target.experience.passes.<label>.icon

requiredstring

A file path to an image to use as the pass's icon on the Roblox website and in the experience.

target.experience.passes.<label>.price

optionaluint32

The price of the game pass in Robux. If not specified, the game pass will be off-sale.

target.experience.badges

optionaldictionary<>

Badges that can be awarded within your experience.

⚠️
Each user can create up to 5 badges for free every day. After that, badges cost 100 Robux each. By default, Mantle does not have permission to make purchases with Robux, so if you go over your daily quota, you will need to use the --allow-purchases flag to create them.

Because Roblox does not offer any way to delete badges, when a badge is "deleted" by Mantle, it is updated in the following ways:

  1. It is disabled
  2. Its description is updated to: Name: <name>\nEnabled: <enabled>\nDescription:\n<description>
  3. Its name is updated to zzz_Deprecated(<date-time>) where <date-time> is the current date-time in YYYY-MM-DD hh::mm::ss.ns format.

target.experience.badges.<label>.name

requiredstring

The display name of the badge on the Roblox website and in the experience.

target.experience.badges.<label>.description

string

The description of the badge on the Roblox website and in the experience.

target.experience.badges.<label>.icon

requiredstring

A file path to an image to use as the badge's icon on the Roblox website and in the experience.

target.experience.badges.<label>.enabled

boolean

Whether or not the badge is enabled.

target.experience.assets

optionalarray<string | >

A list of assets to include in your experience.

If set to a string, the value should be a file path or glob to an asset or list of assets. The rbxgameasset name of each matched file will be its file name without the extension. For example, assets/pirate-flag.png will be given the rbxgameasset name pirate-flag and will be accessible in the experience with rbxgameasset://Images/pirate-flag.

If set to an object, file should be set to a file path (it will not be interpreted as a glob), and name will be the name of the rbxgameasset.

⚠️
Roblox provides each user a monthly quota of audio uploads. Mantle will let you know each time it uploads an audio asset how many uploads you have left and when your quota will reset.

Each file will be uploaded as the asset type matching its file extension. Supported asset types and their file extensions:

Asset typeFile extensions
Image.bmp, .gif, .jpeg, .jpg, .png, .tga
Audio.ogg, .mp3

target.experience.spatialVoice

optional

Spatial voice configuration.

target.experience.spatialVoice.enabled

requiredboolean

Whether or not spatial voice is enabled for the experience.

target.experience.notifications

optionaldictionary<>

Notification strings for your experience.

By default, the name of each notification (which is only visible to you in the creator portal) is set to the label of the notification config. You can override this by setting the name property.

target.experience.notifications.<label>.name

optionalstring

The display name of the notification string on the Roblox website.

target.experience.notifications.<label>.content

requiredstring

The content of the notification string. Must include {experienceName} placeholder and may include {displayName} placeholder once.

state

| |

Defines how Mantle should manage state files (locally or remotely).

ValueDescription
'local'Mantle will save and load its state to and from a local .mantle-state.yml file.
localKey: <key>Mantle will save and load its state to and from a local file using the provided key with the format <key>.mantle-state.yml.
remote: <config>Mantle will save and load its state to and from a remote file stored in a cloud provider. Currently the only supported provider is Amazon S3. For more information, see the Remote State guide.

state.localKey

requiredstring

state.remote

required

state.remote.region

required |

The AWS region your S3 bucket is located in. If for some reason you need to use a region that is not defined, you can supply a custom one:

state.remote.bucket

requiredstring

The name of your AWS S3 bucket.

state.remote.key

requiredstring

The key to use to store your state file. The file will be named with the format <key>.mantle-state.yml.