npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@rbxts/react-clean-ui

v1.5.0

Published

A clean UI library for Roblox TypeScript projects

Readme

React Clean UI

An easy-to-use, theme-aware React component library for building polished Roblox interfaces with roblox-ts and @rbxts/react.

Stop hand-rolling sizes, spacing, colours, and layout on every screen — compose your UI from reusable, styled components instead.

📖 Read the full docs · 📦 npm package

Install

npm install @rbxts/react-clean-ui

Preview

| | | | |---|---|---| | Card | Checkbox | Toast | | Select | Menu | Slider | | Input | Tooltip | Draggable |

More components, including layouts, forms, charts, and navigation, are in the docs.

Why React Clean UI?

Roblox gives you powerful low-level UI instances, but every screen ends up repeating the same work: calculating sizes and positions, configuring layout and spacing, applying colours/typography/corners/shadows, and keeping it all visually consistent.

React Clean UI moves that repeated work into reusable components, helpers, and theme definitions — you describe what the interface should contain, the library handles how it's presented.

Features

  • 🧩 Composable components — containers, stacks, boxes, buttons, text, fieldsets, inputs, selects, and more
  • 🎨 Theme-driven design — colours, spacing, typography, radii, and semantic intent colours (primary, info, success, danger) defined centrally; light/dark and custom themes supported
  • 📐 Familiar sizing & spacing — concise, CSS-like props translated into native Roblox UDim/UDim2
  • 📱 Responsive layouts — breakpoint-aware components for phone, tablet, desktop, and console
  • ⚛️ Built for Roblox React — renders ordinary Roblox GUI instances through @rbxts/react; plays nicely with hooks, contexts, Rojo, and UI Labs stories

Quick start

First set up a roblox-ts project (npm init roblox-ts), then:

npm install @rbxts/react-clean-ui
// src/client/demo.client.tsx
import React from "@rbxts/react";
import ReactRoblox from "@rbxts/react-roblox";
import { CleanUiProvider, DefaultTheme, Container, Box, VStack, HStack, FlexItem, Text, Button, Fieldset, Input, Select } from "@rbxts/react-clean-ui";

const playerGui = game.GetService("Players").LocalPlayer.WaitForChild("PlayerGui") as PlayerGui;

const screenGui = new Instance("ScreenGui");
screenGui.ResetOnSpawn = false;
screenGui.IgnoreGuiInset = true;
screenGui.Parent = playerGui;

const root = ReactRoblox.createRoot(screenGui);

root.render(
  <CleanUiProvider theme={DefaultTheme}>
    <Container width="90%" center>
      <Box>
        <VStack>
          <Container>
            <HStack>
              <FlexItem>
                <Text text="Basic Form" variant="title" />
              </FlexItem>
              <Button icon="times" />
            </HStack>
          </Container>
          <Fieldset>
            <Fieldset.Label>
              <Text text="Enter Name:" />
            </Fieldset.Label>
            <Fieldset.Control>
              <Input placeholder="John Doe" value="" />
            </Fieldset.Control>
          </Fieldset>
          <Fieldset>
            <Fieldset.Label>
              <Text text="Country:" />
            </Fieldset.Label>
            <Fieldset.Control>
              <Select>
                <Select.Option text="United Kingdom" />
                <Select.Option text="United States" />
                <Select.Option text="Canada" />
              </Select>
            </Fieldset.Control>
          </Fieldset>
          <Container>
            <Button text="Submit Form" intent="info" icon="arrow-circle-right" />
          </Container>
        </VStack>
      </Box>
    </Container>
  </CleanUiProvider>
);

See the Quick Start docs for the full walkthrough (including default.project.json setup), and the Stories directory for live UI Labs examples you can open directly in Roblox Studio.

Project status

React Clean UI is under active development and being built in public. APIs, component props, and installation details may still change before a first stable release. Feedback, issues, and contributions are welcome.

License

ISC