Quick UI Window Creation Module v21/12/2024

Hey guys, I made a cool UI window creation tool which will probably speed up the process of making games (or experiences or charts). It’s very modular so you can easily add your own features (called plugins inside it) to it. You can also set custom themes to customize it even more! It works for both ScreenGuis and SurfaceGuis, so you can do cool stuff, for example using it as a display screen in workspace or just keeping menus organized. A fun quirk is its ability to contain itself, and by that I meant both not exploding like the old version and containing a window inside of a window. The chances of me adding support for BillboardGuis are near zero. It’s also highly chainable so you can chain function calls. Here’s a list of features it can do:

  1. Creating UI windows

  2. Themes
    You can use the prebuilt themes or make your custom themes to fit your game

  3. Plugins (additional features)

  4. Being able to put windows inside of a window
    image

  5. Being able to be put inside of a SurfaceGui

  6. Lots of other internal features
    It would take a long time to write all of the internal features, like adding custom header buttons, binding events, creating events, custom mouse position, manually loading plugins from other containers, etc.

Here’s a demonstration of most of the features combined:


You can get the module here, and you can test it in the test place

Here are some examples of how to use this module:

  1. Using :create() to quickly create a window:
local window = Windows:create(shopGui, UDim2.new(0.45,0,0.5,0), "Frutiger Aero")
  1. Using .new to construct a bare-bone window
local window = Windows.new(theme or nil):loadPlugin("BaseWindow"):loadPlugin("Header"):loadPlugin("Resize"):loadPlugin("FrostedGlass")
shopGui.Parent = window.canvas
  1. Using the legacy version
Windows:createLegacy(shopGui, UDim2.new(0.45,0,0.5,0)) --themes does not exist in the legacy version, but spaghetti does

I’ve put a bunch of comments everywhere inside of the module (including the prebuilt plugins) so it’s easier to understand what it does.

(there are silent updates for micro bacteria fixes.)

Version 21/12/2024 changes:
-Updated the notepad app
-Changed how adding header buttons work, use . instead of :. addButton() now returns the button instance created. removeButton now only requires that instance. You can now modify the button label using modifyButtonLabel().
-Fixed anchor points breaking when snapping to snap points
-Fixed the header plugin breaking when destroying the window while still dragging (possible on multitouch devices).

14 Likes

this is really cool! i’ll test this out when i get the chance.

1 Like

That’s some mad mathematical + UIDragger stuff I don’t understand :fire:

Besides that, the animations are very neat and I haven’t seen a proper-made window system like nesting windows inside windows, or resizing nested windows to respect the parent window size.

I have to say this is cool! Just curious, how long did it take you?

1 Like

Thank you! It took about a year :skull:
I mostly continue this project on my free time so that’s one of the factor. There’s also another factor which is just me putting random math everywhere and hoping that it works for some reason, and try to understand why it works. The one that sticks out the most is using parent relations instead of getting the screen insets. That unlocked a whole loads of possibilities, for example the nested windows, auto-collapse and recenter windows, custom containers, and keyboard UI Navigation with its sensitivity related to its parent. The only limiting factor to nested windows is Roblox’s nested CanvasGroup limit of 4.

1 Like

Damn, the free time really did pay off. This is a cool resource I’ve seen in a while so pretty excited to see it.

1 Like

I’ve updated the module to add multitouch support and some other bug fixes. It took a while, but now there are window.mouse and window.specialMouse!

window.mouse is basically the normal LocalPlayer.mouse, meanwhile window.specialMouse is a special mouse that automatically switches modes between ScreenGui and SurfaceGuis. It also makes access to multitouch easier, since it has a feature similar to mouse.Hit but with multitouch capabilities. There are also lots of bugs that I’ve demolished, so hopefully this update will be a convenience!

2 Likes

The test place has been uncopylocked. Feel free to download it! (It’s next to the main module link or here)

Hey guys, I’ve updated the module to rewrite the specialMouse. I’ve also added a “launchApp” method along with some pre-installed apps inside of the module as a new feature. Currently there are Template, App Launcher, Notepad, and Speed Clicker.

Here’re some previews of the Notepad app:

Here’s a preview of the Speed Clicker app:

These apps were made very hastily, so there are probably some problems in them that I haven’t discovered yet. They will have a chance to be updated when a new version of the Windows module gets updated.

Hopefully this update will be beneficial to everyone! I’ll be sure to keep developing this module until there are no more cool features that I can think of.

1 Like

Update 16/12/2024 is out! This update rewrites the Adapt plugin and also upgrades it to respect the container’s borders while removing the liquidify feature. There have also been some internal changes, such as converting table.insert into table[key] so the code looks nicer. The minimizing feature has also been upgraded, so you can directly call it using window:minimize(), move the window to the floor of the container, or double-clicking the header.

New update is out! Version 21/12/2024 fixes the notepad app and changes how header buttons work. If you have an existing work which uses : to add a header button, you can just change it into a . when updating to this version.

Here’s a preview of the updated notepad app: