About
jWebIRC brings IRC into the modern browser era with a clean, responsive UI and a robust Jakarta EE backend. It is designed for operators who want a deployable webchat with production-ready features such as WEBIRC/CGIIRC, SASL authentication, IRCv3 capability negotiation, CAPTCHA protection, and an independent plugin system. All preferences are persisted in browser localStorage, and the interface adapts to desktop and mobile devices.
For detailed documentation, see jwebirc/README.md.
Key Features
Real-Time Chat
WebSocket-based communication with multi-channel support, private messages, and automatic session handling.
Gateway Support
WEBIRC/CGIIRC (RFC 7194) support with proper IP forwarding and optional :secure flag for encrypted connections.
Authentication
Optional SASL support with PLAIN, SCRAM-SHA-256, and SCRAM-SHA-512 mechanisms.
IRCv3 Ready
Negotiates modern server capabilities including message-tags, account-notify, batch, server-time, and more.
CTCP Support
Full CTCP support including VERSION, TIME, PING, FINGER, USERINFO, SOURCE, and CLIENTINFO.
Bot Protection
Multiple CAPTCHA options: Cloudflare Turnstile, Google reCAPTCHA v2/v3, and reCAPTCHA Enterprise.
Customizable UI
Adjustable font size, hue rotation, hide topic/nicklist toggles, and sidebar mode. All saved to localStorage.
Plugin System
Independent frontend plugin architecture with safe loading and per-plugin assets.
Embeddable
Embed the webchat via iframe with configurable domain restrictions and preset nicknames/channels.
Operator Safety
Protected kick/ban logic prevents operators from targeting users with equal or higher channel status.
Responsive Design
Bootstrap-based layout that works on desktop and mobile devices out of the box.
SSL/TLS
Connect to IRC servers over TLS with full certificate validation and secure connection robustness.
Technology Stack
Backend
Jakarta EE 11 with WebSocket API, Servlets, and JSP for dynamic pages.
Frontend
JavaScript ES6+, jQuery, and Bootstrap 5 for a responsive user interface.
Build
Maven-based build producing a deployable WAR package.
Runtime
Compatible with Jakarta EE 11 application servers such as GlassFish, Payara, and TomEE.
Quick Start
The fastest way to try jWebIRC is to download the precompiled WAR and deploy it to your Jakarta EE server. For a production-ready setup, use server-managed context parameters so your configuration survives WAR upgrades.
Option A: Precompiled WAR
- Download jwebirc.war
- Deploy to your server:
- GlassFish / Payara: copy to
domains/domain1/autodeploy/ - TomEE: copy to
webapps/
- GlassFish / Payara: copy to
- Open
http://localhost:8080/jwebirc/
Option B: Build from Source
cd jwebirc
mvn -f web/WEB-INF/pom.xml clean package
Then deploy jwebirc/target/jwebirc.war and open http://localhost:8080/jwebirc/.
Prerequisites
- JDK 21 or higher
- Jakarta EE 11 compatible application server
- Maven 3.9+
See the Jakarta EE Integration notes for version compatibility details.
Recent Changes & Bug Fixes
SSL/TLS Connection Robustness (May 2026)
SSL flag parsing now uses case-insensitive comparison with null-safety.
Accepts "true", "1", "yes" (case-insensitive) and handles null/whitespace safely.
This prevents silent fallback to plaintext and improves TLS connection reliability for UnrealIRCD, InspIRCd, and similar servers.
RFC 7194 WEBIRC :secure Flag Support (May 2026)
Added optional :secure flag support via jwebirc.webircIncludeSecure (default: true).
When TLS is active, the WEBIRC command now appends :secure, improving encryption status reporting
in server logs and user visibility on modern IRC daemons.
IRCv3 Features
jWebIRC negotiates IRCv3 capabilities with CAP LS 302 and requests supported features only when advertised.
- capability-negotiation
- sasl
- message-tags
- account-notify
- away-notify
- batch
- cap-notify
- chghost
- extended-join
- invite-notify
- labeled-response
- multi-prefix
- server-time
- userhost-in-names
Nick Prefixes & Emoji Mapping
jWebIRC maps IRC channel status prefixes to role emojis in the nicklist and adapts automatically from the server welcome.
Mode: a → Prefix: & → 🛡️ Admin / Protected
Mode: o → Prefix: @ → ⭐ Operator
Mode: h → Prefix: % → ⚡ Half-Op
Mode: v → Prefix: + → 💬 Voice