AROYN UI LIBRARY / ADVANCED

Notifications

Bottom-right status messages with bounded stacking and FIFO queueing.

Show a notification#

LUAU
local toast = window:Notify({
    Title = "Preferences saved", Description = "Your local profile was updated.",
    Type = "Success", Duration = 4, Dismissible = true,
    OnDismiss = function(reason, id) print("Dismissed:", reason, id) end,
})

Arguments#

OptionTypeDefaultMeaning
TitlestringRequiredNonempty title.
Descriptionstring""Compact body text.
Iconstring""Ready image URI; otherwise a type symbol is shown.
TypeInfo | Success | Warning | ErrorInfoStatus styling.
Durationfinite number ≥ 04Seconds after entry; zero is persistent.
DismissiblebooleantrueShow the close button; does not prohibit Dismiss().
OnDismissfunction(reason, id)?nilOnce after removal; errors protected.

Handle methods#

MemberReturnsMeaning
IdstringGenerated identifier, not a user option.
GetState()stringQueued / Visible / Closing / Dismissed.
GetDismissReason()string?Reason once dismissed.
Dismiss(reason?)selfDefault reason programmatic; repeat calls harmless.
LUAU
local persistent = window:Notify({Title = "Working", Duration = 0})
-- Later:
persistent:Dismiss("completed")

Placement and queue#

Cards stack upward from the bottom-right safe area with up to a 20px margin (reduced in very small viewports) and an 8px gap. Up to three are visible; short viewports can show fewer. New messages enter at the bottom. The FIFO holds up to 64 waiting messages; overflow produces a dismissed handle with reason overflow.

Entry uses 200ms fade and an 8px motion from the right. Exit uses 170ms fade and a 6px motion right. Duration starts after entry; queued messages do not have timers. Requeued cards after viewport shrink receive a full duration on redisplay.

Lifecycle#

Page changes keep notifications. Minimize, hide, input blocking and Destroy dismiss both visible and queued requests; restoration does not bring them back. Only the close button consumes pointer input, not a transparent full-screen card layer.

ReasonCause
timeoutAutomatic timer.
manualClose button.
programmaticDefault Dismiss().
overflowQueue capacity exceeded.
minimized / hidden / input_blocked / destroyedOwner lifecycle; AttachWindow can report hidden/input_blocked.
Custom stringProvided to Dismiss(reason).