Overview
TanStack Ranger provides headless utilities for building fully accessible range and multi-range slider components. It handles all the complex logic for single value, range, and multi-thumb sliders while giving you complete control over styling and markup.
Package: @tanstack/react-ranger
Core: @tanstack/ranger-core (framework-agnostic)
Status: Stable
Installation
Core Pattern
Ranger Options
Required
Optional
Ranger Instance API
Handle API
Single Value Slider
Multi-Range Slider
Custom Steps
Tick Marks
Logarithmic Scale
Accessibility
TanStack Ranger provides built-in accessibility:
role="slider"on handlesaria-valuemin,aria-valuemax,aria-valuenowattributes- Keyboard navigation (Arrow keys, Home, End, Page Up/Down)
- Focus management
Controlled vs Uncontrolled
Styling Tips
Framework Adapters
Best Practices
- Always use
sortedValuesfrom onChange - handles may cross during drag - Memoize
getRangerElementcallback to prevent unnecessary re-renders - Use semantic HTML - render handles as
<button>elements for accessibility - Add
aria-labelto describe each handle's purpose - Use CSS transforms (
translateX) for positioning instead ofleftfor better performance - Validate in onChange to enforce constraints (min gap, max range, etc.)
- Use
onDragfor real-time feedback during drag operations - Consider touch targets - make handles at least 44x44px on mobile
Common Pitfalls
- Forgetting
position: relativeon the track container - Using
valuesinstead ofsortedValues(handles can swap positions) - Not providing
getRangerElementas a callback - Setting thumb position with
leftinstead oftransform: translateX() - Forgetting to handle keyboard navigation (built-in via getHandleProps)
- Not accounting for thumb width when calculating positions


