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:
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:
Multi-step form progress
Track progress through wizards and onboarding flows:
Loading states with progress
Better than spinners when you know the timeline:
Download progress indicator
File downloads with size and speed information:
Task completion progress
Background processes and data operations:
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
Component | Purpose | Key Props |
---|---|---|
Progress | Progress indicator | value , max , getValueLabel |
Progress States
State | Condition | Use Case |
---|---|---|
Loading | 0 < value < max | Active progress with known completion |
Complete | value >= max | Task finished successfully |
Indeterminate | value = null | Progress unknown, show activity |
Common Props
Prop | Type | Purpose |
---|---|---|
value | number | null | Current progress value |
max | number | Maximum progress value (default: 100) |
getValueLabel | function | Custom screen reader announcement |
className | string | Additional 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
Shadcn Popover
React popover for contextual panels with smart positioning and portal rendering. Built with TypeScript and Tailwind CSS for Next.js using Radix UI.
Shadcn Radio Group
React radio group for single-choice forms with keyboard navigation. Built with TypeScript and Tailwind CSS for Next.js using Radix UI.