12 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

StudioDeviceSimulatorService

Inherits from: Instance → Object

Provides programmatic control over Studio's Device Simulator. Use this service to switch between device presets, override resolution and pixel density, control orientation and scaling, and manage custom device profiles from a plugin or from an external tool connected through the MCP server.

All methods are asynchronous and yield the calling coroutine. The service is available in Edit mode and Play Client. Methods that modify the active simulation state are blocked in PlayServer mode.

Limitations

Inherits from: Instance

Memory category: Instances

Tags: NotCreatable, Service, NotReplicated

Methods

NameType / ReturnsDescription
StudioDeviceSimulatorService:CreateDeviceAsyncstringCreates a custom device preset and returns its ID.
StudioDeviceSimulatorService:GetDeviceAsyncstringReturns the ID of the currently active device, or "default" if none is active.
StudioDeviceSimulatorService:GetDeviceInfoAsyncDictionaryReturns the configuration dictionary for the specified device.
StudioDeviceSimulatorService:GetDeviceListAsyncArrayReturns an array of all available device IDs.
StudioDeviceSimulatorService:GetOrientationAsyncScreenOrientationReturns the current simulated screen orientation.
StudioDeviceSimulatorService:GetPixelDensityAsyncfloatReturns the current simulated pixel density in DPI.
StudioDeviceSimulatorService:GetResolutionAsyncVector2Returns the current simulated viewport resolution.
StudioDeviceSimulatorService:GetScalingModeAsyncDeviceSimulatorScalingModeReturns how the simulated resolution currently maps to the Studio viewport.
StudioDeviceSimulatorService:RemoveDeviceAsync()Removes a custom device from the catalog.
StudioDeviceSimulatorService:SetDeviceAsync()Activates the specified device or stops simulation if "default" is passed.
StudioDeviceSimulatorService:SetOrientationAsync()Sets the simulated screen orientation.
StudioDeviceSimulatorService:SetPixelDensityAsync()Overrides the simulated pixel density in DPI for the current session.
StudioDeviceSimulatorService:SetResolutionAsync()Overrides the simulated viewport resolution for the current session.
StudioDeviceSimulatorService:SetScalingModeAsync()Sets how the simulated resolution maps to the Studio viewport.
StudioDeviceSimulatorService:StopSimulationAsync()Stops the active device simulation.
StudioDeviceSimulatorService:UpdateDeviceAsync()Updates the configuration of an existing custom device.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

StudioDeviceSimulatorService:CreateDeviceAsync

Creates a custom device and returns its newly assigned ID. Custom devices are persisted to disk and appear in the Device Simulator UI.

Errors if any required field is missing or out of range.

Parameters

NameTypeDefaultDescription
configDictionaryA dictionary describing the new device. Required fields: Name (string, 1-200 characters, cannot be "default"), Width (int, 1-7680 pixels), Height (int, 1-4320 pixels), PixelDensity (int, 72-10000 DPI). Optional fields: DeviceForm (DeviceForm, default Phone), ResolutionScale (float, default 1.0, max 10.0), PortraitKeyboardHeight (int, default 0), LandscapeKeyboardHeight (int, default 0).

Returns

TypeDescription
stringstring
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

Code samples: View on Creator Hub (StudioDeviceSimulatorService-CreateDeviceAsync).

StudioDeviceSimulatorService:GetDeviceAsync

Returns the ID of the currently active device, or "default" if no device is active.

Returns

TypeDescription
stringstring
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:GetDeviceInfoAsync

Returns a DeviceConfiguration for the specified device without activating it. Useful for inspecting presets before choosing one to switch to.

The returned dictionary contains the following fields:

Field Type Create/Update Description
DeviceId string Read-only Unique identifier assigned by the service.
Name string Required Display name. 1 to 200 characters. Cannot be "default".
Width number Required Screen width in pixels. Range: 1 to 7680.
Height number Required Screen height in pixels. Range: 1 to 4320.
PixelDensity number Required Pixel density in DPI. Range: 72 to 10000.
DeviceForm Enum.DeviceForm Optional (default: Phone) One of Phone, Tablet, Desktop, Console, VR.
IsCustom boolean Read-only true if the device was user-created.
ResolutionScale number Optional (default: 1.0) Resolution scaling factor. Must be greater than 0, max 10.0.
PortraitKeyboardHeight number Optional (default: 0) Virtual keyboard height in portrait mode.
LandscapeKeyboardHeight number Optional (default: 0) Virtual keyboard height in landscape mode.

Parameters

NameTypeDefaultDescription
deviceIdstringThe unique identifier of the device to query. Must be a valid ID from GetDeviceListAsync(); cannot be "default".

Returns

TypeDescription
DictionaryA dictionary containing the device configuration and passed to CreateDeviceAsync and UpdateDeviceAsync.
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:GetDeviceListAsync

