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](#feature-support) (pun intended) for what it can do. The issue tracker is here: https://todo.sr.ht/~emerson/reflectionircd
Copy `config.example.json` to `config.json`, and edit the values:
*`serverName` is the name of the IRC server
*`port` is the listening port of the server
*`certFile` and `keyFile` are the SSL cert and key for Reflection to use
*`lazyLoadLimit` is the limit for "lazy load" mode. In lazy load mode, only room members with PL > 0 are shown right away, everyone else is joined once they send an event to the room. This prevents clients crashing or lagging on large rooms.
*`mxid` is the MXID of your Matrix user
*`homeserver` is the URL of your homeserver. You get this value in Element by going to Settings > Help and About > Advanced
*`accessToken` is the access token to use. You get this value underneath the homserver URL in Element.
*`saslPassword` is the SASL password to use when connecting to Reflection
Then `npm ci`, `npm run build`, and `node reflection.js config.json` (replace `config.json` if you named your config differently). You'll see a message about starting initial sync, and then "Synced to network!". Once it's synced, you can connect with your client, specifying the SASL password you put in the config (SASL username doesn't matter).
* Encrypted rooms don't work. In theory you can use [pantalaimon](https://github.com/matrix-org/pantalaimon), however I haven't tried it yet.
* You can't `/JOIN` channels. However, if you join a channel via Element (other clients are available), it will auto-join your IRC client to it.
* You can't open a PM to individual users, since a "PM" in Matrix is just another room, and you can't join rooms from IRC yet.
* There's no IRC equivalent to Spaces. Since they are just regular rooms, they show up in IRC as just regular rooms.
* 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.
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 server for IRCv3 specifications.
If you have `server-time` enabled on your client, you might find messages arriving late or out of order. Similarly, if you're joined to the same channel from different homeservers, you may see messages appear on one several minutes/hours before the other(s). This is called "federation", and is considered a feature of Matrix.
### Does IRC actually support all of these cool new features?
In theory, yes. In reality, no. There's currently no free, standalone IRC client that supports reactions, replies, editing/deleting messages, and channel renaming. But one day they might, and when they do, Reflection will be ready to help them in their quest for world domination.
### What does "Sync is lagging" mean?
The matrix sync is set with a timeout of 15 seconds. The server is supposed to return an HTTP response after 15 seconds (if not sooner). If the server doesn't respond after 20 seconds, that message is printed to the console to warn you that the homeserver is lagging.
### Why is there a random JSON object in my console?
That means you were sent an event type that I didn't know existed. Please hop into [the chat](#support) and tell me what the `type` value is.
## Support
The main chat is `#reflectionircd` on Libera ([webchat](https://web.libera.chat/gamja/?channel=#reflectionircd)), which is available on Matrix at [`#reflectionircd:matrix.org`](https://matrix.to/#/#reflectionircd:matrix.org). Testing channels are `#reflectionircd-test` on Libera, `#reflectionircd-test:matrix.org` (portal to Libera), and `#reflection-matrix-test:matrix.org` (not linked to IRC). Please test in the testing channels and not in the main channel.
On Libera I'm `emerson`, on Matrix I'm `@emersonveenstra:matrix.org`, feel free to ping me in the channel with any questions/bug reports/complaints.