RRobloxUI
BrowseThemeSubmit
RRobloxUI β€” Roblox UI Components Marketplace
Theme ReferencePrivacy
Loading Spinner β€” RobloxUI
  1. Home
  2. /
  3. HUDs
  4. /
  5. Loading Spinner
Live Previewrunning real Luau in your browser
Booting Luau VM…
Preview of Loading Spinner β€” executed via in-browser Luau VM (wasmoon)

Loading Spinner

TSX + LuauFree

An animated loading spinner with configurable size, color, and speed. Uses minimal Roblox UI primitives for performance.

Details

AuthorRobloxUI Team
FrameworkRoblox-TS + React-Luau
CategoryHUDs
Dependencies@rbxts/react, @robloxui/theme
Theme Tokenscolors.primary
Last UpdatedJuly 22, 2026
import React, { useEffect, useRef } from "@rbxts/react";
import { useTheme } from "@robloxui/theme";

interface LoadingSpinnerProps {
  size?: number;
  color?: string;
  speed?: number;
}

export function LoadingSpinner({ size = 32, color, speed = 1 }: LoadingSpinnerProps) {
  const { colors } = useTheme();
  const frameRef = useRef<Frame>();

  useEffect(() => {
    const frame = frameRef.current;
    if (!frame) return;

    let angle = 0;
    const connection = game.GetService("RunService").Heartbeat.Connect((dt) => {
      angle = (angle + 360 * speed * dt) % 360;
      frame.Rotation = angle;
    });

    return () => connection.Disconnect();
  }, [speed]);

  return (
    <frame ref={frameRef} BackgroundTransparency={1} Size={new UDim2(0, size, 0, size)} AnchorPoint={new Vector2(0.5, 0.5)}>
      <imagelabel
        Image={"rbxassetid://spinner-arc"}
        Size={new UDim2(1, 0, 1, 0)}
        BackgroundTransparency={1}
        ImageColor3={color ? Color3.fromHex(color) : colors.primary}
      />
    </frame>
  );
}