How The Lounge fits in the stack
The Lounge runs as theatl-thelounge container and connects to UnrealIRCd over TLS on port 6697 using the internal Docker network (atl-chat). It depends on the atl-irc-server health check passing before it starts, ensuring UnrealIRCd is ready to accept connections.
The Lounge operates in private mode — there is no public registration. An administrator must create each user account via the just lounge add command. Once logged in, users get always-on IRC connectivity: The Lounge maintains the connection to UnrealIRCd even when the browser is closed, and messages are buffered for the next session.
WebIRC is configured so that UnrealIRCd sees each user’s real IP address instead of the container’s internal IP. The Lounge sends a WebIRC handshake (authenticated by a shared password from THELOUNGE_WEBIRC_PASSWORD) for every client connection. This means bans, cloaks, and connection limits apply per-user rather than per-container.
Private mode
The Lounge is configured withpublic: false in its config, which means:
- Users cannot self-register — an admin creates accounts with
just lounge add <name> - Each user has a persistent session tied to their account
- The Lounge stays connected to IRC on behalf of the user, even when the browser tab is closed
- Message history, highlights, and unread markers are preserved across sessions
Default connection settings
The Lounge’s config template (apps/thelounge/config.js.template) sets these defaults for every new user:
| Setting | Value | Notes |
|---|---|---|
| Server host | atl-irc-server | Docker service name, resolved via the atl-chat network |
| Port | 6697 | TLS-encrypted IRC |
| TLS | Enabled | Always on |
| Reject unauthorized certs | Configurable | Set via IRC_LOUNGE_REJECT_UNAUTHORIZED (typically false in dev for self-signed certs) |
| Default nick | atl%% | %% is replaced with a random number by The Lounge |
| Default channel | #help | Users auto-join this channel on first connect |
Plugins
The Lounge container installs two plugins at startup before launching the main process:| Plugin | Purpose | Usage |
|---|---|---|
thelounge-plugin-janitor | Automatically deletes uploaded files after a configurable interval | Controlled by THELOUNGE_DELETE_UPLOADS_AFTER_MINUTES (set in .env) |
thelounge-plugin-giphy | Adds a /giphy command for searching and posting GIFs | /giphy search <term> or /giphy random |
Data and volumes
The compose configuration mounts a single volume into The Lounge container:| Host path | Container path | Purpose |
|---|---|---|
data/thelounge/ | /var/opt/thelounge | All persistent data — config, user accounts, message logs, uploads |
data/thelounge/ directory is created by scripts/init.sh during just init. The Lounge’s generated config file, user database, and uploaded files all live here.
Technology
| Component | Technology |
|---|---|
| Software | The Lounge (latest) |
| Base image | ghcr.io/thelounge/thelounge:latest |
| Container name | atl-thelounge |
| Mode | Private (admin-managed accounts) |
| WebIRC | Enabled (shared password with UnrealIRCd) |
| IRC connection | TLS on port 6697 to atl-irc-server |
| Web interface | Port 9000 |
| Plugins | janitor (upload cleanup), giphy (GIF search) |
| Config management | Template substitution via scripts/prepare-config.sh |
| Network | atl-chat Docker network |
| User/group | Runs as ${PUID}:${PGID} (default 1000:1000) |
Related pages
- Configuration — config template, plugins, environment variables
- Operations — user management via
just loungecommands, log management - IRC Stack Overview — UnrealIRCd and the broader IRC stack
- IRC Configuration — UnrealIRCd config including WebIRC settings
- Environment Variables — all configurable variables including The Lounge settings