Skip to content


Registers a Material Design RippleButton PseudoInstance which can be instantiated via"RippleButton")

Only Global ZIndexBehavior is officially supported.

RippleButton API

RippleButtons work very similarly to regular TextButtons or ImageButtons. Just set the fields to whatever you want.


Wrapped Properties

Properties which access its top-level ImageButton:

Property Type
AnchorPoint Vector2
Active boolean
Name string
Parent Instance
Size UDim2
Position UDim2
TextTransparency string
LayoutOrder int
NextSelectionDown Instance
NextSelectionLeft Instance
NextSelectionRight Instance
NextSelectionUp Instance
Visible boolean
ZIndex int

Properties which access its TextLabel:

Property Type
Font Enum.Font
Text string
TextSize number
TextXAlignment Enum.TextXAlignment
TextYAlignment Enum.TextYAlignment

Properties which access its Shadow:

Property Type
Elevation Enumeration.Elevation

RippleButton Properties

Property Type Description
Disabled Boolean Whether the RippleButton is Disabled
Tooltip string The tip to display upon hover, with "" being the disabled value
BorderRadius Enumeration.BorderRadius How rounded the corners should be (0, 2, 4, or 8)
Style Enumeration.ButtonStyle "Flat", "Outlined", or "Contained" style
PrimaryColor3 Color3 The color of the text in Flat and Outlined styles or the color of the background in a Contained style when not Disabled
SecondaryColor3 Color3 The color of the text in Raised style, by popular request, despite my insistance to conform to Material Design. Not the original intention.


Event Description
OnPressed Fires after the Button was tapped or left-clicked
OnRightPressed Fires after the Button was right-clicked
OnMiddlePressed Fires after the Button was middle-clicked
RippleButton inherits from PseudoInstance


Click here for the example place

Demo code:


local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")

local Resources = require(ReplicatedStorage:WaitForChild("Resources"))

local Color = Resources:LoadLibrary("Color")
local PseudoInstance = Resources:LoadLibrary("PseudoInstance")

local LocalPlayer repeat LocalPlayer = Players.LocalPlayer until LocalPlayer or not wait()
local PlayerGui repeat PlayerGui = LocalPlayer:FindFirstChildOfClass("PlayerGui") until PlayerGui or not wait()

local Screen ="ScreenGui", PlayerGui)

local Frame ="Frame", Screen)
Frame.BackgroundColor3 = Color.Grey[200]
Frame.BorderSizePixel = 0
Frame.Size =, 0, 1, 0)

local Flat ="RippleButton")
Flat.AnchorPoint =, 0.5)
Flat.Size =, 83, 0, 36)
Flat.Position =, 0, 0.5, -36 - 16)
Flat.PrimaryColor3 = Color.Teal[500]
Flat.BorderRadius = 4
Flat.Style = "Flat"
Flat.Text = "SUBMIT"
Flat.Parent = Frame

local Outlined = Flat:Clone()
Outlined.Style = "Outlined"
Outlined.Position =, 0, 0.5, 0)
Outlined.Parent = Frame

local Contained = Flat:Clone()
Contained.Style = "Contained"
Contained.Position =, 0, 0.5, 36 + 16)
Contained.Parent = Frame

    print("Pressed Flat")

    print("Pressed Outlined")

    print("Pressed Contained")