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
- All methods are asynchronous and yield the calling coroutine.
- Methods that modify the active simulation state (
SetDeviceAsync,StopSimulationAsync,SetOrientationAsync,SetResolutionAsync,SetPixelDensityAsync,SetScalingModeAsync) error in PlayServer mode. They work in Edit mode and Play Client. UpdateDeviceAsyncandRemoveDeviceAsyncerror when called on built-in presets.- Resolution, DPI, and scaling mode methods require an active device and error when
GetDeviceAsync()returns "default". - Resolution and DPI overrides are session-level. They are not persisted and are cleared on
SetDeviceAsync. - Built-in presets are immutable.
Inherits from: Instance
Memory category: Instances
Tags: NotCreatable, Service, NotReplicated
Methods
| Name | Type / Returns | Description |
|---|---|---|
| StudioDeviceSimulatorService:CreateDeviceAsync | string | Creates a custom device preset and returns its ID. |
| StudioDeviceSimulatorService:GetDeviceAsync | string | Returns the ID of the currently active device, or "default" if none is active. |
| StudioDeviceSimulatorService:GetDeviceInfoAsync | Dictionary | Returns the configuration dictionary for the specified device. |
| StudioDeviceSimulatorService:GetDeviceListAsync | Array | Returns an array of all available device IDs. |
| StudioDeviceSimulatorService:GetOrientationAsync | ScreenOrientation | Returns the current simulated screen orientation. |
| StudioDeviceSimulatorService:GetPixelDensityAsync | float | Returns the current simulated pixel density in DPI. |
| StudioDeviceSimulatorService:GetResolutionAsync | Vector2 | Returns the current simulated viewport resolution. |
| StudioDeviceSimulatorService:GetScalingModeAsync | DeviceSimulatorScalingMode | Returns 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
| Name | Type / Returns | Description |
|---|---|---|
| Instance:AddTag | () | Applies a tag to the instance. |
| Instance:children | Instances | Returns an array of the object's children. |
| Instance:ClearAllChildren | () | This method destroys all of an instance's children. |
| Instance:Clone | Instance | Create a copy of an instance and all its descendants, ignoring instances that are not Archivable. |
| Instance:clone | Instance | |
| 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:FindFirstAncestor | Instance? | Returns the first ancestor of the Instance whose Instance.Name is equal to the given name. |
| Instance:FindFirstAncestorOfClass | Instance? | Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className. |
| Instance:FindFirstAncestorWhichIsA | Instance? | Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstChild | Instance? | Returns the first child of the Instance found with the given name. |
| Instance:findFirstChild | Instance | |
| Instance:FindFirstChildOfClass | Instance? | Returns the first child of the Instance whose ClassName is equal to the given class name. |
| Instance:FindFirstChildWhichIsA | Instance? | Returns the first child of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstDescendant | Instance? | Returns the first descendant found with the given Instance.Name. |
| Instance:GetActor | Actor? | Returns the Actor associated with the Instance, if any. |
| Instance:GetAttribute | Variant | Returns the value which has been assigned to the given attribute name. |
| Instance:GetAttributeChangedSignal | RBXScriptSignal | Returns an event that fires when the given attribute changes. |
| Instance:GetAttributes | Dictionary | Returns a dictionary of the instance's attributes. |
| Instance:GetChildren | Instances | Returns an array containing all of the instance's children. |
| Instance:getChildren | Instances | |
| Instance:GetDebugId | string | Returns a coded string of the debug ID used internally by Roblox. |
| Instance:GetDescendants | Instances | Returns an array containing all of the descendants of the instance. |
| Instance:GetFullName | string | Returns a string describing the instance's ancestry. |
| Instance:GetStyled | Variant | Returns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified. |
| Instance:GetStyledPropertyChangedSignal | RBXScriptSignal | Returns an event that fires when the given style property changes on the instance. |
| Instance:GetTags | Array | Gets an array of all tags applied to the instance. |
| Instance:HasTag | boolean | Check whether the instance has a given tag. |
| Instance:IsAncestorOf | boolean | Returns true if an Instance is an ancestor of the given descendant. |
| Instance:IsDescendantOf | boolean | Returns true if an Instance is a descendant of the given ancestor. |
| Instance:isDescendantOf | boolean | |
| Instance:IsPropertyModified | boolean | Returns true if the value stored in the specified property is not equal to the code-instantiated default. |
| Instance:QueryDescendants | Instances | Returns 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:WaitForChild | Instance | Returns 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
| Name | Type / Returns | Description |
|---|---|---|
| Object:GetPropertyChangedSignal | RBXScriptSignal | Get an event that fires when a given property of the object changes. |
| Object:IsA | boolean | Returns true if an object's class matches or inherits from a given class. |
| Object:isA | boolean |
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
| Name | Type | Default | Description |
|---|---|---|---|
| config | Dictionary | A 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
| Type | Description |
|---|---|
| string | string |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
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
| Type | Description |
|---|---|
| string | string |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| deviceId | string | The unique identifier of the device to query. Must be a valid ID from GetDeviceListAsync(); cannot be "default". |
Returns
| Type | Description |
|---|---|
| Dictionary | A dictionary containing the device configuration and passed to CreateDeviceAsync and UpdateDeviceAsync. |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:GetDeviceListAsync
Returns an array of device IDs for all available presets, including built-in and custom devices.
Returns
| Type | Description |
|---|---|
| Array | An array of device IDs. |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
Code samples: View on Creator Hub (StudioDeviceSimulatorService-GetDeviceListAsync).
StudioDeviceSimulatorService:GetOrientationAsync
Returns the current simulated orientation.
Returns
| Type | Description |
|---|---|
| ScreenOrientation | ScreenOrientation |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:GetPixelDensityAsync
Returns the current simulated pixel density.
Returns
| Type | Description |
|---|---|
| float | number |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:GetResolutionAsync
Returns the current simulated resolution.
Returns
| Type | Description |
|---|---|
| Vector2 | Vector2 |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
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
| Type | Description |
|---|---|
| DeviceSimulatorScalingMode | The current DeviceSimulatorScalingMode. |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:RemoveDeviceAsync
Removes a custom device.
Errors if the target is a built-in preset.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| deviceId | string | The unique identifier of the custom device to remove. |
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| deviceId | string | The unique identifier of the device to activate, or "default" to stop simulation. |
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:SetOrientationAsync
Sets or gets the simulated screen orientation. Accepts Portrait, LandscapeLeft, or LandscapeRight. Other values will error.
Errors in PlayServer mode.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| orientation | ScreenOrientation | The target screen orientation. Accepted values are ScreenOrientation.Portrait, ScreenOrientation.LandscapeLeft, or ScreenOrientation.LandscapeRight. |
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| density | float | The pixel density override in DPI. Must be between 72 and 10000. |
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| width | int | The viewport width in pixels (horizontal axis in landscape orientation). Range: 1 to 7680. | |
| height | int | The viewport height in pixels (vertical axis in landscape orientation). Range: 1 to 4320. |
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:SetScalingModeAsync
Controls how the simulated resolution maps to the Studio viewport.
ScaleToPhysicalSizescales the viewport to approximate physical device size.ActualResolutionrenders at exact pixel resolution.FitToWindowscales to fill the viewport.
Both methods require an active device. SetScalingModeAsync also errors in PlayServer mode.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| mode | DeviceSimulatorScalingMode | The scaling mode to apply. One of DeviceSimulatorScalingMode.ScaleToPhysicalSize, DeviceSimulatorScalingMode.ActualResolution, or DeviceSimulatorScalingMode.FitToWindow. |
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:StopSimulationAsync
Stops the active simulation. Prefer this over SetDeviceAsync("default") for clarity.
Errors in PlayServer mode.
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
StudioDeviceSimulatorService:UpdateDeviceAsync
Updates a custom device's configuration.
Errors if the target is a built-in preset.
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| deviceId | string | The unique identifier of the custom device to update. | |
| config | Dictionary | A dictionary of device fields to apply. Uses patch semantics: omitted optional fields retain their current values. Same schema as CreateDeviceAsync(). |
Returns
| Type | Description |
|---|---|
| () |
| Field | Value |
|---|---|
| tags | ["Yields"] |
| security | PluginSecurity |
| thread safety | Unsafe |
Code samples: View on Creator Hub (StudioDeviceSimulatorService-UpdateDeviceAsync).
Events
| Name | Type / Returns | Description |
|---|---|---|
| StudioDeviceSimulatorService.ConfigurationChanged | Fires when the active simulation state changes. |
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.AncestryChanged | Fires when the Instance.Parent property of this object or one of its ancestors is changed. | |
| Instance.AttributeChanged | Fires whenever an attribute is changed on the Instance. | |
| Instance.ChildAdded | Fires after an object is parented to this Instance. | |
| Instance.childAdded | ||
| Instance.ChildRemoved | Fires after a child is removed from this Instance. | |
| Instance.DescendantAdded | Fires after a descendant is added to the Instance. | |
| Instance.DescendantRemoving | Fires immediately before a descendant of the Instance is removed. | |
| Instance.Destroying | Fires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy(). | |
| Instance.StyledPropertiesChanged | Fires whenever any style property is changed on the instance, including when a property is set to nil. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.Changed | Fires 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.
| Field | Value |
|---|---|
| security | PluginSecurity |
Code samples: View on Creator Hub (StudioDeviceSimulatorService-ConfigurationChanged).
Properties
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.Archivable | boolean | Determines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published. |
| Instance.archivable | boolean | |
| Instance.Capabilities | SecurityCapabilities | The set of capabilities allowed to be used for scripts inside this container. |
| Instance.IsInSandbox | boolean | Indicates whether the instance is inside a sandboxed container. |
| Instance.Name | string | A non-unique identifier of the Instance. |
| Instance.Parent | Instance | Determines the hierarchical parent of the Instance. |
| Instance.PredictionMode | PredictionMode | Reflects the client-side prediction mode applied to the instance under server-authoritative physics. |
| Instance.RobloxLocked | boolean | A deprecated property that used to protect CoreGui objects. |
| Instance.Sandboxed | boolean | When enabled, the instance can only access abilities in its Capabilities list. |
| Instance.UniqueId | UniqueId | A unique identifier for the instance. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.ClassName | string | A read-only string representing the class this Object belongs to. |
| Object.className | string |