StormIRC

A completely accessible GUI IRC client built specifically for blind users and anyone who values keyboard-first design. Built with Python and Qt6 (PySide6).

Features

🎯 Accessibility First

  • Screen Reader Support: Fully compatible with Orca, NVDA, and other screen readers
  • Keyboard Navigation: Complete keyboard control - mouse optional
  • Text-to-Speech: Optional Speech Dispatcher integration for self-voicing
  • Cursor Navigation: Arrow keys work in chat history for easy navigation

💬 Full IRC Protocol Support

  • Multi-server support with SSL/TLS
  • SASL PLAIN authentication
  • Channel management (join, part, topic)
  • Private messages in tabs
  • User lists per channel
  • Nick changes, WHOIS, CTCP ACTION (/me)
  • Automatic reconnection with exponential backoff
  • CAP negotiation (IRCv3)

🗂️ Tabbed Interface

  • Server Console tab for server messages
  • One tab per channel with independent chat, topic, user list, and input
  • One tab per PM conversation (no separate windows!)
  • Easy tab navigation with keyboard shortcuts

⚙️ Highly Configurable

  • Multi-server configuration with auto-connect
  • Per-channel autojoin settings
  • Customizable highlight patterns (regex)
  • Speech settings (rate, pitch, volume, voice selection)
  • Window dimensions and UI preferences
  • Export/import configuration for backup

🔔 Smart Notifications

  • System notifications for highlights and PMs
  • Customizable regex highlight patterns
  • Unread message counters
  • Sound notifications

