Skip to content

LordBex/thelounge

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8,117 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

The Lounge

Moderner, selbst gehosteter Web-IRC-Client β€” mit FiSH-VerschlΓΌsselung, DH1080-Key-Exchange, FTP-Invites und mehr

Upstream-Website β€’ Upstream-Docs β€’ Docker

Build Status

πŸ‡©πŸ‡ͺ Deutsch


About this fork

This is a fork of The Lounge (@lordbex/thelounge) that adds a set of "old-school" IRC power-user features on top of the modern, self-hosted web client:

  • πŸ” FiSH (Blowfish) encryption for channels and private queries β€” ECB and CBC modes, compatible with mIRC, HexChat, WeeChat and other FiSH clients.
  • 🀝 DH1080 key exchange β€” automatically negotiate a shared Blowfish key with another user directly inside a private message, no manual key sharing required.
  • πŸ“ FTP invites β€” send FTP SITE INVITE commands to your own FTP server straight from IRC, with optional auto-invite on connect.
  • 🌍 Per-nick character encoding β€” decode messages from individual users with a specific charset (utf8, latin1, cp1252, …).
  • 🌈 Rainbow text and a few extra convenience commands (/mute, /unmute).

Everything The Lounge already offers stays intact; the features above are additive and individually toggleable from the server config.

⚠️ Security note: FiSH/Blowfish and DH1080 are legacy IRC schemes. DH1080 in particular has no authentication of the other party, so it is vulnerable to man-in-the-middle attacks. Treat these features as obfuscation / casual privacy against passive observers, not as strong end-to-end encryption.

Feature overview (upstream)

  • Modern features brought to IRC. Push notifications, link previews, new message markers, and more bring IRC to the 21st century.
  • Always connected. Remains connected to IRC servers while you are offline.
  • Cross platform. It doesn't matter what OS you use, it just works wherever Node.js runs.
  • Responsive interface. The client works smoothly on every desktop, smartphone and tablet.
  • Synchronized experience. Always resume where you left off no matter what device.

To learn more about the base configuration, usage and features of The Lounge, take a look at the upstream website.

The Lounge is the official and community-managed fork of Shout, by Mattias Erming.

πŸ” FiSH (Blowfish) encryption

FiSH encrypts the message text of channel and query messages using Blowfish, encoded in the classic FiSH base64 alphabet so it interoperates with traditional IRC clients.

Modes

Mode Notes
ECB Default. Maximum compatibility with old clients. Weaker (no IV).
CBC Recommended. Uses a random IV per message. Both sides must support it.

/blow command

/blow                      Show the current key status for this channel/query
/blow <key>                Set an encryption key (defaults to ECB mode)
/blow <key> ecb            Set a key and force ECB mode
/blow <key> cbc            Set a key and force CBC mode
/blow off                  Clear the key for this channel/query
/blow clear                Alias for /blow off

The key is stored per target (channel name or nick) and persists across restarts. Outgoing messages are encrypted automatically and incoming encrypted messages are decrypted transparently when a key is present.

Configuring keys in the UI

Open Network settings β†’ FiSH (Blowfish). There you can set:

  • Global key + mode β€” a default key applied to the whole network.
  • Per-channel / per-user keys β€” a table of #channel or nick β†’ key β†’ mode entries.

Enabling the feature

In your server config.js:

fish: {
    enabled: true,
    allowKeyExchange: true,
},

When fish.enabled is false, the FiSH UI section is hidden, the /blow command is rejected, and all encrypt/decrypt steps are skipped.

🀝 DH1080 key exchange (in a private message)

Instead of sharing a Blowfish key out-of-band, you can negotiate one automatically with another user using the DH1080 Diffie-Hellman key exchange. This is the standard scheme implemented by WeeChat's fish.py, mIRC FiSH, etc., so it works cross-client.

/keyexchange command

/keyexchange <nick>            Start a key exchange with <nick> (ECB mode)
/keyexchange ecb <nick>        Start an exchange, request ECB mode
/keyexchange cbc <nick>        Start an exchange, request CBC mode
/ke <nick>                     Short alias for /keyexchange

How it works

  1. You run /ke <nick> (or with a mode). The client generates a DH keypair and sends a DH1080_INIT notice to the other user.
  2. Their client replies with DH1080_FINISH containing their public key.
  3. Both sides derive the same shared secret, which becomes the Blowfish key for your private query with that nick β€” automatically, no copy-pasting.
  4. The raw DH1080_INIT / DH1080_FINISH notices are hidden from the chat; you only see a confirmation message.
  5. If no response arrives within 2 minutes, the pending exchange times out and is discarded.

The negotiated mode (ECB/CBC) is honoured on both ends β€” requesting CBC appends a CBC marker that compatible clients understand.

Requirements

  • fish.enabled: true and fish.allowKeyExchange: true in config.js.
  • An active connection to the IRC network.

⚠️ DH1080 has no identity verification. An attacker who can intercept and rewrite your notices can sit in the middle of the exchange. Use it accordingly.

πŸ“ FTP invites

Send FTP SITE INVITE commands to an FTP server directly from IRC β€” handy for private file-sharing channels that gate access through an FTP whitelist.

Commands

/ftp status                Show whether FTP invites are enabled and the configured host
/ftp test                  Send a test invite for your own current nick
/ftpinvite                 Send an FTP invite for your own nick
/ftpinvite <username>      Send an FTP invite for a specific username

Configuring per network

Open Network settings β†’ FTP Invite and enable it, then set:

  • FTP Host, FTP Port (default 21)
  • FTP Username, FTP Password
  • Use FTP over explicit TLS (FTPS) toggle

When enabled, the client can also auto-send an invite on connect (before joining channels).

Enabling the feature

ftpInvite: {
    enabled: true,
},

When disabled, the FTP UI section is hidden and the /ftp / /ftpinvite commands are rejected.

🌍 Per-nick character encoding

Some users send messages in a non-UTF-8 charset. You can override decoding on a per-nick basis. Any encoding supported by iconv-lite is valid.

Commands

/encoding                      List all configured per-nick encodings
/encoding <nick>               Show the current encoding for <nick>
/encoding <nick> <encoding>    Set an encoding (e.g. utf8, latin1, cp1252, iso-8859-2, cp437)
/encoding <nick> auto          Reset <nick> back to auto-detection

Enabling the feature

encoding: {
    enabled: true,
},

🌈 Extra convenience commands

/rainbow <text>            Send <text> as colourful rainbow-coloured IRC text
/rgb <text>                Alias for /rainbow
/mute [#chan ...]          Mute the current channel, or the listed channels/queries
/unmute [#chan ...]        Unmute the current channel, or the listed channels/queries

/mute and /unmute work even while disconnected and persist across restarts.

Command quick reference

Command Aliases Purpose
/blow β€” Set / clear / show a FiSH Blowfish key
/keyexchange /ke DH1080 key exchange with a user
/ftp β€” Show FTP status / send a test invite
/ftpinvite β€” Send an FTP SITE INVITE
/encoding β€” Set a per-nick character encoding
/rainbow /rgb Send rainbow-coloured text
/mute β€” Mute a channel or query
/unmute β€” Unmute a channel or query

In addition, all standard The Lounge commands remain available, including /away, /ban, /connect, /ctcp, /disconnect, /ignore, /ignorelist, /invite, /join, /kick, /kill, /list, /mode, /msg, /nick, /notice, /part, /quit, /raw, /rejoin, /topic, /whois, plus the client-side /collapse, /expand and /search.

Installation and usage

The Lounge requires Node.js v24.11.1 or newer (Node.js v24 LTS or v25+ recommended). The Yarn package manager v4.11.0+ is also recommended. If you want to install with npm, --unsafe-perm is required for a correct install.

Running stable releases

Please refer to the install and upgrade documentation on the upstream website for all available installation methods. A Docker image for this fork is available at LordBex/thelounge-docker.

Running from source

The following commands install and run the development version of this fork:

git clone https://github.com/LordBex/thelounge.git
cd thelounge
yarn install
NODE_ENV=production yarn build
yarn start

When installed like this, the thelounge executable is not created. Use node index <command> to run commands.

After the first start, edit your config.js (in the configured THELOUNGE_HOME) to turn the fork features on or off:

fish:       { enabled: true, allowKeyExchange: true },
ftpInvite:  { enabled: true },
encoding:   { enabled: true },

⚠️ While it is the most recent codebase, this is not production-ready! Run at your own risk. It is also not recommended to run this as root.

Development setup

Simply follow the instructions to run The Lounge from source above, on your own fork.

Before submitting any change, make sure to:

  • Read the Contributing instructions
  • Run yarn test to execute linters and the test suite
    • Run yarn format:prettier if linting fails
  • Run yarn build:client if you change or add anything in client/js or client/components
    • The built files will be output to public/ by webpack
  • Run yarn build:server if you change anything in server/
    • The built files will be output to dist/ by tsc
  • yarn dev can be used to start The Lounge with hot module reloading

To ensure that you don't commit files that fail the linting, you can install a pre-commit git hook. Execute yarn githooks-install to do so.

Credits & license

This fork builds on The Lounge and inherits its license (see LICENSE). The DH1080 implementation is ported from WeeChat's fish.py by Bjorn Edstrom. See CREDITS.md for the full list of contributors to the upstream project.

About

πŸ’¬ β€Ž Modern, responsive, cross-platform, self-hosted web IRC client

Resources

License

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages

  • TypeScript 41.7%
  • CSS 37.0%
  • Vue 17.1%
  • JavaScript 4.0%
  • Go Template 0.2%
  • Shell 0.0%