Velareference

Cheat sheet

Every utility class on one filterable page — by class, by property, or by lowering path.

The same classes the utility reference documents, with the prose taken out. Filter by a class prefix such as bg-, by the Roblox property a class writes such as UIStroke or TextSize, or by the family name. Every family heading links back to the section that explains it.

The runtime pill marks a utility that builds a wrapper, a separator or a loop, which no static prop can express. Margins, divide-*, animate-* and every variant prefix move the element onto the runtime path, even inside a plain string literal. Filter to just those to see what a class list is costing you.

174 rows across 29 families. Every family links to its section in the reference.

Color

ColorA theme color key or an arbitrary [#hex], plus an optional /N opacity modifier that lowers to whichever transparency channel the family owns.
bg-{color}theme color key, [#hex]
BackgroundColor3 + BackgroundTransparency
text-{color}theme color key, [#hex]
TextColor3 + TextTransparencyFallback branch of text-*
image-{color}theme color key, [#hex]
ImageColor3 + ImageTransparency
placeholder-{color}theme color key, [#hex]
PlaceholderColor3No transparency channel
border-{color}theme color key, [#hex]
UIStroke.Color + UIStroke.TransparencyHelper instance
ring-{color}outline-{color}theme color key, [#hex]
UIStroke.Color + UIStroke.TransparencySame UIStroke as border-*
shadow-{color}theme color key, [#hex]
UIShadow.ColorHelper instance
divide-{color}theme color key, [#hex]
runtimeseparator BackgroundColor3 + BackgroundTransparency
from-{color}via-{color}to-{color}theme color key, [#hex]
UIGradient.Color keypoints + UIGradient.TransparencyHelper instance

Border, ring, and outline

Borders & effectsAll three families write into a single shared UIStroke helper instance, so they do not stack — on a collision the later token wins.
border
UIStroke.Thickness = 1Bare form
border-{n}0, 1, 2, 4
UIStroke.ThicknessNo other numbers; use border-[3px]
border-transparent
UIStroke.Transparency = 1
border-{join}round, bevel, miter
UIStroke.LineJoinMode
border-{color}theme color key, [#hex]
UIStroke.Color, Transparency = 0
ring
UIStroke.Thickness = 3Also sets ApplyStrokeMode = Border
ring-{n}0, 1, 2, 4, 8
UIStroke.Thickness
outline
UIStroke.Thickness = 2Also sets ApplyStrokeMode = Border
outline-noneoutline-hidden
UIStroke.Thickness = 0
border-[{n}]ring-[{n}]outline-[{n}]pixels, with or without the unit
UIStroke.ThicknessArbitrary value, since 0.7.0. A bracket is read as a color first

Radius

Borders & effectsA pure lookup in theme.radius — there is no numeric fallback, so a value off the scale has to be bracketed. A directional form squares off the corners it does not name.
rounded
UICorner.CornerRadiusThe theme's DEFAULT radius, 4px by default
rounded-{key}any key in theme.radius
UICorner.CornerRadiusPure theme lookup
rounded-[{n}]pixels, percent
UICorner.CornerRadiusArbitrary value, since 0.7.0
rounded-t-{key}rounded-b-{key}any key in theme.radius, or a bracketed value
UICorner.TopLeftRadius + TopRightRadius, BottomLeftRadius + BottomRightRadiusSince 0.13.0. The other pair is squared to 0
rounded-l-{key}rounded-r-{key}any key in theme.radius, or a bracketed value
UICorner.TopLeftRadius + BottomLeftRadius, TopRightRadius + BottomRightRadiusSince 0.13.0. The other pair is squared to 0
rounded-tl-{key}rounded-tr-{key}rounded-bl-{key}rounded-br-{key}any key in theme.radius, or a bracketed value
The one matching UICorner radius propertySince 0.13.0. Beats rounded-{key} on the corner it names, in either order

Shadow

Borders & effectsSix presets on a UIShadow helper instance, each a fixed blur / offset / spread / transparency.
shadow
UIShadow presetblur 3, offset Y 1, spread 0, transparency 0.9
shadow-sm
UIShadow preset2 / 1 / 0 / 0.95
shadow-md
UIShadow preset6 / 4 / −1 / 0.9
shadow-lg
UIShadow preset15 / 10 / −3 / 0.9
shadow-xl
UIShadow preset25 / 20 / −5 / 0.9
shadow-2xl
UIShadow preset50 / 25 / −12 / 0.75
shadow-none
UIShadow.Enabled = false
shadow-{color}theme color key, [#hex]
UIShadow.Colorshadow-transparent instead sets Transparency = 1
shadow-inner
unsupported-shadow-inset

Gradient

ColorStops flush into a ColorSequence on a UIGradient helper, and the element's BackgroundColor3 is forced to white so the gradient is not tinted.
bg-gradient-to-{dir}t, tr, r, br, b, bl, l, tl
UIGradient.RotationRotations 270, 315, 0, 45, 90, 135, 180, 225
bg-linear-to-{dir}same
sameAccepted alias
from-{color}via-{color}to-{color}theme color key, [#hex]
UIGradient.Color

Z-index

LayoutSix presets, and a bracket for everything they do not cover. There is no z-auto and no negative form.
z-{n}0, 10, 20, 30, 40, 50
ZIndexExactly these six
z-[{n}]any non-negative integer
ZIndexArbitrary value, since 0.7.0

Padding

SpacingAll of it writes into a single UIPadding helper instance, so p-4 px-8 produces one instance and not two.
p-{key}spacing value
PaddingTop, PaddingRight, PaddingBottom, PaddingLeft
px-{key}spacing value
PaddingLeft, PaddingRight
py-{key}spacing value
PaddingTop, PaddingBottom
pt-{key}spacing value
PaddingTop
pr-{key}spacing value
PaddingRight
pb-{key}spacing value
PaddingBottom
pl-{key}spacing value
PaddingLeft

Margin

SpacingRoblox has no margin box, so a positive margin is a transparent wrapper frame — which is why the whole family is runtime-structural. gap-* on the parent is the cheaper answer.
m-{key}spacing value
runtimemargin box, all four sides
mx-{key}my-{key}spacing value
runtimemargin box, one axis
mt-{key}mr-{key}mb-{key}ml-{key}spacing value
runtimemargin box, one side
-mt-{key}-ml-{key}spacing value
Position shiftNegative top/left margins move, not wrap
-mr-{key}-mb-{key}
unsupported-negative-margin
mx-auto
AnchorPoint.X = 0.5, Position.X = 0.5 scaleStatic — centers without a wrapper
my-auto
AnchorPoint.Y = 0.5, Position.Y = 0.5 scaleStatic

Gap and space

SpacingUIListLayout has one padding axis, so there is no gap-x-/gap-y-space-x-* and space-y-* are the same property with a fill direction attached.
gap-{key}spacing value
UIListLayout.PaddingNo gap-x- or gap-y-
space-x-{key}spacing value
UIListLayout.Padding + FillDirection = Horizontal
space-y-{key}spacing value
UIListLayout.Padding + FillDirection = Vertical

Divideruntime

SpacingSeparator frames inserted between the content children. They are list items themselves, so the parent's gap-* applies on both sides of each one.
divide-xdivide-y
1px separators between children, horizontal / vertical
divide-x-{n}divide-y-{n}0, 1, 2, 4, 8
separator thickness
divide-{color}theme color key, [#hex]
separator BackgroundColor3

Size

Sizingw- and h- merge into one Size, and the emitted form follows the values — offsets give UDim2.fromOffset, scales give UDim2.fromScale, a mix gives the full UDim2.
w-{value}px, full, fractions, spacing offsets
Size X componentMerges with h-
h-{value}px, full, fractions, spacing offsets
Size Y componentMerges with w-
size-{value}px, full, fractions, spacing offsets
both axes
basis-{value}px, full, fractions, spacing offsets
Size X componentEffectively w-* regardless of fill direction
w-autow-fit
AutomaticSize = Enum.AutomaticSize.X
h-autoh-fit
AutomaticSize = Enum.AutomaticSize.Y
size-autosize-fit
AutomaticSize = Enum.AutomaticSize.XYAlso when both axes are set

Constraints

SizingOffset-only, on a UISizeConstraint helper. An axis you leave out defaults to 0 for MinSize and math.huge for MaxSize.
min-w-{key}spacing offset
UISizeConstraint.MinSize X
min-h-{key}spacing offset
UISizeConstraint.MinSize Y
max-w-{key}spacing offset
UISizeConstraint.MaxSize X
max-h-{key}spacing offset
UISizeConstraint.MaxSize Y

Position

LayoutNone of these take effect under a parent that has a UIListLayout — any flex, gap-*, or space-* on the parent owns child positions.
left-{value}px, full, fractions, spacing offsets
Position X
top-{value}same
Position Y
right-{value}same
Position X, from the far edgeright-2 is new UDim(1, -8)
bottom-{value}same
Position Y, from the far edge
inset-{value}same
both axes
-left-{value}-top-{value}-inset-{value}same
negated

Anchor

LayoutThe nine AnchorPoint positions. Anything outside them is unsupported-anchor-value.
origin-{key}top-left, top, top-right, left, center, right, bottom-left, bottom, bottom-right
AnchorPointEmitted as new Vector2(x, y)

Flex layout

Flexbox & gridA UIListLayout helper instance. justify-* and items-* name the Roblox layout's horizontal and vertical axes, not the flex main and cross axes — they do not swap under flex-col.
flex
FillDirection = Enum.FillDirection.HorizontalBare form. Every form also sets SortOrder = LayoutOrder
flex-row
FillDirection = Enum.FillDirection.Horizontal
flex-col
FillDirection = Enum.FillDirection.Vertical
flex-wrap
Wraps = true
flex-nowrap
Wraps = false
justify-startjustify-centerjustify-end
HorizontalAlignment = Left, Center, Right
justify-betweenjustify-aroundjustify-evenly
HorizontalFlex = Enum.UIFlexAlignment.SpaceBetween, SpaceAround, SpaceEvenlyDifferent property
items-startitems-centeritems-end
VerticalAlignment = Top, Center, Bottom
justify-stretch
HorizontalFlex = Enum.UIFlexAlignment.FillDifferent property. Since 0.12.7
items-stretch
VerticalFlex = Enum.UIFlexAlignment.FillDifferent property
content-{start,center,end}
VerticalAlignment
content-{between,around,evenly,stretch}
VerticalFlex

Flex items

Flexbox & gridA UIFlexItem helper instance on the child. There is no grow-{n} and no shrink-{n}.
flex-1
FlexMode = Enum.UIFlexMode.Fill
flex-auto
FlexMode = Enum.UIFlexMode.Fill
flex-initial
FlexMode = Enum.UIFlexMode.Shrink
flex-none
FlexMode = Enum.UIFlexMode.None
grow
FlexMode = Enum.UIFlexMode.Grow
grow-0
FlexMode = Enum.UIFlexMode.None
shrink
FlexMode = Enum.UIFlexMode.Shrink
shrink-0
FlexMode = Enum.UIFlexMode.None
self-{auto,start,center,end,stretch}
ItemLineAlignment

Grid

Flexbox & gridUIGridLayout stamps CellSize onto every child, so the column count decides the track width. No spans, no templates.
grid
UIGridLayout child, SortOrder = LayoutOrder
grid-cols-{n}112
FillDirection = Horizontal, FillDirectionMaxCells = n, CellSize.X
grid-rows-{n}112
FillDirection = Vertical, FillDirectionMaxCells = n, CellSize.Y
auto-rows-{n}spacing scale, arbitrary
CellSize.YCross axis of grid-cols-*
auto-cols-{n}spacing scale, arbitrary
CellSize.XCross axis of grid-rows-*

Order

Flexbox & gridLayoutOrder, which only decides anything under a layout that sorts by it — Vela's own do, a layout instance you wrote keeps Roblox's default of sorting by name.
order-{n}-order-{n}any integer
LayoutOrder
order-first
LayoutOrder = -9999
order-last
LayoutOrder = 9999
order-none
LayoutOrder = 0

Aspect ratio

SizingA UIAspectRatioConstraint helper instance.
aspect-square
UIAspectRatioConstraint.AspectRatio = 1
aspect-video
AspectRatio = 1.7777777778
aspect-[W/H]positive finite numbers
AspectRatioArbitrary value
aspect-[N]positive finite number
AspectRatioArbitrary value
aspect-auto
unsupported-aspect-value

Transform

Transforms & motionFixed scales, no scale-x-*/scale-y-*. translate-* splits by value kind: a fraction lowers to AnchorPoint, a pixel value to the Position offset.
rotate-{deg}-rotate-{deg}0, 1, 2, 3, 6, 12, 45, 90, 180
Rotation-rotate-0 stays 0
scale-{n}0, 50, 75, 90, 95, 100, 105, 110, 125, 150
UIScale.ScaleMaps to 0, 0.5, 0.75, 0.9, 0.95, 1, 1.05, 1.1, 1.25, 1.5
translate-x-{v}translate-y-{v}fractions or spacing values
AnchorPoint or PositionA fraction anchors; a pixel value shifts

Effects

Borders & effectsopacity-* is inverted from Roblox transparency, order-independent, and reaches the whole subtree — a canvasgroup ends the descent.
opacity-{n}any integer 0100
Every transparency channel the element paints, and the subtree under itInverted: opacity-100 is fully opaque
opacity-{n}any integer 0100
GroupTransparency, on a canvasgroupOne composited layer; the fade stops there

Motion

Transforms & motionExecuted by TweenService in the runtime helper. A transition needs a property that actually changes — a variant rule or a dynamic className — or it is dropped.
transition
Tween property changes caused by variant rules
transition-all
Tween every property a rule changes
transition-colors
Narrow the tween to the color properties
transition-opacity
Narrow the tween to the transparency properties
transition-transform
Narrow the tween to Position, Rotation, UIScale
transition-shadow
Narrow the tween to the UIShadow propertiesSince 0.13.0, when transitions began moving the helper instances
transition-none
Disable tweening
duration-{n}preset 751000, or any integer ms
Tween time, n / 1000 seconds
delay-{n}preset 751000, or any integer ms
Tween delay
ease-{linear,in,out,in-out}
EasingStyle / EasingDirection
animate-{spin,pulse,bounce}
runtimePreset looping animation
animate-none
No animation

Typography

TypographyMeaningful on textlabel, textbutton, and textbox. font-* is one prefix over three axes — weight, family, style — that merge into a single FontFace.
text-{size}xs 12, sm 14, base 16, lg 18, xl 20, 2xl 24, 3xl 30, 4xl 36, 5xl 48, 6xl 60, 7xl 72, 8xl 96, 9xl 128
TextSizePixel values shown
font-{weight}thin, extralight, light, normal, medium, semibold, bold, extrabold, black
FontFace weight axisnormal is Regular, black is Heavy
font-{family}any key in theme.fontFamilysans, serif, mono by default
FontFace family axisThe fallback branch of font-*
italicnot-italic
FontFace style axisMerges with the weight
leading-{key}none 1, tight 1.25, snug 1.375, normal 1.5, relaxed 1.625, loose 2
LineHeightNumeric forms are unsupported-line-height-value
text-lefttext-centertext-right
TextXAlignment
text-justify
unsupported-text-alignment
align-topalign-middlealign-bottom
TextYAlignment = Top, Center, Bottom
text-wraptext-nowrap
TextWrapped = true, false
whitespace-normalwhitespace-nowrap
TextWrapped = true, falseAlias family; others are unsupported-whitespace-value
truncate
TextTruncate = Enum.TextTruncate.AtEnd
uppercaselowercasecapitalizenormal-case
the Text string itselfRewritten at compile time when Text is a literal
underlineline-throughno-underline
RichText markup around TextBacks off with decoration-on-richtext if you set RichText

Images

LayoutScaleType on imagelabel and imagebutton. object-tile is a Roblox-only extension with no Tailwind counterpart.
object-cover
ScaleType = Enum.ScaleType.Crop
object-contain
ScaleType = Enum.ScaleType.Fit
object-fill
ScaleType = Enum.ScaleType.Stretch
object-tile
ScaleType = Enum.ScaleType.Tile

Interaction

Interactivityoverscroll-* is meaningful only on scrollingframe.
pointer-events-none
Interactable = false
pointer-events-auto
Interactable = true
overscroll-auto
ElasticBehavior = Enum.ElasticBehavior.Always
overscroll-contain
ElasticBehavior = Enum.ElasticBehavior.WhenScrollable
overscroll-none
ElasticBehavior = Enum.ElasticBehavior.Never

Visibility

LayoutThe Visible property, both ways.
hidden
Visible = false
visible
Visible = true

Overflow

LayoutClipsDescendants. There is no overflow-auto and no overflow-scroll — that is a scrollingframe and the scrolling families.
overflow-hidden
ClipsDescendants = true
overflow-clip
ClipsDescendants = true
overflow-visible
ClipsDescendants = false

Scrolling

InteractivityFour families, all meaningful only on scrollingframe. Tailwind's own scroll-* utilities are a different family and report unsupported-scroll-value.
scroll-{x,y,xy}
ScrollingDirection = X, Y, XY
scroll-none
ScrollingEnabled = falseDoes not set a direction
scrollbar-w-{n}spacing scale, arbitrary
ScrollBarThicknessscrollbar-w-2 is 8px
scrollbar-none
ScrollBarThickness = 0
scrollbar-{color}any color, /N modifier
ScrollBarImageColor3, ScrollBarImageTransparency
canvas-{auto,auto-x,auto-y,none}
AutomaticCanvasSize = XY, X, Y, None

Variantsruntime

VariantsChained with colons and combined with AND. Any variant-prefixed token forces the runtime helper into the module, literal or not.
sm:md:lg:xl:2xl:
Viewport width ≥ 640, 768, 1024, 1280, 1536xl and 2xl since 0.13.0. Every threshold is a theme.screens key
max-sm:max-md:max-lg:max-xl:max-2xl:
Viewport width < the same thresholdSince 0.13.0. The exact complement of the bare form, so the two cover every viewport once. Chains, as md:max-lg:
attr-[{Name}={value}]:
The styled instance carries that Roblox attributeSince 0.13.0. addVariant() registers the same condition under a name
portrait:
Viewport width less than height
landscape:
Viewport width ≥ height
touch:
UserInputService.TouchEnabled, and no gamepad
mouse:
Neither gamepad nor touch
gamepad:
UserInputService.GamepadEnabled
hover:
The pointer is over this element
active:
This element is being pressed
focus:
This element holds focus or selection
dark:
Players.LocalPlayer carries VelaColorScheme = "dark"

A class that is not here is one Vela does not compile. The reference page lists what has no Roblox equivalent and why, and Diagnostics explains every warning code named above.

Three things this page cannot flatten into rows, all on the reference. Color keys and the /N modifier, arbitrary bracket values, and which utilities each host element accepts.