--- title: Studio widgets description: Building custom widgets in Studio allows you to customize workflows and views. --- Studio gives you the power to create custom **widgets** and use them as tools and extensions. These widgets behave as custom windows/panels in Studio, and you can dock them inside of your interface or have them float as separate windows. ## Create widget UIs All Studio widgets begin as `Class.DockWidgetPluginGui` objects which you can fill with `Class.GuiObject|GuiObjects`, such as text labels and buttons. To create an empty widget GUI, call the `Class.Plugin:CreateDockWidgetPluginGui()|CreateDockWidgetPluginGui()` function, passing in an ID and a `Datatype.DockWidgetPluginGuiInfo` object. Note the `Datatype.DockWidgetPluginGuiInfo.new()` constructor expects its parameters in a **specific order** as follows:
| # | Property | Type | Description |
|---|---|---|---|
| 1 | `Enum.InitialDockState` | Enum | One of the `Enum.InitialDockState` enumerations. |
| 2 | `InitialEnabled` | Boolean | The initial enabled (visible) state of the widget GUI. |
| 3 | `InitialEnabledShouldOverrideRestore` | Boolean | If true, the value of **InitialEnabled** overrides the previously saved enabled state. |
| 4 | `FloatingXSize` | Integer | The initial width of the GUI when **InitialDockState** is set to `Enum.InitialDockState.Float`. |
| 5 | `FloatingYSize` | Integer | The initial height of the GUI when **InitialDockState** is set to `Enum.InitialDockState.Float`. |
| 6 | `MinWidth` | Integer | The minimum width of the GUI, with some platform-specific variations. |
| 7 | `MinHeight` | Integer | The minimum height of the GUI, with some platform-specific variations. |
| Mouse Cursor Icon | Asset | Use Case |
|---|---|---|
| `rbxasset://SystemCursors/Arrow` | Default clicking and selection. | |
| `rbxasset://SystemCursors/PointingHand` | Hovering over an active link/button. | |
| `rbxasset://SystemCursors/OpenHand` | Hovering over a draggable item. | |
| `rbxasset://SystemCursors/ClosedHand` | Dragging an item. | |
| `rbxasset://SystemCursors/IBeam` | Hovering in a text field. | |
| `rbxasset://SystemCursors/SizeNS` | Hovering over a vertical resize handle. | |
| `rbxasset://SystemCursors/SizeEW` | Hovering over a horizontal resize handle. | |
| `rbxasset://SystemCursors/SizeNESW` | Hovering over a corner resize handle. | |
| `rbxasset://SystemCursors/SizeNWSE` | Hovering over a corner resize handle. | |
| `rbxasset://SystemCursors/SizeAll` | Hovering over a multi-direction resize handle. | |
| `rbxasset://SystemCursors/SplitNS` | Hovering over a vertical "split" handle. | |
| `rbxasset://SystemCursors/SplitEW` | Hovering over a horizontal "split" handle. | |
| `rbxasset://SystemCursors/Forbidden` | Hovering over a locked/forbidden item. | |
| `rbxasset://SystemCursors/Wait` | Indicating an action is in progress. | |
| `rbxasset://SystemCursors/Busy` | Indicating the system is busy. | |
| `rbxasset://SystemCursors/Cross` | Hovering over a pinpoint selection area. |