Scroll by clicking β no physical mouse wheel required
ScrollNice is a Windows system utility and a Chrome extension (FeelClick). Use a floating scroll zone: click, hold, or hover to scroll β ideal for broken wheels, one-handed use, or a different scrolling feel.
π Site: anhhackta.github.io/ScrollNice Β· Sources: docs/ (GitHub Pages)
| Three modes | Click/hold Β· top/bottom split Β· hover auto-scroll |
| Small native build | Classic release is a tiny portable .exe (see Releases) |
| No telemetry | Offline-first; no ads |
| Hotkeys | Defaults: Ctrl+Alt+S (toggle), Ctrl+Alt+E (edit zone), Ctrl+Alt+W (wheel block) β configurable in config.json |
| Wheel block | Optional; hold Alt to bypass (when configured) |
| Chrome | Load unpacked from extension/FeelClick/ |
- Download
ScrollNice-portable.zipfrom Releases. - Extract and run
ScrollNice.exe. - Settings:
config.jsonnext to the executable.
The shipped binary today is built from the C++ / Win32 stack. A Rust + Slint UI rewrite is in progress (see Migration status).
- Clone or download this repo.
- Chrome β
chrome://extensions/β enable Developer mode β Load unpacked. - Choose
extension/FeelClick/.
Requirements: CMake β₯ 3.15, MSVC 2019+ (or compatible toolchain).
git clone https://github.com/anhhackta/ScrollNice.git
cd ScrollNice
cmake -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --config ReleaseOutput: build/Release/ScrollNice.exe (layout may vary slightly by generator).
Requirements: Rust stable, same repo root.
# Debug (nhanh nhαΊ₯t Δα» compile lαΊ·p, binary lα»n hΖ‘n)
cargo build
# .\target\debug\scrollnice-rs.exe
# Thα» tα»i Ζ°u vα»«a phαΊ£i β compile nhanh hΖ‘n --release
cargo build --profile quick
# .\target\quick\scrollnice-rs.exe
# BαΊ£n phΓ‘t hΓ nh tα»i Ζ°u
cargo test
cargo build --release
# .\target\release\scrollnice-rs.exeDesign and schema: docs/superpowers/specs/2026-05-08-slint-ui-migration-design.md Β· Progress: MIGRATION_STATUS_2026-05-08.md.
| Goal | Run this |
|---|---|
| Normal use | Download from Releases β ScrollNice.exe inside the zip (C++ build). |
After CMake (cmake --build β¦) |
build\Release\ScrollNice.exe (path may vary, e.g. build\x64\Release\). |
After cargo build |
target\debug\scrollnice-rs.exe |
After cargo build --profile quick |
target\quick\scrollnice-rs.exe |
After cargo build --release |
target\release\scrollnice-rs.exe |
Only one of these is needed at a time. target\ holds Rust outputs; build\ holds CMake outputs β both are safe to delete and will be recreated on the next build (they are gitignored).
The Rust baseline uses schema version 2 (see spec). Example:
{
"version": 2,
"enabled": true,
"language": "en",
"theme": "dark",
"current_profile": "default",
"hotkeys": {
"toggle_enabled": "Ctrl+Alt+S",
"toggle_edit": "Ctrl+Alt+E",
"toggle_wheel": "Ctrl+Alt+W"
},
"scroll": {
"mode": "hover_auto",
"scroll_amount": 3,
"continuous_speed": 5,
"continuous_accel": 1.2,
"hover_speed": 3
},
"zone": {
"x": 0,
"y": 100,
"width": 60,
"height": 400,
"opacity": 0.3,
"locked": false
},
"wheel_block": "off",
"wheel_block_bypass_modifier": "Alt",
"start_with_windows": false,
"sound": { "enabled": false },
"profiles": []
}The legacy C++ build may still expect an older shape for some fields; if you mix binaries, keep a backup of config.json. Full reference: docs.
ScrollNice/
βββ Cargo.toml, build.rs # Rust + Slint (migration)
βββ CMakeLists.txt # Native Windows app (C++17)
βββ config.json # Default / sample config (v2 for Rust)
βββ ui/ # Slint UI (.slint)
βββ src/
β βββ main.rs, lib.rs
β βββ core/ # Rust: config, zone, scroll_engine, state_machine (+ C++ counterparts)
β βββ platform/win/ # C++ Win32 implementation
β βββ platform/win32/ # Rust Win32 stubs / bridge (in progress)
β βββ i18n/, themes/, ui/
β βββ main.cpp # C++ entry
βββ extension/FeelClick/ # Chrome MV3 extension
βββ locales/, presets/ # Rust i18n + presets
βββ docs/ # GitHub Pages (landing + guides)
β βββ index.html, changelog.html, favicon.svg
β βββ css/, js/
β βββ docs/ # Documentation pages
βββ docs/superpowers/specs/ # Approved design specs
βββ MIGRATION_STATUS_2026-05-08.md
βββ ScrollNiceDoc # Optional narrative history (Vietnamese / English)
βββ vendor/ # C++ headers (e.g. nlohmann json)
Build artifacts: build/ (CMake) and target/ (Rust) are ignored by Git β generate locally.
- No telemetry β data stays on your machine.
- No screen scraping, clipboard harvesting, or foreign-process DLL injection.
- Uses the standard Windows
WH_MOUSE_LLhook for pointer events needed by the scroll zone. Some AV tools may flag low-level hooks generically; the code here is open for review.
ScrollNice is free and open source. If it helps your workflow:
- β Ko-fi β hoang2k2
- π³ PayPal β bahoang2k2
HoΓ ngX Β· @anhhackta Β· Project site
Made with care in Vietnam π»π³