Returns an array of device IDs for all available presets, including built-in and custom devices.

Returns

TypeDescription
ArrayAn array of device IDs.
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

Code samples: View on Creator Hub (StudioDeviceSimulatorService-GetDeviceListAsync).

StudioDeviceSimulatorService:GetOrientationAsync

Returns the current simulated orientation.

Returns

TypeDescription
ScreenOrientationScreenOrientation
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:GetPixelDensityAsync

Returns the current simulated pixel density.

Returns

TypeDescription
floatnumber
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:GetResolutionAsync

Returns the current simulated resolution.

Returns

TypeDescription
Vector2Vector2
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:GetScalingModeAsync

Returns the current DeviceSimulatorScalingMode for how the simulated resolution maps to the Studio viewport. See SetScalingModeAsync() for the available modes.

Requires an active device; errors when GetDeviceAsync() returns "default".

Returns

TypeDescription
DeviceSimulatorScalingModeThe current DeviceSimulatorScalingMode.
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:RemoveDeviceAsync

Removes a custom device.

Errors if the target is a built-in preset.

Parameters

NameTypeDefaultDescription
deviceIdstringThe unique identifier of the custom device to remove.

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:SetDeviceAsync

Activates the specified device. Passing "default" stops simulation and is equivalent to calling StopSimulationAsync.

Errors in PlayServer mode. Errors if the device ID does not exist.

Parameters

NameTypeDefaultDescription
deviceIdstringThe unique identifier of the device to activate, or "default" to stop simulation.

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:SetOrientationAsync

Sets or gets the simulated screen orientation. Accepts Portrait, LandscapeLeft, or LandscapeRight. Other values will error.

Errors in PlayServer mode.

Parameters

NameTypeDefaultDescription
orientationScreenOrientationThe target screen orientation. Accepted values are ScreenOrientation.Portrait, ScreenOrientation.LandscapeLeft, or ScreenOrientation.LandscapeRight.

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:SetPixelDensityAsync

Overrides or returns the simulated pixel density in DPI. Session-level; cleared on device switch.

This method requires an active device. SetPixelDensityAsync also errors in PlayServer mode.

Parameters

NameTypeDefaultDescription
densityfloatThe pixel density override in DPI. Must be between 72 and 10000.

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:SetResolutionAsync

Overrides the simulated viewport resolution or returns the current resolution as a Vector2. Overrides are session-level and cleared when you switch devices.

Coordinates are in landscape space: the first parameter maps to the horizontal axis in landscape, the second to the vertical axis. In portrait, axes are swapped automatically.

Both methods require an active device. They error if GetDeviceAsync() returns "default". SetResolutionAsync also errors in PlayServer mode.

Parameters

NameTypeDefaultDescription
widthintThe viewport width in pixels (horizontal axis in landscape orientation). Range: 1 to 7680.
heightintThe viewport height in pixels (vertical axis in landscape orientation). Range: 1 to 4320.

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:SetScalingModeAsync

Controls how the simulated resolution maps to the Studio viewport.

Both methods require an active device. SetScalingModeAsync also errors in PlayServer mode.

Parameters

NameTypeDefaultDescription
modeDeviceSimulatorScalingModeThe scaling mode to apply. One of DeviceSimulatorScalingMode.ScaleToPhysicalSize, DeviceSimulatorScalingMode.ActualResolution, or DeviceSimulatorScalingMode.FitToWindow.

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:StopSimulationAsync

Stops the active simulation. Prefer this over SetDeviceAsync("default") for clarity.

Errors in PlayServer mode.

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

StudioDeviceSimulatorService:UpdateDeviceAsync

Updates a custom device's configuration.

Errors if the target is a built-in preset.

Parameters

NameTypeDefaultDescription
deviceIdstringThe unique identifier of the custom device to update.
configDictionaryA dictionary of device fields to apply. Uses patch semantics: omitted optional fields retain their current values. Same schema as CreateDeviceAsync().

Returns

TypeDescription
()
FieldValue
tags["Yields"]
securityPluginSecurity
thread safetyUnsafe

Code samples: View on Creator Hub (StudioDeviceSimulatorService-UpdateDeviceAsync).

Events

NameType / ReturnsDescription
StudioDeviceSimulatorService.ConfigurationChangedFires when the active simulation state changes.

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.

StudioDeviceSimulatorService.ConfigurationChanged

Fires when the active simulation state changes: device switch, orientation, resolution, pixel density, scaling mode, or user interaction with the Device Simulator UI. Does not fire for catalog-only operations such as CreateDeviceAsync, UpdateDeviceAsync on a non-active device, RemoveDeviceAsync on a non-active device, or GetDeviceInfoAsync.

Getter calls inside the handler are async and will yield.

FieldValue
securityPluginSecurity

Code samples: View on Creator Hub (StudioDeviceSimulatorService-ConfigurationChanged).

Properties

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring