Configuration

Every key Ember.Configure accepts. Storage, themes, effects and window defaults, set once for the whole script.

Ember.Configure sets defaults for everything your script creates. Call it before Ember.new.

Luau
Ember.Configure({
    Storage = { Folder = "myscript" },
    Themes  = { Default = "Midnight" },
    Window  = { SaveLayout = true },
})

Everything is optional; unspecified values keep their defaults.

Storage#

OptionTypeDefaultWhat it does
EnabledbooleantrueSet false to disable all disk writes, whatever individual controls ask for.
Folderstring"ember"Folder under the executor's workspace.
Filestring"settings"File name inside that folder.
Debouncenumber0.4Seconds to wait before writing, so a dragged slider does not write per frame.
UniquebooleanfalseClaim the folder, suffixing _2, _3 if another owner has it.
OwnerstringIdentity for that claim. Defaults to the folder name.

Storage = false is shorthand for Storage = { Enabled = false }.

Passing Storage at all writes out anything still pending first, drops the cached values, and reloads your saved themes from the new location.

See Saving settings.

Themes#

OptionTypeDefaultWhat it does
Defaultstring"Dark"The theme to use when no theme has been set. A later Ember.SetTheme wins over it.
Onlystring[]Restrict the selectable list to exactly these, in this order.
Hidestring[]Remove these from the selectable list.
CustomtableName to palette. Each one is registered as the call runs.

See Themes for the palettes and the role names.

Effects#

Covers the window dissolve and the notification animations.

OptionTypeDefaultWhat it does
EnabledbooleantrueSet false for no animation at all.
RespectReducedMotionbooleanfalseHonour Roblox's ReducedMotionEnabled accessibility flag.
Qualitystring"Balanced""Low", "Balanced" or "High". Scales MaxTiles and Particles by 0.6, 1 and 1.35, and shifts Samples by -1, 0 and +1.
MaxTilesnumber460Tiles the dissolve breaks the window into. Clamped to 32–460, then scaled by Quality.
Samplesnumber3Colour samples per tile. Clamped to 1–3.
Particlesnumber52Sparks trailing the dissolve edge. Clamped to 0–96, then scaled by Quality.
ToastParticlesnumber14Sparks on a notification. Clamped to 0–24.
MaxToastsnumber5Notifications on screen before the oldest is dismissed early. Clamped to 1–12.

RespectReducedMotion is off by default

Roblox reports that flag from an accessibility setting most players never knowingly touched. With it honoured the dissolve is gone and nothing on screen says why. Turn it on if your audience chose the setting deliberately.

The behaviour these keys tune is described in Animations.

Lowering the budget on weaker machines:

Luau
Ember.Configure({
    Effects = { MaxTiles = 200, Particles = 20 },
})

Or turning animation off entirely:

Luau
Ember.Configure({ Effects = { Enabled = false } })

Window#

Defaults for every window created afterwards. Each can be overridden per window on Ember.new.

OptionTypeDefaultWhat it does
SizeVector2Vector2.new(700, 452)Starting size.
MinSizeVector2Vector2.new(560, 300)Resize floor.
MaxSizeVector2Resize ceiling. Defaults to the viewport.
PositionVector2Where windows open. Centred if unset.
Railnumber176Sidebar width.
MinRailnumber132Narrowest sidebar.
MaxRailnumber320Widest sidebar.
MinContentnumber300The content pane never shrinks past this.
SearchbooleanfalseWindow-wide search box in the rail.
SaveLayoutbooleanfalseRemember geometry per window.
ReapplyOnRespawnbooleanfalseEvery control re-fires its callback when the character is replaced. A control can set Reapply = false to stay out.
RevertOnClosebooleanfalseEvery control is called with its off value when the window is destroyed. A control can set RevertOnClose = false to stay out.
SafeAreabooleantrueKeep windows inside the usable viewport.
ReplaceExistingbooleantrueRe-running the script replaces its window instead of stacking.
StatusBarboolean | tablefalseGive every window a status bar. Options are listed under Status bar in the window reference.

Reading it back#

Luau
Ember.Config.Storage.Folder   --> "ember"
Ember.Config.Effects.MaxTiles --> 460
 
Ember.Version                 --> "1.0.0"
Ember.Store.available()       --> whether the executor can read and write files

A typical setup#

Luau
local Ember = loadstring(game:HttpGet('https://rbx.lol/ember.lua'))()
 
Ember.Configure({
    Storage = {
        Folder = "bloxburg-helper",
        Owner  = "bloxburg-helper",
        Unique = true,
    },
    Themes = {
        Default = "Midnight",
        Only    = { "Dark", "Midnight", "Nord", "Ember" },
    },
    Window = {
        SaveLayout = true,
        Search     = true,
    },
})
 
local win = Ember.new({ Title = "Bloxburg Helper", Subtitle = "v2.1" })