Installation

Load Ember with one line and check it runs.

Ember is one Lua file with no dependencies.

Luau
local Ember = loadstring(game:HttpGet('https://rbx.lol/ember.lua'))()

That line works in any executor with loadstring and game:HttpGet.

Check it works

Paste this in. You get a window with one working toggle.

Luau
local Ember = loadstring(game:HttpGet('https://rbx.lol/ember.lua'))()
 
local win = Ember.new({ Title = "Hello", Subtitle = "first run" })
local main = win:Section("Main", "home")
 
main:Toggle({
    Text = "It works",
    Callback = function(on)
        win:Notify({ Title = on and "On" or "Off", Icon = "check" })
    end,
})

Press RightShift to hide and show it.

For a much larger script, see the full showcase.

The three objects#

  • WindowEmber.new returns it. Holds the frame, the sidebar, the keybind and the animations.
  • Sectionwin:Section adds a sidebar tab and returns a page for controls.
  • Controlmain:Toggle adds a row and returns a handle for reading and setting the value later.

There are thirteen controls. Each takes one options table.

Pinning a version#

https://rbx.lol/ember.lua serves the current release, so your script follows every update. To pin a version, host your own copy and point HttpGet at it, or read a local file:

Luau
local Ember = loadstring(readfile("Ember.lua"))()

Loading it twice

Running the same script again replaces its previous window instead of adding a second one. See Lifecycle and cleanup.

Requirements#

RequirementNotes
loadstringTo run the library. Every executor has it.
game:HttpGetOnly for loading from a URL. Not needed if you readfile a local copy.
writefile / readfile / isfileOptional. All three needed for saving settings; without them Ember still runs, but nothing persists.
isfolder / makefolder / delfileOptional. Used when present; Storage.Unique needs the folder pair, and deleting needs delfile.

Nothing else is required.

Where to go next#