Self-voicing IDE and personal productivity environment for blind users
Project description
Winston
Self-voicing IDE and productivity environment for blind developers
Winston is a Python-based framework that provides an accessible, keyboard-driven development environment with integrated speech synthesis, code intelligence, and productivity tools designed specifically for blind users on Windows.
โจ Features
๐ค Self-Voicing IDE
- Full speech synthesis integration with JAWS and NVDA
- Announce code structure, indentation, and line numbers
- Speech-controlled navigation and editing
- Real-time spoken feedback for all operations
๐ Python Development
- Syntax-aware editor with code intelligence
- Live reload - Edit code and reload without restarting (Control+F5)
- Integrated debugger with speech support
- Code completion via Jedi
- Goto definition across files
- Type checking with mypy integration
- Code folding for navigating large files
๐ค AI Integration
- Claude Code integration for AI-assisted development
- GPT integration for code generation and Q&A
- Natural language programming assistance
๐ Productivity Applets
- Google Calendar - Manage events with full speech support
- Gmail - Read and compose emails
- Google Contacts - Contact management with autocomplete
- File Explorer - Navigate filesystem with speech
- Console - Execute shell commands with output capture
- JSON Editor - Edit JSON with validation and formatting
โก Developer Experience
- Hotkey-driven - Everything accessible via keyboard
- Modular architecture - Easy to extend with custom applets
- Live reload workflow - Rapid iterative development
- Comprehensive type hints - Full mypy static type checking
- Google-style docstrings - Self-documenting codebase
๐ Quick Start
Prerequisites
- Windows 10/11 (Winston uses Windows COM APIs)
- Python 3.10+ (modern type hints required)
- Screen reader (JAWS or NVDA recommended)
Installation
Option 1: Install from Source (Recommended for Development)
# Clone repository
git clone https://github.com/chris14257/winston.git
cd winston
# Install in editable mode with all dependencies
pip install -e .
# Run Winston
winston
Option 2: Quick Development Setup
# Clone and navigate to repository
git clone https://github.com/chris14257/winston.git
cd winston
# Install dependencies manually
pip install -r requirements.txt
# Run directly from source
python -m winston.churchill
First run:
- Winston beeps (350Hz, 200ms) on startup
- Root dialog opens with list of available applets
- Navigate with arrow keys, press Control+Return to open
Basic Usage
Launch Winston:
# If installed via pip
winston
# Or run as module
python -m winston.churchill
Essential Hotkeys:
- Control+Alt+E - Open file explorer
- Control+Alt+C - Open Claude Code integration
- Control+F5 - Reload current module (in pycoder)
- Control+W - Close current applet
- Control+Q - Quit Winston
See Getting Started Guide for detailed instructions.
๐ Documentation
- Getting Started - Installation, configuration, basic usage
- Winston Implementation Guide - Type hints, architecture, development workflows
- Development Workflow - Commit practices, testing protocols, WIP features
- Pip Installation Plan - Roadmap for pip installability
๐ฏ Core Applets
| Applet | Hotkey | Description |
|---|---|---|
| Explorer | Control+Alt+E | File system navigation and management |
| Editor | (auto) | Multi-line text editing with speech |
| Pycoder | (auto) | Python IDE with code intelligence |
| Clauder | Control+Alt+C | Claude Code AI integration |
| Diary | Control+Alt+D | Google Calendar management |
| Console | Control+Alt+X | Shell command execution |
| Debugger | (context) | Python debugger with speech |
Full list in GETTING_STARTED.md.
๐ง Development Workflow
Winston enables rapid iterative development without restarting:
# 1. Edit code in pycoder
@KeyHandler.hotkey("Control+Shift+T")
def command_my_feature(self, modified_name: str) -> None:
"""My new feature."""
self.say_strings("Feature works!")
# 2. Press Control+F5 to reload
# Winston says "reloaded"
# 3. Test immediately - changes are live!
# Press Control+Shift+T
# Hear: "Feature works!"
What can be reloaded:
- โ
All applets (
winston/applets/*.py) - โ Most utility modules
- โ Core framework (requires restart)
See Control+F5 Workflow for details.
๐๏ธ Architecture
Winston is built on a modular architecture:
winston/
โโโ framework.py # Core: Anchor, Carousel, COMThread
โโโ dialog.py # Base Dialog class with KeyHandler
โโโ subdialogs.py # FormDialog, TableDialog, Applet
โโโ elements.py # UI element types
โโโ churchill.py # Application launcher (entry point)
โโโ clem.py # Main event loop (pythoncom)
โโโ debugging.py # Debugger, inspector, logger
โโโ google_api.py # Google OAuth and API utilities
โโโ applets/ # Modular functionality
โโโ clauder.py # Claude Code integration
โโโ explorer.py # File explorer
โโโ pycoder.py # Python IDE
โโโ diary.py # Google Calendar
โโโ ...
Key Patterns:
- pythoncom main loop - Windows message pump for COM integration
- asyncio on threads - Async I/O without blocking main loop
- Duck typing validation -
element_attributes()instead of ABCs - Protocol classes - Type hints for structural typing
- Live reload - Module cache invalidation for hot reloading
See Architecture Notes for in-depth coverage.
๐ค Contributing
Winston is under active development. Contributions welcome!
Development Setup
# Clone repository
git clone https://github.com/chris14257/winston.git
cd winston
# Install in editable mode with development dependencies
pip install -e ".[dev]"
# Run type checker
python -m mypy winston --config-file=winston/mypy.ini
# Make changes and test with Control+F5
# Commit when working
Contribution Guidelines
- Follow typing standards - See WINSTON_IMPLEMENTATION.md
- Add comprehensive docstrings - Google style required
- Test your changes - Create test scripts in
winston/scratch/ - Run mypy - Fix all type errors before committing
- Commit with attribution - Use template from claude.md
See claude.md for complete development workflow.
๐ Learning Winston
For New Users
- Start with Getting Started Guide
- Explore
winston/applets/template.py- Demonstrates all key patterns - Read module docstrings - Winston is self-documenting
For Developers
- Read WINSTON_IMPLEMENTATION.md
- Study the type hints and docstrings throughout codebase
- Check claude.md for development practices
- Review recent commits for examples
For Contributors
- Fork the repository
- Create feature branch
- Follow typing and docstring standards
- Test with Control+F5 workflow
- Submit pull request
๐ Design Philosophy
Winston follows these principles:
- Accessibility First - Every feature designed for screen reader users
- Keyboard-Driven - All functionality accessible via hotkeys
- Speech Integrated - Continuous spoken feedback
- Rapid Iteration - Live reload for fast development cycles
- Type Safety - Comprehensive type hints with mypy validation
- Self-Documenting - Google-style docstrings throughout
- Modular - Applet architecture for extensibility
๐ฎ Future Plans
Short Term
- Pip installability -
pip install winston-ide(see plan) - Cross-platform test framework - Test without Windows dependencies
- Runtime type checking - Enable typeguard in development mode
- More applets - Email (mail.py), Jupyter (notebook.py)
Long Term
- Cross-platform support - macOS and Linux versions
- Plugin system - Third-party applet distribution
- Speech synthesis abstraction - Support multiple TTS engines
- Remote debugging - Debug code on remote systems
See WIP sections in claude.md for active work.
๐ Project Status
Current Version: 0.1.0 (Alpha)
Maturity:
- โ Core framework stable
- โ Major applets working (explorer, pycoder, clauder, diary)
- โ Type hints complete across codebase
- โ ๏ธ Some applets incomplete (mail, notebook, souper)
- โ ๏ธ Windows-only (platform-specific dependencies)
- โ ๏ธ Not yet pip-installable (manual setup required)
Type Checking:
- Total modules: 24 (all typed)
- mypy errors: 257 (down from 546 baseline, 52.9% reduction)
- Most errors are from untyped dependencies or legitimate duck typing
See mypy progress in claude.md for details.
๐ Acknowledgments
Winston builds on these excellent projects:
- pywin32 - Windows COM integration
- Jedi - Python code intelligence
- Google APIs - Calendar, Gmail, Contacts
- Claude Code - AI-assisted development
- JAWS/NVDA - Screen reader integration
Named after Winston Churchill for resilience and reliability.
๐ License
MIT License - see LICENSE file for details.
๐ Bug Reports & Questions
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Browse
winston/docs/directory or source code
๐ Why Winston?
Winston provides blind developers with a complete development environment that doesn't compromise on accessibility or functionality:
- No visual dependencies - Everything navigable by keyboard and speech
- Professional-grade tools - Real debugger, type checking, AI integration
- Rapid development - Live reload workflow matches sighted IDEs
- Extensible - Easy to add new tools and productivity features
- Open source - Customize to your workflow
Join us in making development accessible to everyone! ๐
Made with โค๏ธ for the blind developer community
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pywinston-0.1.2.tar.gz.
File metadata
- Download URL: pywinston-0.1.2.tar.gz
- Upload date:
- Size: 229.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a03b922b7fb030b13836f8cd288b00bd8046a8bb85bdd319dcf7167cdbfce70
|
|
| MD5 |
467ce35e368e20e6bb2f4dc5d0b51d6f
|
|
| BLAKE2b-256 |
e3f8b8781f08d02249378800e25f20280f13119fe5dec3b3d60b403a8ca62f30
|
File details
Details for the file pywinston-0.1.2-py3-none-any.whl.
File metadata
- Download URL: pywinston-0.1.2-py3-none-any.whl
- Upload date:
- Size: 247.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cb3fa1a2148bd688a09029aa79d648c745af523d1677c29145934c35b5a00cd7
|
|
| MD5 |
2bf15912fb0eac6b6bcadcbd5618d9ae
|
|
| BLAKE2b-256 |
486a8279208e3ed028d24a1975710784a38e87ddf7f6ec922d7d2697aa30083a
|