You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Premium dark glassmorphism UI library for Roblox
Single loadstring · PC + Mobile · 5 themes · 1700+ icons
Why Velvet
Other libs feel dated. Velvet is built on the 2026 dark-glassmorphism aesthetic: ambient color orbs, soft inner glows, and microinteractions that land in 200ms. It was designed mobile-first on a tablet and then scaled up to desktop, so touch targets and gestures actually feel right instead of being an afterthought.
Live search bar: type in the header, every element across every tab filters instantly.
Active toggle badges: each tab in the sidebar shows a pill counting how many toggles are on inside it. Glance at the sidebar, know your state.
Drag mutex: the color picker grabs input priority on mobile so the slider underneath stops twitching.
Live theme switching: recolors every existing element when you swap themes. No reload needed.
Tagged error system: every callback runs through safecall(source, fn) and routes failures through Velvet:OnError(fn) with the exact source label (Toggle:aimbot, Slider:fov).
Pulsing logo halo: small thing, but the window feels alive.
-- run the full feature demoloadstring(game:HttpGet("https://raw.githubusercontent.com/DexCodeSX/Velvet/main/Example.lua"))()
-- or test the key systemloadstring(game:HttpGet("https://raw.githubusercontent.com/DexCodeSX/Velvet/main/KeySystemTest.lua"))()
{
Title="string",
SubTitle="string",
Width=number, -- default: 560 PC / fits screen on mobileHeight=number, -- default: 400 PC / fits screen on mobileTabWidth=number, -- sidebar widthToggleKey=Enum.KeyCode, -- key that toggles visibilityToggleText="string", -- short text on the floating pillToggleIcon="lucide-name | rbxassetid://... | url",
Scale=number, -- UIScale multiplierSidebarToggle=boolean, -- show the = button (default true)Gestures=boolean, -- mobile swipe-to-switch (default true)
}