docs/specs | ||
src | ||
test | ||
.gitignore | ||
.tsconfig.json | ||
config.example.json | ||
LICENSE | ||
package-lock.json | ||
package.json | ||
README.md | ||
reflection.js | ||
reflection.key | ||
reflection.pem |
ReflectionIRCd
ReflectionIRCd is an IRCd that bridges Matrix, allowing you to use an IRC client to chat on Matrix.
This is very much not production-ready yet. There's console.log
s all over the place, an inadequate amount of testing and error/bounds checking, several bugs, etc.
That said, it is usable for basic chatting. See the support matrix (pun intended) below for what it can do.
Highlights
- IRC first: The goal is for modern IRC clients to have feature parity with any other Matrix client
- Standalone: Uses the Client-Server API, so you can use it with any homeserver
- Built-in bouncer: Multiple IRC clients can be authenticated to a Matrix user
- Multi-user: Log in to multiple Matrix users at the same time
FAQs
Who is this for?
It's for people who want to use their IRC client to chat on Matrix. It's like Bitlbee or Matterbridge, but focused specifically on IRC <-> Matrix, as well as being a reference client for IRCv3 specifications.
It's not meant for community use; if you are a homeserver admin and want to allow your users to use IRC, you would be better off with heisenbridge.
Why are there different channel prefixes?
Because matrix room names are often long and have characters that IRC channel names can't use, Reflection has to attempt to find a suitable IRC equivalent
#
channels are channels that have a canonical alias for us to use.
&
channels are two-person channels (either DMs or normal channels).
!
channels are the room IDs of channels whose names can't be converted into IRC-friendly names.
Note that there are no PMs, because Matrix doesn't differentiate between DMs and normal two-person channels, any channel with two people in it gets marked as a &
channel.
Feature support
✅ - Implemented
🟨 - Partially implemented, see notes
❌ - Not implemented yet
(IRCv3) denotes IRC features that might not be available in all clients
Name | M->I | I->M | Notes |
---|---|---|---|
text, notice, emote messages | ✅ | ✅ | Highlighting users with their IRC nick doesn't translate into highlighting their Matrix user #23 |
image, file, audio, video messages | 🟨 | ❌ | Show up as links on IRC |
Channel joins | ✅ | ❌ | #1 |
Channel parts | ✅ | ✅ | |
Channel kicks | ✅ | ✅ | |
Channel bans | 🟨 | ❌ | #24 Single-user bans show up on IRC as kicks, there's no banlist yet |
Channel invites | ✅ | ✅ | |
Channel topics | ✅ | ✅ | |
Channel powers | ✅ | ❌ | #6 |
Channel lists/searching | ❌ | ❌ | #30 |
Encrypted rooms | ❌ | ❌ | #20 |
Rich text | ❌ | ❌ | #31 |
Presence | ❌ | ❌ | #25 Note that not all homeservers have presence enabled |
Channel renaming (IRCv3) | ✅ | ❌ | #16 |
Message replies (IRCv3) | ✅ | ✅ | Clients without support will still receive the reply message, but it won't be marked as a reply |
Message reactions (IRCv3) | ✅ | ✅ | Can't undo reactions yet |
Extended invites (IRCv3) | ✅ | ✅ | |
Typing notifications (IRCv3) | ❌ | ❌ | #26 |
Chat history (IRCv3) | ❌ | ❌ | #9 |
Multiline messages (IRCv3) | ❌ | ❌ | #10 |
Global display names (IRCv3) | ❌ | ❌ | #11 |
Per-room display names (IRCv3) | ❌ | ❌ | #13 |
Message editing (IRCv3) | ❌ | ❌ | #14 |
Message deletion/redaction (IRCv3) | ❌ | ❌ | #14 |
Running
Copy config.example.json
to config.json
, edit the values if needed, then npm run build
and then node reflection.js
to start it
Authentication
Authentication is done via SASL PLAIN
, the username is your mxid and the password is an access token from another session plus your server domain, separated by a :
(so access_token:matrix.org
if your server is matrix.org). Note this is the domain for m.server
, not necessarily the homeserver domain.
Support
The main chat is #reflectionircd
on Libera (webchat), which is available on Matrix as well at #reflectionircd:matrix.org