RecipesRecipe
Custom Scrollbar
Overlay themed scrollbars that track the active theme with smooth transitions and touch-friendly interactions.
- Goal
- Overlay themed scrollbars that track the active theme with smooth transitions and touch-friendly interactions.
- Prerequisites
- @themvora/core installed
- Theme scrollbar plugin
- Stack
- Any framework
- Result
- Custom themed overlay scrollbars
1Install
Pick your package manager — the command updates to match.
Install command
Needs
@themvora/corepnpm add @themvora/coreUsing a framework? Its adapter is a separate package — see the framework guides for the provider setup, then come back for the pattern.
2Implement
Drop this into your project. It is the whole pattern — no other setup is required.
import {
createThemeRuntime,
createOverlayScrollbar,
} from "@themvora/core";
const runtime = createThemeRuntime({
defaultTheme: "light",
plugins: [createOverlayScrollbar()],
});3Why this works
The overlay scrollbar replaces native scrollbars with a themed overlay that: - Uses theme colors for thumb and track - Smoothly animates theme switches - Works responsively on touch devices - Does not affect layout (preserves content width)
4Verify
- The page loads with no console errors after the change.
- The outcome holds: custom themed overlay scrollbars
- Toggling the theme in your app still works, and the state survives a reload if persistence is configured.
- Reduced-motion users see no animation if you enabled transitions.
Common failure
The most frequent cause is a prerequisite that is only half met — an adapter installed without the framework it wraps, or a provider mounted above the component that reads the theme. Re-read the prerequisites above, then confirm the provider wraps the tree that uses the value.