MCPSERV.CLUB
Quassel IRC

Quassel IRC

Self-Hosted

Distributed, cross‑platform IRC client with detachable core

Stale(65)
751stars
0views
Updated Jul 5, 2025

Overview

Discover what makes Quassel IRC powerful

Quassel IRC is a distributed, cross‑platform IRC client that decouples the *core*—the stateful server handling network connections—from lightweight *clients* that can attach and detach at will. From a developer’s standpoint this means a single authoritative process that persists user identities, channel buffers, and preferences in a relational database while any number of Qt‑based GUI clients (desktop or Android) can reconnect without losing context. The architecture follows a classic client‑server pattern but introduces an internal event bus that serialises IRC events, allowing the core to act as a proxy for multiple network connections and to expose a clean, version‑ed API to clients.

Language & Framework

Database

Networking

Build & CI

Overview

Quassel IRC is a distributed, cross‑platform IRC client that decouples the core—the stateful server handling network connections—from lightweight clients that can attach and detach at will. From a developer’s standpoint this means a single authoritative process that persists user identities, channel buffers, and preferences in a relational database while any number of Qt‑based GUI clients (desktop or Android) can reconnect without losing context. The architecture follows a classic client‑server pattern but introduces an internal event bus that serialises IRC events, allowing the core to act as a proxy for multiple network connections and to expose a clean, version‑ed API to clients.

Technical Stack

  • Language & Framework: The core and GUI are written in C++ using Qt 5/6, which provides cross‑platform UI widgets, networking primitives, and an asynchronous event loop. Qt’s signal/slot mechanism underpins the communication between core modules.
  • Database: Persistent data is stored in a SQL database; supported backends include SQLite for single‑user setups and PostgreSQL/MySQL for multi‑tenant deployments. The schema is exposed through an ORM‑like layer in the core, enabling developers to query and manipulate user data programmatically.
  • Networking: IRC traffic is handled via Qt’s QTcpSocket and QSslSocket, giving native TLS support. The core implements the IRC protocol stack itself, exposing a JSON‑over‑TCP API to clients for state synchronization.
  • Build & CI: The project uses CMake for cross‑platform builds and GitHub Actions for continuous integration, ensuring that all supported OSes receive automated test coverage.

Core Capabilities

  • Session Persistence: The core maintains a full IRC session state; clients can reconnect without rejoining channels or restoring message history.
  • User & Permission Model: Multiple users can share a core instance. The admin CLI (quasselcore --add-user, --change-userpass) allows programmatic user management.
  • Event Hooks: Developers can tap into IRC events via the core’s signal/slot system or by implementing custom modules that listen to QMetaObject::invokeMethod calls. This facilitates building bots or automated responders.
  • Plugin Architecture: The core exposes a plugin interface that can be extended in C++ or via Python bindings (via PyQt). Plugins can add new UI panels, modify message rendering, or inject custom IRC commands.

Deployment & Infrastructure

Quassel is designed for self‑hosting. The core runs as a daemon on Linux, Windows, or macOS, and can be containerised with Docker—an official quassel/core image is available on Docker Hub. For high‑availability, the core can be replicated behind a load balancer; each replica shares the same database to keep state in sync. Scaling is primarily limited by the database connection pool and the number of concurrent IRC connections; PostgreSQL can comfortably handle hundreds of users, while SQLite is best suited for single‑user or low‑traffic deployments.

Integration & Extensibility

  • Webhooks: The core can emit webhook events (e.g., on user join/part) that external services can consume, enabling integration with monitoring dashboards or chatops tools.
  • REST API: While the primary interface is socket‑based, a thin REST wrapper can be added to expose user statistics or trigger core actions from external scripts.
  • Custom UI: Since the client is an open‑source Qt application, developers can fork and recompile with additional widgets or themes. The modular design means new tabs or message formatters can be added without touching the core.

Developer Experience

The project maintains comprehensive documentation on its wiki, covering API usage, database schema, and plugin development guides. The community is active in the Libera Chat channel #quassel, and issue tracking on Bugzilla ensures that feature requests and bugs are addressed promptly. Licensing under GPLv3 guarantees freedom to modify, redistribute, or embed the code in proprietary products with copyleft obligations.

Use Cases

  • Enterprise Chat Infrastructure: Organizations can host a single Quassel core for all employees, ensuring consistent channel state across devices and enabling audit logs via the database.
  • Bot Development: The event hook system allows developers to write IRC bots that run as core plugins, benefiting from persistent connection handling and low overhead.
  • Educational Platforms: Universities can deploy Quassel for teaching networking concepts, giving students a graphical client that connects to a shared core.

Advantages

Quassel’s distributed model offers performance benefits over monolithic clients: the core handles network I/O once, while lightweight clients consume only UI updates. Its GPL license and open‑source code base provide full transparency, while the Qt stack ensures rapid cross‑platform development. Compared to other IRC solutions (e.g., WeeChat with screen), Quassel delivers a richer GUI without sacrificing the detach/attach semantics that power advanced workflows.

Open SourceReady to get started?

Join the community and start self-hosting Quassel IRC today