---
title: "Deploy The Lounge"
description: "Web IRC client that stays connected for you on every device"
category: "Other"
url: https://railway.com/deploy/thelounge
---

# Deploy The Lounge

Web IRC client that stays connected for you on every device

**[Deploy The Lounge on Railway](https://railway.com/template/thelounge)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/thelounge/manifest.json

- **Creator:** A3A
- **Category:** Other
- **Total deploys:** 1

## Template content

### thelounge https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/thelounge.svg

- **Source:** https://github.com/gridalpha/thelounge-railway
- **Health check:** /
- **Public domain:** Yes

## Documentation

# Deploy and Host The Lounge on Railway

The Lounge is a self-hosted web IRC client that stays connected to your networks whether or not a browser is open. Deploy The Lounge on Railway and you get the always-on behaviour people used to run a separate bouncer for, wrapped in a modern web interface: open the URL on a laptop or a phone and you resume the same session, with the same channels, nick and scrollback. It is the maintained successor to Shout, it is MIT licensed, and it is what most open-source communities reach for when they want IRC to behave like a normal chat app.

This template runs one Railway service, `thelounge`, built from the [gridalpha/thelounge-railway](https://github.com/gridalpha/thelounge-railway) repository on top of the official `thelounge/thelounge` image. Browser traffic reaches it over HTTPS on a Railway domain, the service opens outbound TLS connections to whichever IRC networks you add, and all state — accounts, channel history in SQLite, uploads and preview thumbnails — lives on one volume at `/var/opt/thelounge`. Self-host The Lounge here and the whole deployment is a container plus a disk.

![Diagram of The Lounge service and its volume on Railway](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789376683/thelounge-architecture.webp)

## Getting Started with The Lounge on Railway

Set `THELOUNGE_PASSWORD` before you deploy — it is the one value the template needs. On the first boot the container creates the account named by `THELOUNGE_USER` (`admin` by default) with that password, before the web server starts listening, so the instance is never briefly claimable by a stranger. Open the Railway URL and sign in. You land on the Connect form, pre-filled from the service variables: OFTC on `irc.oftc.net:6697` over TLS, a nick like `thelounge42`, and an empty channel list. Set your usual nick, list your channels, press Connect, and within seconds the sidebar shows the network and the welcome text appears. Type in a channel to confirm the round trip — the IRC server echoes your line back, which proves the connection rather than just the page — then reload the page and watch the history return from the SQLite store, confirming the volume is mounted. Change your password later under **Settings → Change password**; the boot-time step never touches an existing account.

![The Lounge connect form pre-filled with OFTC server settings](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789376687/thelounge-connect-network.webp)

![The Lounge showing the OFTC network welcome message after connecting](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789376689/thelounge-oftc-connected.webp)

![An IRC channel in The Lounge with topic, messages and member list](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789376690/thelounge-channel-conversation.webp)

## About Hosting The Lounge

IRC has no concept of a message you missed: close your client and the conversation carries on without you, which is why its regular users have always run something that stays connected for them. The Lounge is that something and the client at once — a Node.js server holding the IRC sockets, recording history, and serving a web UI to every device you sign in from.

Key features:

- Always-on connections, so you never miss channel activity while your laptop is shut
- One account across devices — desktop, tablet and phone share one live session
- Searchable SQLite history with a retention policy you control
- Multi-user, so a small team can share one instance with separate accounts
- File uploads, link previews, push notifications, themes, SASL and client certificates

One process holds both the IRC connections and the client state, so the deployment is deliberately a single service with everything durable on its volume.

## Why Deploy The Lounge on Railway

Railway removes the parts of self-hosting IRC that have nothing to do with IRC:

- HTTPS and a public domain are issued for you, WebSockets working out of the box
- The volume is mounted before the first boot, so history persists immediately
- Your account is created from two variables — no shell, no CLI step
- Redeploys pull the current release without touching your data
- Logs, metrics and restarts are a click away instead of an SSH session away

## Common Use Cases

- Keeping a presence in project channels on OFTC, Libera.Chat or hackint with nothing running at home
- Giving a small team browser access to IRC support channels, an account each, no client installs
- Reading IRC from a phone, where native clients drop connections whenever the screen sleeps
- Replacing a ZNC-plus-desktop-client setup with one service that is both bouncer and client

## Dependencies for The Lounge

- `thelounge` — the app, built from [gridalpha/thelounge-railway](https://github.com/gridalpha/thelounge-railway) on the official [`thelounge/thelounge`](https://hub.docker.com/r/thelounge/thelounge) image (4.5.2, Node.js 22)
- A Railway volume at `/var/opt/thelounge` for accounts, SQLite history, uploads and cached previews
- Outbound access to the IRC servers you connect to; no inbound ports beyond the web UI

The Lounge is configured by a JavaScript file rather than environment variables, so the repository ships a `config.js` that reads the variables below on every start. Change a variable, redeploy, and it applies.

### Environment Variables Reference

| Variable | Default | What it does |
|---|---|---|
| `THELOUNGE_USER` | `admin` | Account created on the first boot |
| `THELOUNGE_PASSWORD` | — | Its password; required on the first boot |
| `THELOUNGE_PUBLIC` | `false` | `true` drops accounts; visitors get anonymous sessions |
| `THELOUNGE_FILE_UPLOAD` | `true` | Let signed-in users upload files |
| `THELOUNGE_PREFETCH` | `false` | Fetch link previews for URLs posted in channels |
| `THELOUNGE_LOG_MAX_AGE_DAYS` | `30` | How long stored history is kept |
| `THELOUNGE_LOG_DELETION_POLICY` | `statusOnly` | Prune joins and modes only, or everything |
| `THELOUNGE_NETWORK_HOST` | `irc.oftc.net` | Server pre-filled on the Connect form |
| `THELOUNGE_NETWORK_JOIN` | empty | Channels joined automatically on connect |
| `THELOUNGE_NETWORK_SASL_ACCOUNT` | empty | SASL account, for networks that require it |

### Deployment Dependencies

- Source repository: 
- Upstream project and docs: , 
- Container image: 

## Hardware Requirements for Self-Hosting The Lounge

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 0.5 vCPU | 1 vCPU |
| RAM | 256 MB | 512 MB–1 GB |
| Storage | 1 GB volume | 5 GB volume |
| Runtime | Node.js 18 | Node.js 22 (shipped in the image) |

One user in a handful of channels sits under 200 MB of memory. Raise RAM for many networks or a large `THELOUNGE_MAX_HISTORY`, storage if you keep years of logs.

## Self-Hosting The Lounge

Outside Railway, the quickest route is the official image with a named volume:

```
docker run -d --name thelounge \
  -p 9000:9000 \
  -v thelounge-data:/var/opt/thelounge \
  thelounge/thelounge:latest
```

It starts in private mode with no accounts, so create one before signing in — these commands add a user, then list the accounts that exist:

```
docker exec -it thelounge thelounge add myuser
docker exec -it thelounge thelounge list
```

Settings live in `config.js` inside that volume: `public`, `port`, `reverseProxy`, `fileUpload`, `messageStorage` and the `defaults` block behind the connect form. Behind any reverse proxy set `reverseProxy: true`, so client addresses and the HTTPS scheme come from the forwarded headers. An npm install (`npm install -g thelounge`, then `thelounge start`) behaves identically.

## How Much Does The Lounge Cost to Self-Host?

The Lounge is free and open source under the MIT licence — no paid edition, no seat limit, nothing gated behind a subscription — so the only cost is the infrastructure underneath. On Railway that is one small container and a volume, against roughly $6 per user per month for IRCCloud, the best-known managed alternative. Compared with a ZNC bouncer, which is also free, you get the web client in the same service instead of bringing your own.

## FAQ

**What is The Lounge?**

A self-hosted, always-on web IRC client written in Node.js. It holds your IRC connections on the server, stores history, and serves a web interface you can open from any device.

**What does this Railway template deploy?**

One service named `thelounge` with a public HTTPS domain, a health check and a volume at `/var/opt/thelounge` for accounts, history and uploads.

**Why does the template include a volume instead of a database?**

It keeps everything on disk — accounts as JSON files, history as one SQLite file per user. A volume is all it needs, and without one every redeploy would start empty.

**Do I need to run an IRC server as well?**

No. The Lounge is a client: it connects out to networks such as OFTC, Libera.Chat or hackint, and you can add as many as you like from the interface.

**How do I connect to Libera.Chat from this deployment?**

Libera.Chat requires SASL against a registered nick with a verified email for connections from hosting providers, which any cloud deployment is. Register a nick, then set `THELOUNGE_NETWORK_HOST` to `irc.libera.chat` plus `THELOUNGE_NETWORK_SASL_ACCOUNT` and `THELOUNGE_NETWORK_SASL_PASSWORD`. The template defaults to OFTC, which does not require it.

**How do I keep the volume from filling up with logs?**

`THELOUNGE_LOG_MAX_AGE_DAYS` sets the retention window and `THELOUNGE_LOG_DELETION_POLICY` decides what is pruned — `statusOnly` drops joins, parts and modes, `everything` removes old messages too.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/thelounge