🎹 Programmable Function Keys

  • F1-F12 keys can execute:
    • Plain text messages
    • IRC commands (e.g., /away I'm away)
    • Shell commands (e.g., /usr/bin/date)
    • Shell with output to channel (e.g., /usr/bin/fortune|)

Installation

Prerequisites

Required:

  • Python 3.8 or later
  • Qt6 (via PySide6)

Optional (for text-to-speech):

  • Speech Dispatcher

Install Steps

  1. Clone the repository:

    git clone https://git.stormux.org/storm/stormirc.git
    cd stormirc
    
  2. Install Python dependencies:

    pip install -r requirements.txt
    
  3. Optional - Install Speech Dispatcher:

    # Arch/Manjaro:
    sudo pacman -S speech-dispatcher python-speechd
    
    # Debian/Ubuntu:
    sudo apt install python3-speechd
    
    # Fedora:
    sudo dnf install python3-speechd
    
  4. Run StormIRC:

    ./stormirc
    

    Or with debug logging:

    ./stormirc -d
    

Keyboard Shortcuts

Tab Navigation

  • Ctrl+Tab: Next tab
  • Ctrl+Shift+Tab: Previous tab
  • Ctrl+W: Close current tab (sends PART for channels)
  • Alt+7, Alt+8, Alt+9: Jump to tab 7, 8, or 9

Configuration

  • Ctrl+S: Save settings to disk

Within a Tab

  • F6: Cycle focus (chat → input → user list → chat)
  • Ctrl+L: Focus input field from anywhere
  • Enter on user in user list: Open PM tab
  • Shift+Enter in input: Insert newline (for multi-line messages)
  • Enter in input: Send message

Speech Control

  • Ctrl: Stop speech immediately
  • Alt+1: Decrease volume (-10)
  • Alt+2: Increase volume (+10)
  • Alt+3: Decrease pitch (-10)
  • Alt+4: Increase pitch (+10)
  • Alt+5: Decrease rate (-10)
  • Alt+6: Increase rate (+10)

Note: Speech adjustments apply immediately, save to config, and announce the new value.

Function Keys

  • F1-F12: Execute programmable commands (configure in Settings)

IRC Commands

StormIRC supports all standard IRC commands. Just prefix with /:

Channel Management

  • /join #channel - Join a channel
  • /part [#channel] - Leave current or specified channel
  • /list - Browse available channels (opens dialog)
  • /topic [new topic] - View or set channel topic

User Communication

  • /msg <nick> [message] - Open PM tab and optionally send message
  • /query <nick> - Open PM tab (alias for /msg)
  • /me <action> - Send CTCP ACTION
  • /whois <nick> - Get user information

Configuration

  • /autojoin - Show autojoin channels for current server
  • /autojoin add #channel1,#channel2 - Add channels to autojoin
  • /autojoin remove #channel - Remove channel from autojoin
  • /autojoin clear - Clear all autojoin channels
  • /autojoin list - List autojoin channels

Connection

  • /nick <newnick> - Change nickname
  • /quit [message] - Disconnect and quit application

Any Other IRC Command

Send raw IRC commands by prefixing with /:

  • /mode #channel +o nick - Give ops
  • /kick #channel nick [reason] - Kick user
  • /away [message] - Set away status
  • etc.

Configuration

StormIRC stores configuration in ~/.config/stormirc/config.json.

Settings Dialog

Access via menu or keyboard shortcut. Five tabs:

  1. General: Window dimensions, timestamps, theme
  2. Accessibility: Screen reader, notifications, display options
  3. Speech: TTS enable/disable, rate, pitch, volume, voice selection
  4. Servers: Add, edit, remove IRC servers
  5. Highlights: Manage regex highlight patterns
  6. Function Keys: Configure F1-F12 programmable keys

Server Configuration

Each server can have:

  • Host, port, SSL/TLS
  • Nickname, username, real name
  • Optional server password
  • SASL authentication (username/password)
  • Auto-connect on startup
  • Auto-join channels (per-channel checkbox)

Message Logging

All messages are automatically logged to ~/.config/stormirc/logs/:

  • Per-server, per-channel log files
  • Daily rotation (YYYY-MM-DD format)
  • Recent history loaded when opening channels

Accessibility Features

Screen Reader Compatibility

  • Proper ARIA roles and labels for all UI elements
  • Live message announcements (when window is active)
  • Logical tab order
  • Context announcements when switching tabs

Keyboard-First Design

  • All functionality accessible via keyboard
  • No mouse-only interactions
  • Intuitive keyboard shortcuts
  • F6 cycling for common navigation patterns

Text-to-Speech (Optional)

  • Speech Dispatcher integration
  • Configurable voice, rate, pitch, volume
  • On-the-fly adjustments with Alt+1 through Alt+6
  • Per-message speech control
  • Interrupt speech with Ctrl key
  • Optional reading of your own messages

Visual Accessibility

  • High DPI support
  • Customizable font sizes
  • Clear focus indicators
  • Unread message indicators

Architecture

stormirc/
├── stormirc               # Main executable
├── requirements.txt       # Python dependencies
└── src/
    ├── irc/
    │   └── client.py      # IRC protocol implementation
    ├── config/
    │   └── settings.py    # Configuration management
    └── ui/
        ├── main_window.py # Main tabbed window
        ├── channel_tab.py # Reusable tab widget
        ├── accessible_tree.py # Accessible tree widget
        ├── settings_dialog.py # Settings dialog
        ├── autocomplete_textedit.py # Text input with autocomplete
        ├── speech.py      # Speech Dispatcher TTS
        ├── sound.py       # Sound notifications
        └── logger.py      # Message logging

Threading Model

  • IRC client runs in background daemon thread
  • UI updates via Qt signals/slots (thread-safe)
  • Speech runs in separate thread to avoid blocking

Known Limitations

  • No DCC file transfers yet
  • No channel modes UI (use /mode command)
  • URLs not clickable yet (can be copied)
  • No message formatting (bold/italic/colors) yet
  • No custom keyboard shortcut configuration yet

Contributing

This project prioritizes accessibility. When contributing:

  1. Never break screen reader functionality - This is the highest priority
  2. Test with a screen reader (Orca on Linux, NVDA on Windows)
  3. Maintain keyboard navigation - All features must be keyboard accessible
  4. Follow code quality standards - See .claude/CLAUDE.md for details

License

[Add your license here]

Credits

Built with Python, Qt6 (PySide6), and lots of care for the user experience.

StormIRC proves that accessibility and good UX aren't mutually exclusive.

Description
A blind accessible GUI irc client
Readme GPL-3.0 832 KiB
Languages
Python 100%