Software Architecture

Backend Java WebSocket Gateway
Frontend JavaScript ES6+
Protocol IRC + IRCv3 Extensions
Communication WebSocket (RFC 6455)

APIs & Protocols

This application implements and integrates various APIs and protocols:

  • IRC Protocol (RFC 1459, RFC 2812)
    Standard Internet Relay Chat protocol for messaging and channel management
  • IRCv3 Extensions
    • message-tags: Client metadata transmission
    • SASL: Simple Authentication and Security Layer
    • multi-prefix: Multiple user mode symbols
    • capability-negotiation: Feature discovery
  • WebSocket API (RFC 6455)
    Full-duplex communication protocol for real-time bidirectional data transfer
  • WEBIRC Protocol
    Transparent client IP forwarding for IRC servers with HMAC authentication
  • CTCP (Client-to-Client Protocol)
    Extended IRC commands: VERSION, PING, ACTION, TIME, CLIENTINFO

External APIs & Services

  • Cloudflare Turnstile API
    Privacy-first CAPTCHA alternative for bot protection
  • Google reCAPTCHA API (v2/v3/Enterprise)
    Advanced bot detection and abuse prevention service
  • Font Awesome Icons API
    Vector icon library via CDN (v6.5.1)

Libraries & Dependencies

Jakarta WebSocket API Jakarta Servlet API jQuery 3.x Bootstrap 5 JSP/JSTL HTML5 APIs CSS3 Variables

Backend: Java servlet container (Apache Tomcat, Jakarta EE compatible)
Frontend: Vanilla JavaScript ES6+, jQuery for DOM manipulation
Styling: Custom CSS with Bootstrap components

Security Features

  • SASL Authentication - Secure account login before joining channels
  • SSL/TLS Support - Encrypted connection to IRC servers
  • CAPTCHA Integration - Cloudflare Turnstile, Google reCAPTCHA v2/v3/Enterprise
  • HMAC Validation - Secure client authentication
  • XSS Protection - HTML entity escaping with IRC control code preservation
  • IP Forwarding Security - Trusted proxy IP validation

Client Features

  • Modern web-based interface - no installation required
  • Real-time communication via persistent WebSocket connection
  • Full IRC formatting support (colors, bold, italic, underline, strikethrough, monospace)
  • Keyboard shortcuts for formatting (Ctrl+B, Ctrl+I, Ctrl+U, etc.)
  • Multiple channel support with tab-based navigation
  • Private messaging (query windows)
  • Emoji picker with search and categories
  • Typing indicators for active users (IRCv3 TAGMSG)
  • User list with status symbols (@, +, etc.)
  • Topic display and editing
  • Auto-reconnect on connection loss
  • Responsive design for mobile and desktop

Technology Stack

Backend Framework Jakarta EE / Java Servlets
Frontend Language JavaScript ES6+ / ECMAScript 2015+
Data Format JSON for WebSocket messages
Web Standards HTML5, CSS3, WebSocket API

License & Copyright

MIT License

Copyright © 2024-2025 Andreas Pschorn

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.

Source code available at: github.com/WarPigs1602/jwebirc

Third-Party Acknowledgments

Getting Started

To connect to the IRC network:

  1. Enter your desired nickname on the login page
  2. Optionally specify channels to join (comma-separated)
  3. Complete any required CAPTCHA verification
  4. Click "Connect" to join the network

Once connected, you can use standard IRC commands like /join, /msg, /nick, and more.