Click by hovering instead of pressing mouse buttons. Dwellpy automatically performs clicks when you position your cursor over a target and wait briefly.
Built for users with motor disabilities who use head trackers, eye-tracking systems, or have difficulty with traditional mouse clicking due to conditions like cerebral palsy, hand tremors, or muscular dystrophy.
Made by a disabled person for the disabled community.
Option 1: Installers and Executables (Easiest)
Download the installer or executable for your platform:
- Windows: Download the installer from latest releases - look for
dwellpy-installer-*-windows-x64.exe - macOS: Download from latest releases - look for
dwellpy-*-macos.dmgordwellpy-*-macos-x64 - Linux: For Debian-based systems (Ubuntu, Mint, etc.), download the
.debpackage from latest releases (e.g.,dwellpy-*-linux-debian-x64.deb). For other distributions, or for a scripted setup, see the Linux Setup Guide.
The Windows installer provides a professional installation experience with Start Menu integration and automatic shortcuts. For macOS, the DMG offers a standard installation. For Linux, the .deb package integrates with your system's package manager. See setup guides for detailed platform-specific instructions.
Option 2: Package Managers
Linux (Automated Install):
curl -sSL https://raw.githubusercontent.com/code0nwheels/dwellpy/main/utils/linux-install.sh | bashTo uninstall:
curl -sSL https://raw.githubusercontent.com/code0nwheels/dwellpy/main/utils/linux-uninstall.sh | bashAll Platforms (pip):
pip install dwellpy
dwellpyNeed help? Check the setup guides for your operating system.
git clone https://github.com/code0nwheels/dwellpy.git
cd dwellpy
pip install -r requirements.txt
python -m dwellpy.main- Multiple click types: Left, right, double-click, and drag operations
- Floating widgets: Menu and scroll widgets that appear when you dwell (pause cursor)
- Visual feedback: Customizable click animations with distinctive colors for each action type
- Organized settings: Tabbed interface with logical grouping (Behavior, Visual, Widgets)
- Dwell-friendly controls: Large buttons with hover functionality for easy adjustment
- Auto-collapse UI: Minimize screen clutter with intelligent toolbar behavior
- Configurable: Adjust sensitivity for different motor abilities and use cases
- Cross-platform: Windows, macOS, and Linux support
- Accessibility focused: Keyboard navigation, tooltips, and consistent sizing for all users
Detailed guides are available in the project wiki:
For developers interested in the codebase architecture, see Architecture Documentation.
This project was created by and for the disability community. We welcome:
- Bug reports: Use GitHub Issues
- Feature requests: Especially accessibility improvements
- Documentation: Help improve setup guides
- Code contributions: See CONTRIBUTING.md
- Fork the repository
- Create a virtual environment:
python -m venv venv - Activate it:
source venv/bin/activate(Linux/Mac) orvenv\Scripts\activate(Windows) - Install dependencies:
pip install -r requirements.txt - Run tests:
python -m pytest(when available) - Make your changes and submit a pull request
dwellpy/
├── dwellpy/ # Main application package
│ ├── bootstrap/ # Application startup and initialization
│ ├── core/ # Core functionality
│ │ ├── click_manager.py # Click execution logic
│ │ ├── dwell_algorithm.py # Dwell detection algorithms
│ │ ├── input_manager.py # Input handling and position tracking
│ │ └── detection/ # Dwell detection components
│ ├── ui/ # User interface components
│ │ ├── ui_manager.py # Main UI orchestration
│ │ ├── components/ # Modular UI components
│ │ │ ├── cursor_movement_detector.py # Cursor movement detection
│ │ │ ├── ui_contraction.py # UI contraction/expansion
│ │ │ ├── menu_drawing.py # Menu widget drawing logic
│ │ │ └── scroll_drawing.py # Scroll widget drawing logic
│ │ ├── menu_widget.py # Menu widget implementation
│ │ ├── scroll_widget.py # Scroll widget implementation
│ │ └── dialogs/ # Settings and configuration dialogs
│ │ ├── settings_dialog.py # Original settings dialog (1451 lines)
│ │ ├── settings_dialog_refactored.py # New modular settings dialog (~300 lines)
│ │ └── settings/ # Modularized settings components
│ │ ├── components/ # Reusable UI components and event handlers
│ │ │ ├── ui_components.py # UI helper functions
│ │ │ ├── event_handlers.py # Event handling logic
│ │ │ └── __init__.py
│ │ └── tabs/ # Individual settings tabs
│ │ ├── dwell_movement_tab.py # Dwell timing and movement settings
│ │ ├── visual_feedback_tab.py # Transparency and click feedback
│ │ ├── scroll_widget_tab.py # Scroll widget configuration
│ │ ├── menu_widget_tab.py # Menu item size settings
│ │ ├── general_tab.py # Startup and UI behavior
│ │ └── __init__.py
│ ├── managers/ # Application state and lifecycle management
│ │ ├── button_manager.py # Button state and command management
│ │ ├── settings_manager.py # Settings persistence and management
│ │ ├── window_manager.py # Window positioning and management
│ │ ├── exit_manager.py # Application exit handling
│ │ └── lifecycle/ # Application lifecycle components
│ │ └── component_initializer.py # Component initialization
│ ├── config/ # Configuration and constants
│ └── utils/ # Utility functions and helpers
├── docs/ # Documentation
└── tests/ # Test suite (coming soon)
Settings Dialog Modularization (Completed)
- Before: Single monolithic file (1,451 lines)
- After: 8 focused modules (~1,200 lines total)
- Benefits: Improved maintainability, better organization, reusable components
- Structure:
- Main dialog orchestrates tab creation
- Individual tabs handle specific settings groups
- Shared components for UI helpers and event handling
- Preserved all original functionality
GNU General Public License v3.0. See LICENSE for details.