Join our Discord Community

Shadcn Progress

React progress component for loading indicators and progress bars. Built with TypeScript and Tailwind CSS for Next.js using Radix UI.

Progress bar not updating?

Join our Discord community for help from other developers.


Ever uploaded a file and stared at a blank screen wondering if your internet died? Or clicked submit on a form and had no clue if it was processing or just frozen? Yeah, that's exactly why progress bars exist. This shadcn/ui progress component shows users that stuff is actually happening instead of leaving them in the dark about your React applications.

Progress showcase

Watch it fill up as your task completes:

Loading component...

Built on Radix UI Progress with proper ARIA attributes so screen readers announce the progress automatically. Styled with Tailwind CSS to match your design system instead of looking like a generic loading bar from 2010.

npx shadcn@latest add progress

Why progress bars actually beat spinners for user experience

Here's the thing—sometimes a spinner just doesn't cut it. When users are waiting for something important like file uploads or account creation, they need to know more than "something is happening." They need to know if they should grab coffee or stick around for 30 more seconds.

Think about how frustrating it is when an app update shows no progress, versus when you can see it's 73% complete with 2 minutes remaining. Progress bars set expectations, reduce anxiety about unknown wait times, and help users make decisions about whether to wait or come back later. Plus they prove your app didn't crash.

This free shadcn progress component handles the complex parts—accessibility attributes, screen reader announcements, state management—while you focus on providing accurate progress data. Whether you're building file upload interfaces, multi-step forms, or data processing workflows in your Next.js applications, progress indicators that inform users keep them engaged in your JavaScript projects.

Common progress patterns you'll actually use

File upload progress

Show real upload progress with file information:

Loading component...

Multi-step form progress

Track progress through wizards and onboarding flows:

Loading component...

Loading states with progress

Better than spinners when you know the timeline:

Loading component...

Download progress indicator

File downloads with size and speed information:

Loading component...

Task completion progress

Background processes and data operations:

Loading component...

Features

This free open source progress component includes everything you need:

  • TypeScript-first - Full type safety with progress values and state management
  • Radix UI powered - Battle-tested accessibility and screen reader support
  • ARIA compliant - Proper progressbar role and value announcements
  • Tailwind CSS styled - Customize with utilities, not fighting component CSS
  • Indeterminate state - Support for unknown progress scenarios
  • Custom value ranges - Not limited to 0-100, use any min/max values
  • Screen reader friendly - Announces percentage and custom completion messages
  • State-based styling - Visual states for loading, complete, and indeterminate

API Reference

Core Component

ComponentPurposeKey Props
ProgressProgress indicatorvalue, max, getValueLabel

Progress States

StateConditionUse Case
Loading0 < value < maxActive progress with known completion
Completevalue >= maxTask finished successfully
Indeterminatevalue = nullProgress unknown, show activity

Common Props

PropTypePurpose
valuenumber | nullCurrent progress value
maxnumberMaximum progress value (default: 100)
getValueLabelfunctionCustom screen reader announcement
classNamestringAdditional Tailwind classes

Production tips

Start progress immediately and keep it moving. This free shadcn/ui progress component works best when you show 1% right away so users know something started, then keep it moving consistently. This TypeScript component displays the value—you provide honest progress updates that don't hang at 90% forever in your Next.js applications.

Show what's actually happening with context. Don't just show a bar—add text like "Uploading photo..." or "Processing payment..." so users understand what's taking time. This open source shadcn component handles the visual progress, but you provide the context that reduces user anxiety.

Handle errors and cancellation gracefully. Long operations need escape hatches and clear error states. This JavaScript component shows the progress bar—your application logic handles what happens when things go wrong or users want to cancel at 67% completion.

Consider time estimates alongside progress bars. "About 30 seconds remaining" helps users make decisions about waiting. This Tailwind CSS styled component shows completion percentage, but time estimates based on current progress rate create better user experiences.

Use indeterminate state when progress is unknown. For operations where you can't measure progress accurately, use the indeterminate state with pulsing or moving animations. This component supports both known and unknown progress scenarios—choose based on what data you actually have.

Integration with other components

Progress bars naturally work with Button components for cancel actions and Dialog components for modal upload interfaces in your React applications. Use Form components with progress indicators for multi-step workflows.

For file operations, combine progress with Input components for file selection or Card components to display upload queues with individual progress bars. This open source pattern creates comprehensive file handling interfaces.

When building admin panels, pair progress with DataTable components for bulk operations or Alert components for completion notifications. The progress shows the current operation—other shadcn components handle the surrounding interface.

For loading states, use progress with Skeleton components while initial data loads or Sheet components for side panel operations. Your JavaScript application can compose these components while maintaining clear progress feedback.

Questions you might have