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:
HoàngX · @anhhackta · Project site
Made with care in Vietnam 🇻🇳