Skip to content

mhnpd/react-loader-spinner

Repository files navigation

React Loader Spinner

React Loader Spinner

npm version downloads stars release issues license

Simple, lightweight React SVG spinner components
Perfect for async operations and loading states

πŸ“š Documentation β€’ 🎨 Live Demo β€’ πŸ’» CodeSandbox


✨ Features

  • 🎯 35+ Beautiful Spinners - Wide variety of loading animations
  • 🎨 Fully Customizable - Colors, sizes, and styles
  • πŸ“¦ Lightweight - Zero dependencies (except React)
  • 🌲 Tree-shakeable - Import only what you need
  • πŸ’ͺ TypeScript - Full type definitions included
  • ⚑ React 17, 18 & 19 - Compatible with all modern React versions
  • 🎭 No CSS Required - Pure SVG animations
  • β™Ώ Accessible - ARIA labels and semantic HTML

πŸ“¦ Installation

npm install react-loader-spinner

Or using yarn:

yarn add react-loader-spinner

πŸš€ Quick Start

import { Audio } from 'react-loader-spinner'

function App() {
  return (
    <Audio
      height="80"
      width="80"
      color="#4fa94d"
      ariaLabel="audio-loading"
      wrapperStyle={{}}
      wrapperClass="wrapper-class"
      visible={true}
    />
  )
}

πŸ“– Documentation

Visit our complete documentation for:

🎨 Available Spinners

View all 35+ spinners
  • Audio
  • Ball Triangle
  • Bars
  • Blocks
  • Circles
  • Circles With Bar
  • Circular Progress
  • Color Ring
  • Comment
  • Discuss
  • DNA
  • Falling Lines
  • Fidget Spinner
  • Grid
  • Hearts
  • Hourglass
  • Infinity Spin
  • Line Wave
  • Magnifying Glass
  • Mutating Dots
  • Oval
  • Progress Bar
  • Puff
  • Radio
  • Revolving Dot
  • Rings
  • Rotating Lines
  • Rotating Square
  • Rotating Triangles
  • Tail Spin
  • Three Circles
  • Three Dots
  • Triangle
  • Vortex
  • Watch

πŸ’‘ Usage Examples

Basic Usage

import { Oval } from 'react-loader-spinner'

;<Oval
  height={80}
  width={80}
  color="#4fa94d"
  visible={true}
  ariaLabel="oval-loading"
  secondaryColor="#4fa94d"
  strokeWidth={2}
  strokeWidthSecondary={2}
/>

With Custom Styling

import { ThreeDots } from 'react-loader-spinner'

;<ThreeDots
  height="80"
  width="80"
  radius="9"
  color="#4fa94d"
  ariaLabel="three-dots-loading"
  wrapperStyle={{ margin: '20px' }}
  wrapperClass="custom-loader"
  visible={true}
/>

Conditional Rendering

import { TailSpin } from 'react-loader-spinner'

function MyComponent() {
  const [loading, setLoading] = useState(true)

  return (
    <div>
      <TailSpin
        height="80"
        width="80"
        color="#4fa94d"
        ariaLabel="tail-spin-loading"
        visible={loading}
      />
    </div>
  )
}

Tree-shaking with Direct Imports

For optimal bundle size, import components directly:

// Direct import (better for tree-shaking)
import { Audio } from 'react-loader-spinner/dist/esm/loader/audio'

// Or use named imports (also tree-shakeable)
import { Audio, Oval, ThreeDots } from 'react-loader-spinner'

🎯 Common Props

All spinner components accept these common props:

Prop Type Default Description
height string | number "100" Height of the spinner
width string | number "100" Width of the spinner
color string "#4fa94d" Primary color
visible boolean true Show/hide the spinner
ariaLabel string Component-specific Accessibility label
wrapperStyle CSSProperties {} Inline styles for wrapper
wrapperClass string "" CSS class for wrapper

Note: Individual components may have additional specific props. Check the documentation for each component.

πŸ”§ TypeScript Support

This package includes TypeScript definitions out of the box:

import { Audio } from 'react-loader-spinner'
import type { CSSProperties } from 'react'

const wrapperStyle: CSSProperties = {
  display: 'flex',
  justifyContent: 'center',
}

;<Audio height="80" width="80" color="blue" wrapperStyle={wrapperStyle} />

🌐 Browser Support

  • βœ… Chrome (latest)
  • βœ… Firefox (latest)
  • βœ… Safari (latest)
  • βœ… Edge (latest)
  • βœ… Modern mobile browsers

🀝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

πŸ“ License

MIT Β© Mohan Upadhyay

πŸ™ Contributors

Thanks goes to these wonderful people:

πŸ”— Links


Made with ❀️ by Mohan Upadhyay

⭐ Star us on GitHub β€” it helps!