Skip to main content

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.

Python Version Platform License

โœจ 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

๐ŸŽฏ 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

  1. Follow typing standards - See WINSTON_IMPLEMENTATION.md
  2. Add comprehensive docstrings - Google style required
  3. Test your changes - Create test scripts in winston/scratch/
  4. Run mypy - Fix all type errors before committing
  5. 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

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:

  1. Accessibility First - Every feature designed for screen reader users
  2. Keyboard-Driven - All functionality accessible via hotkeys
  3. Speech Integrated - Continuous spoken feedback
  4. Rapid Iteration - Live reload for fast development cycles
  5. Type Safety - Comprehensive type hints with mypy validation
  6. Self-Documenting - Google-style docstrings throughout
  7. 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

๐Ÿš€ 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pywinston-0.1.2.tar.gz (229.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pywinston-0.1.2-py3-none-any.whl (247.5 kB view details)

Uploaded Python 3

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

Hashes for pywinston-0.1.2.tar.gz
Algorithm Hash digest
SHA256 5a03b922b7fb030b13836f8cd288b00bd8046a8bb85bdd319dcf7167cdbfce70
MD5 467ce35e368e20e6bb2f4dc5d0b51d6f
BLAKE2b-256 e3f8b8781f08d02249378800e25f20280f13119fe5dec3b3d60b403a8ca62f30

See more details on using hashes here.

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

Hashes for pywinston-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 cb3fa1a2148bd688a09029aa79d648c745af523d1677c29145934c35b5a00cd7
MD5 2bf15912fb0eac6b6bcadcbd5618d9ae
BLAKE2b-256 486a8279208e3ed028d24a1975710784a38e87ddf7f6ec922d7d2697aa30083a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page