Built for shadcn/ui
Install through the registry, own the source, and adapt the component like the rest of your system.
Braille Loader turns Unicode braille cells into crisp, theme-aware loading animations you can install as editable source and use anywhere your app waits.
Inspired by Braille Animations ⠿ by @gunnargray. Built independently for shadcn/ui by Joe.
npx shadcn@latest add https://shadcn-braille-loader.vercel.app/r/braille-loader.jsonBraille-only motion patterns
Source-owned React code
Status semantics included
Live loading states
Four production-sized examples
Install through the registry, own the source, and adapt the component like the rest of your system.
Every animation is composed from Unicode braille cells, so the loaders stay crisp at any size.
The component ships with role=status, aria-live, aria-label, and decorative cells hidden from assistive tech.
Variant library
Use compact indicators inside controls, expressive loaders in empty states, and slower motion for calm background work.
<BrailleLoader variant="chase" /><BrailleLoader variant="bars" /><BrailleLoader variant="marquee" /><BrailleLoader variant="helix" />Expanding and contracting from center
Diamond-shaped pulse from center
Dots orbit around the perimeter
Snake-like path traversal
Horizontal sweep fill effect
Vertical scan line effect
Drops moving down staggered columns
Diagonal cascade movement
Classic checkerboard toggle
Alternating column highlight
Sine wave across rows
Diagonal reveal animation
Random sparkle burst pattern
Double helix orbit pattern
Classic braille cell fill animation
Mirror ripple wave
Horizontal swing wave pattern
Compress inward with popping dots
Sort from random to ordered gradient
Audio bars rising by frequency
Compact dots chase across the row
Symmetric bars rise and fall
Scrolling diagonal stripe band
Sequential type-in cursor effect
Rotating arms around center
Install
The registry command adds the loader component and animation helpers to your project. The showcase block is optional when you want the full preview surface.
npx shadcn@latest add https://shadcn-braille-loader.vercel.app/r/braille-loader.jsonnpx shadcn@latest add https://shadcn-braille-loader.vercel.app/r/braille-loader-showcase.jsonUsage
The loader is intentionally plain: choose a variant, tune speed and size, then let your existing color tokens do the rest.
1 import { BrailleLoader } from "@/components/ui/braille-loader" 2 3 export function LoadingState() { 4 return ( 5 <BrailleLoader 6 variant="helix" 7 speed="normal" 8 label="Loading results" 9 /> 10 ) 11 }
Customize
Speeds, type size, and color are all component props or standard classes, so the loader stays easy to compose.
Use slow, normal, or fast presets.
<BrailleLoader variant="orbit" speed="slow" /><BrailleLoader variant="orbit" speed="normal" /><BrailleLoader variant="orbit" speed="fast" />Set the braille cell font size directly.
<BrailleLoader variant="sparkle" fontSize={16} /><BrailleLoader variant="sparkle" fontSize={28} /><BrailleLoader variant="sparkle" fontSize={44} />The cells inherit currentColor.
<BrailleLoader variant="sparkle" className="text-primary" /><BrailleLoader variant="helix" className="text-muted-foreground" /><BrailleLoader variant="rain" className="text-foreground" />Example
Put it in buttons, forms, table refresh states, command palettes, and anywhere a small source-owned loader should feel deliberate.
1 import { BrailleLoader } from "@/components/ui/braille-loader" 2 import { Button } from "@/components/ui/button" 3 4 function SubmitButton({ isSubmitting }: { isSubmitting: boolean }) { 5 return ( 6 <Button disabled={isSubmitting}> 7 {isSubmitting ? ( 8 <> 9 <BrailleLoader variant="pulse" className="text-primary-foreground" /> 10 Saving 11 </> 12 ) : ( 13 "Save changes" 14 )} 15 </Button> 16 ) 17 }
API
Everything needed for production loading states, kept intentionally small.
| Prop | Type | Default | Description |
|---|---|---|---|
| variant | string | "breathe" | Animation pattern. One of 25 variants. |
| speed | "slow" | "normal" | "fast" | "normal" | Animation speed preset. |
| className | string | - | Additional classes for color, layout, and spacing. |
| label | string | "Loading" | Screen reader label exposed through role=status. |
| fontSize | number | 28 | Braille character size in pixels. |
Accessibility
Animated braille cells are hidden from screen readers while the wrapper announces a concise loading label.
Communicates a non-interruptive loading state.
Lets assistive tech announce updates calmly.
Keeps decorative animation characters out of the spoken output.
Showcase block
Install the showcase when you want a ready-made browser for comparing variants, sizes, and speeds.