Measured entry
reui-scrollspy
scroll-effectminimal-flatmotion on file
A client-side React wrapper that tracks section positions, marks matching navigation children through data attributes, scrolls them smoothly, and syncs the URL hash. It ships as a TypeScript registry component with no declared package or registry dependencies, but it relies on browser DOM APIs and React hooks.



Measured
Every value below was written by the harness on the run that produced the frames above. None of it is derived from the prose.
| Build | OK |
|---|---|
| Mount | OK |
| Console errors | 0 |
| Uncaught page errors | 0 |
| Horizontal overflow | clean at 375, 768, 1440 |
| Axe critical | 0 |
| Axe serious | 0 |
| Axe moderate | 0 |
| Axe minor | 0 |
| Gzip marginal | 21.5 KB (87.0 KB build, 65.5 KB baseline) |
| Bare mode | OK |
| Provider required | NO |
| Demo used | written from the component source API |
Verdict
A compact, dependency-free choice for conventional documentation and settings pages. It mounted cleanly and needs no provider, but its data-attribute API is manual, scroll work runs on every captured event, and the unused throttle option makes it less suitable for demanding or unusual layouts.
Use it if
- You need a table of contents that follows scrolling inside the page or a referenced scroll container.
- Your navigation and content already use stable section IDs and can adopt the component's data-attribute contract.
- You want smooth anchor scrolling, configurable offsets, and URL hash updates without adding an observer library.
Skip it if
- Your navigation must work without client-side JavaScript or browser DOM access.
- Your product must not alter the URL hash as users scroll, unless you are prepared to disable that behavior.
- Your sections use complex nested scrolling or transformed layouts where offsetTop is not a reliable position model.
- You need built-in throttling, since the exposed throttle option is not implemented in the source.
Install
| Declared dependencies | none declared |
|---|---|
| Missing on install | none |
| Bare install | builds and mounts without the shadcn-style helpers |
| Provider | no provider required in the harness |
In a non-shadcn project, copy the client component into the source tree and ensure the React TypeScript build accepts client directives. Add matching section IDs and navigation data attributes, pass a scroll-container ref when needed, and provide your own active-state styling. No extra package or provider is required.
Source and credit
This page is a review, not a copy. The component source lives with its author and this site does not republish it. Read the license before you use anything.
Author repository
github.com/keenthemes/reuiAlternatives
Other published entries for the scroll-effect pattern, ordered by what they measured: mounts first, then clean axe scans, then bare-mode passes, then the smaller bundle.
- kibo-marqueeminimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 31.3KB
- Bare
- pass
- Prov
- NO
- motion-primitives-in-viewspatial
- Renders
- YES
- A11y
- 0
- Gzip
- 58.1KB
- Bare
- pass
- Prov
- NO
- tripled-interactive-timeline-shadcnuiminimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 58.7KB
- Bare
- pass
- Prov
- NO
- ruixen-container-text-scrollspatial
- Renders
- YES
- A11y
- 0
- Gzip
- 61.5KB
- Bare
- pass
- Prov
- NO
- fancy-parallax-floating3d
- Renders
- YES
- A11y
- 0
- Gzip
- 27.5KB
- Bare
- fail
- Prov
- NO
- ruixen-animated-linkunclassified
- Renders
- YES
- A11y
- 0
- Gzip
- 29.6KB
- Bare
- fail
- Prov
- NO