# ReflectionIRCd ReflectionIRCd is an IRCd that bridges Matrix, allowing you to use an IRC client to chat on Matrix. This is still in beta. 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; if you use a good IRC client, you won't have many problems. See the support matrix (pun intended) below for what it can do. The issue tracker is here: https://todo.sr.ht/~emerson/reflectionircd ## 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 ## Known major issues - Encrypted channels don't work. You'll join the channel but won't be able to read any messages - Homeservers must be available over HTTPS with a valid SSL cert. - You can't PM individual users. ## Notes for IRC users There's a few things "different" from a standard IRC network: - You can't PM users like normal. Direct messages are notated by the `&` channel prefix. Once joining channels is implemented, you can join the `&` channel and it will auto-invite the user. - In order to highlight users, you need to prefix their nick with an `@`, so `@emerson: hi`. Reflection automatically expands this to the user's MXID, so even though it's annoying, it's needed to stop inadvertent highlights for now. - Only necessary IRC commands are implemented, it's not a full-featured IRC server. ## 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. You can find this value by going to https://yourhomeserver.tld/.well-known/matrix/server. If your server is using port 443, you don't need to include the port. ## Support The main chat is `#reflectionircd` on Libera ([webchat](https://web.libera.chat/gamja/?channel=#reflectionircd)), which is available on Matrix as well at [`#reflectionircd:matrix.org`](https://matrix.to/#/#reflectionircd:matrix.org) ## 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](https://github.com/hifi/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 | ✅ | ✅ || | image, file, audio, video messages | 🟨 | ❌ | Show up as links on IRC | | Channel joins | ✅ | ❌ | [#1](https://todo.sr.ht/~emerson/reflectionircd/1) | | Channel parts | ✅ | ✅ || | Channel kicks | ✅ | ✅ || | Channel bans | 🟨 | ❌ | [#24](https://todo.sr.ht/~emerson/reflectionircd/24) Single-user bans show up on IRC as kicks, there's no banlist yet | | Channel invites | ✅ | ✅ || | Channel topics | ✅ | ✅ || | Channel powers | ✅ | ❌ | [#6](https://todo.sr.ht/~emerson/reflectionircd/6) | | Channel lists/searching | ❌ | ❌ | [#30](https://todo.sr.ht/~emerson/reflectionircd/30) | | Encrypted rooms | ❌ | ❌ | [#20](https://todo.sr.ht/~emerson/reflectionircd/20) | | Rich text | ❌ | ❌ | [#31](https://todo.sr.ht/~emerson/reflectionircd/31) | | Presence | ❌ | ❌ | [#25](https://todo.sr.ht/~emerson/reflectionircd/25) Note that not all homeservers have presence enabled | | Channel renaming (IRCv3) | ✅ | ❌ | [#16](https://todo.sr.ht/~emerson/reflectionircd/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](https://todo.sr.ht/~emerson/reflectionircd/26) | | Chat history (IRCv3) | ❌ | ❌ | [#9](https://todo.sr.ht/~emerson/reflectionircd/9) | | Multiline messages (IRCv3) | ❌ | ❌ | [#10](https://todo.sr.ht/~emerson/reflectionircd/10) | | Global display names (IRCv3) | ❌ | ❌ | [#11](https://todo.sr.ht/~emerson/reflectionircd/11) | | Per-room display names (IRCv3) | ❌ | ❌ | [#13](https://todo.sr.ht/~emerson/reflectionircd/13) | | Message editing (IRCv3) | ❌ | ❌ | [#14](https://todo.sr.ht/~emerson/reflectionircd/14) | | Message deletion/redaction (IRCv3) | ❌ | ❌ | [#14](https://todo.sr.ht/~emerson/reflectionircd/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. You can find this value by going to https://yourhomeserver.tld/.well-known/matrix/server. ## Support The main chat is `#reflectionircd` on Libera ([webchat](https://web.libera.chat/gamja/?channel=#reflectionircd)), which is available on Matrix as well at [`#reflectionircd:matrix.org`](https://matrix.to/#/#reflectionircd:matrix.org)