LogoObsidian

Library

The Library contains all essential functions and data used to create and get data from the UI.


Window

Obsidian

The Window object is your base UI container. It hosts tabs, groupboxes and mostly everything else driven by the library. The next step to using the library is to create a tab inside the window.

Usage

Create a window with Library:CreateWindow() and override any defaults you need:

local Window = Library:CreateWindow({
    Title = "mspaint",
    Footer = "version: example",
    Icon = 95816097006870,
    NotifySide = "Right",
})

Prop

Type


Notifications

notification

Use Library:Notify() for quick, non-blocking feedback. Notifications support:

  • Simple timed popups.
  • Persistent messages you can update or destroy.
  • Progress indicators with step counters.
  • Optional sounds or other custom behavior based on your own logic.

Creating a notification

Choose between positional arguments for quick calls or a configuration table for full control.

Regular parameters

Library:Notify("Hello world!", 4)
Arg IdxArgument DescriptionTypeDefault
1Description of the notificationstring"nil"
2Amount of time to show the notification fornumber | instance4
3SoundId to play when the notification is shownnumbernil

Table parameters

Pick an example that matches your use case:

Library:Notify({
    Title = "mspaint",
    Description = "Hello world!",
    Time = 4,
})

Prop

Type

Methods

ChangeTitle

Update the notification title without recreating it.

Notification:ChangeTitle("New Title")
Arg IdxArgument DescriptionTypeDefault
1New title of the notificationstringnil

ChangeDescription

Refresh the supporting text while keeping the notification open.

Notification:ChangeDescription("New Description")
Arg IdxArgument DescriptionTypeDefault
1New description of the notificationstringnil

ChangeStep

Advance or rewind the progress bar when using step-based notifications.

Notification:ChangeStep(5)
Arg IdxArgument DescriptionTypeDefault
1New step of the progress notificationnumbernil

Destroy

Immediately dismiss the notification and free its resources.

Notification:Destroy()

Watermark

watermark

The watermark is a compact, draggable overlay that typically lives in the top-left corner. It is ideal for surfacing live stats such as FPS, ping, server identifiers or script versions. The feature is inspired by the LinoriaLib UI Library.

Methods

SetVisibility

Sets the watermark visibility.

Library:SetWatermarkVisibility(true)
Arg IdxArgument DescriptionTypeDefault
1Whether to show the watermarkbooleantrue

SetWatermark

Sets the watermark text.

Library:SetWatermark("Obsidian demo")
Arg IdxArgument DescriptionTypeDefault
1Text to display in the watermarkstringnil

Example

-- Sets the watermark visibility
Library:SetWatermarkVisibility(true)
 
-- Example of dynamically-updating watermark with common traits (fps and ping)
local FrameTimer = tick()
local FrameCounter = 0;
local FPS = 60;
 
local WatermarkConnection = game:GetService('RunService').RenderStepped:Connect(function()
    FrameCounter += 1;
 
    if (tick() - FrameTimer) >= 1 then
        FPS = FrameCounter;
        FrameTimer = tick();
        FrameCounter = 0;
    end;
 
    Library:SetWatermark(('Obsidian demo | %s fps | %s ms'):format(
        math.floor(FPS),
        math.floor(game:GetService('Stats').Network.ServerStatsItem['Data Ping']:GetValue())
    ));
end);

Keybinds Menu

keybinds

The keybinds menu surfaces every registered keybind alongside its current state. When a keybind is configured in Toggle mode the menu also renders tap-friendly buttons, giving mobile players parity with keyboard users.

Library.ShowToggleFrameInKeybinds = true -- Show toggle state in keybind menu

Custom Cursor

custom cursor

Enable the custom cursor to render the Obsidian-styled pointer at your mouse position—handy for experiences that hide or replace Roblox's default cursor.

Library.ShowCustomCursor = true

On this page