# ReflectionIRCd ReflectionIRCd is an IRCd that interfaces with 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, no testing or error checking, lots of bugs, etc. That said, it is usable for basic chatting. ## 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 ## Feature support ✅ - Implemented 🟨 - Partially implemented, see notes ❌ - Not implemented yet ⬜ - Not applicable (IRCv3) denotes IRC features that might not be available in all clients | Name | M->I | I->M | Notes | | ---- | :--: | :--: | ----- | | text, notice, emote messages | ✅ | ✅ || | image, file, audio, video messages | 🟨 | ⬜ | Show up as links on IRC | | Channel joins | ✅ | ❌ || | Channel parts | ✅ | ✅ || | Channel kicks | ✅ | ✅ || | Channel bans | 🟨 | ❌ | Single-user bans show up on IRC as kicks, there's no banlist yet | | Channel invites | ✅ | ✅ || | Channel topics | ✅ | ✅ || | Channel powers | ✅ | ❌ || | Channel lists/searching | ⬜ | ❌ || | Encrypted rooms | ❌ | ⬜ || | Rich text | ❌ | ❌ || | Presence | ❌ | ❌ | Note that not all homeservers have presence enabled | | Channel renaming (IRCv3) | 🟨 | ❌ | Only when the canonical alias changes | | 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) | ✅ | ✅ || | Chat history (IRCv3) | ⬜ | ❌ || | Multiline messages (IRCv3) | ❌ | ❌ || | Global display names (IRCv3) | ❌ | ❌ || | Per-room display names (IRCv3) | ❌ | ❌ || | Message editing (IRCv3) | ❌ | ❌ || | Message deletion (IRCv3) | ❌ | ❌ || ## 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.