GameMaker Studio 2 (2.3)

Local Windowing Interface

Upset Baby Games

You must be logged in to obtain assets


NOTE: This system is currently in alpha and will be on sale until the beta! Because of this there will be bugs and missing features. Please report any issues / suggestions to or post them in this forum topic, thanks!


This is a Local Windowing Interface system that aims to give GameMaker: Studio 2.3 easy-to-use but feature rich interface features!

The system is designed to auto-scale and adjust for multiple screen sizes, render only when updates occur, and handle all input events through a passive signaling system. You need only spawn your element and set some properties to be well on your way. The combined anchoring / margin system handles positioning all elements in their proper places.

Not all elements are yet implemented or implemented fully. The currently implemented elements / features are as follows:

  • Theming and element styling system w/ per-element theme override support
  • Panels / Buttons (icon, and text-based)
  • Checkboxes / Radio buttons / Sprite-based switches
  • Scroll bars / Sliders
  • Text labels
  • Line edit w/ cursor, highlight, popup, and limited shortcut support (further shortucts planned)
  • Drop-down menus w/ multi-column, sprite, sprite column, and divider support
  • Draggable containers
  • Scroll containers
  • Horizontal / Vertical alignment containers
  • Surface containers (to include gameplay elements inside the interface)
  • Tab containers
  • Confirmation / Text input dialogs (more on the way)
  • Signal system
  • Element grouping system


The entire system is based on a tree structure. You can attach elements together and each element will base its position and scale according to the parent. All children are aware of changes to the parent so features like disabling an element, toggling visibility, changing theme, etc. is auto-managed for the children as well.

The system knows when elements update as well thus only calculating position updates and re-rendering pieces that are necessary.

Input events are handled through 'signals'. Each element contains a signaler that you can attach a method to. So, for example, you can attach a popup's 'set_visible' function to a button's 'pressed' signal so that the popup becomes visible whenever the button is pressed.

Lastly is the grouping system. You can create an LWIGroup structure and attach it to any element. Certain elements will behave differently depending on if they are in a group. For example, checkboxes will convert to radio buttons. Button-based drop-menus will know to auto-open when hovered over if one in the group is open, etc.

Future Features

There are plans to greatly expand included elements, albeit it is quite simple to create your own custom elements by inheriting any one of the included structs. Some further planned elements / features are as follows:

  • Progress bars
  • Scrollable drop-down selection menus
  • Multi-line editor
  • Rich text label (w/ BBCode support)
  • Tree system for collapsible menus, etc.
  • More dialogs (file open/save, color selector, and more)
  • Smart element repositioning (so elements physically move w/ screen changes, not just change size)

I will be expanding existing systems further as well.

Platform Support

This has currently been officially tested on Windows and Linux. HTML5 and, hopefully, Android will be supported down the road.

I generally include external documentation for my extensions but my doc generator requires an update for GameMaker: Studio 2.3. Until I can rewrite it there will be no online documentation. However, I have included extensive function / struct headers, a few notes to introduce you to the system, and a heavily-commented example setup.

Feature Requests

This project is currently in alpha because I want to get feedback! If you use the system and are really itching for a feature or think something could be designed a bit better, please let me know! I will be actively monitoring requests.

End User Licence Agreement (EULA).

Age Rating: 4+


GMS2.3 - Version 0.1.4. Published March 31, 2021

Please see this post for the change log.

Loading, please wait

Package contents

Loading, please wait

What is the issue?

Loading, please wait