Smooth, pixel-accurate scrolling for Playnite.
✨ No install, no download. It runs the exact easing SuperScroll uses, in your browser —
drag the sliders and scroll it against Playnite's row-at-a-time behaviour, side by side. ✨
📥 Install · ⚙️ Settings · 📝 Changelog
Playnite's lists scroll by whole rows: one wheel notch jumps one entire item, and nothing in between is possible. SuperScroll replaces that with frame-synced motion — every notch eases into place, and fast scrolling accelerates instead of stuttering.
- Smooth scrolling across every list in Playnite, including ones your theme creates.
- Overscroll bounce. The top and bottom of a list give a little and spring back, so an end feels like an edge rather than a dead stop.
- Fullscreen navigation smoothing. Controller and keyboard selection changes ease into place, with hold-repeat timings that can go below the floors Windows and Playnite impose.
- Seven presets and a tuning bench that previews your values in a browser before you commit to them.
- Tuning controls — smoothness, distance per notch, and line height.
- Works with large libraries: list virtualization stays on.
- Applies everywhere. Game lists, grids, sidebars, settings panes, and any list a theme adds later. Nothing to configure per view.
- Keeps virtualization. A common way to get pixel scrolling in WPF is to switch content scrolling off, which forces every row in the library to be built. SuperScroll changes the scroll unit instead, so a 10,000-game library scrolls as smoothly as a 10-game one.
- Framerate independent. The same flick travels the same distance on a 60Hz laptop panel and a 144Hz monitor.
- Ends that push back. Scrolling past the top or bottom meets resistance and springs home rather than stopping flat. Each further push moves less than the one before it.
- Fullscreen too. Fullscreen is driven by a controller, not a wheel — moving the selection is what scrolls the list — so it gets its own page of settings for that path.
- Stays out of the way. Ctrl/Shift-wheel gestures are left to Playnite, and a list that has hit its end hands the wheel back to whatever contains it.
Three pages. Everything below is off by default unless the table says otherwise, and the master switch on the first page governs all of it.
| Setting | Default | What it does |
|---|---|---|
| Enable smooth scrolling | On | The master switch — it governs the Fullscreen page too. Turn off to hand scrolling back to Playnite. No restart needed. |
| Preset | Huddini Flow | Sets the three values below together. Moving any slider switches this to Custom. |
| Smoothness | 0.30 | How much of the remaining distance is covered each frame. Lower glides longer, higher snaps. Shared with Fullscreen. |
| Lines per notch | 6 | How far one wheel notch travels. Windows' own default is 3; SuperScroll ships 6. |
| Line height | 136 px | The pixel height one line stands for. Raise for grid views, lower for dense lists. |
| Bounce at the ends of a list | On | Rubber-bands at the top and bottom. Pushing harder moves it less. Never takes the wheel from a list sitting inside a scrollable page. |
The Preview these settings in your browser button opens the tuning bench loaded with your current values — Playnite's scrolling on the left, yours on the right, same input.
| Preset | Smoothness | Lines | Line height |
|---|---|---|---|
| Huddini Flow (shipped default) | 0.30 | 6 | 136 px |
| Playnite Familiar | 0.25 | 3 | 48 px |
| Glide | 0.12 | 3 | 48 px |
| Snappy | 0.45 | 4 | 48 px |
| Near Instant | 0.85 | 3 | 48 px |
| Grid Sweep | 0.28 | 4 | 120 px |
| Dense List | 0.35 | 3 | 24 px |
Fullscreen is driven by a controller or the keyboard rather than the wheel, so these smooth a different path. The wheel still follows the Mouse Wheel page in either mode.
| Setting | Default | What it does |
|---|---|---|
| Smooth controller and keyboard navigation | Off | Eases the scroll that follows a selection change. Only the content slides, so it cannot fight Playnite's "keep the selection visible" behaviour. Uses the Smoothness value from the Mouse Wheel page. |
| Hold debounce | 60 ms | Moves closer together than this land instantly — there is no time to animate between them. Page Up / Page Down always land instantly. Set 0 to animate every move. |
| Use SuperScroll's key repeat instead of Windows' | Off | Holding an arrow key otherwise waits out Windows' repeat delay, which is 500 ms by default and cannot go below 250 ms. This replaces it inside Playnite only, with no floor. |
| ↳ Hold delay | 180 ms | How long a key must be held before it repeats. |
| ↳ Repeat as fast as the list can keep up | Off | Waits for each move to finish drawing instead of repeating on a fixed clock. Quick with small covers, easing off where tiles are expensive. |
| ↳ Interval | 45 ms | Time between repeats. Disabled while the option above is on. |
| Override Playnite's hold repeat timings (controller) | Off | Controller only — Playnite simulates arrow keys from a gamepad, so its own timings govern that input. A physical keyboard uses the Windows typematic rate instead. |
| ↳ Hold delay | 300 ms | Playnite's own value is 700 ms; this only ever lowers it. |
| ↳ Interval | 60 ms | Playnite's own value is 80 ms. |
| Setting | Default | What it does |
|---|---|---|
| Enable debug logging | Off | Writes SuperScroll.log to the plugin data folder. |
| Reset to defaults | — | Restores every value above. |
The controller override is the one option that reaches into Playnite itself rather than working through the interface, so it may stop having an effect after a Playnite update. It changes nothing permanently: Playnite's values are read first and put back when you switch it off, when the plugin is disabled, and when Playnite closes.
- Playnite 10 (SDK 6.16+)
- Windows with .NET Framework 4.6.2
Download the .pext from Releases and open it with Playnite.
dotnet clean -c Release
dotnet build -c Release
powershell -ExecutionPolicy Bypass -File scripts/package_extension.ps1MIT — see LICENSE.
