forked from lavina/lavina
1
0
Fork 0
Multiprotocol chat server
Go to file
Nikita Vilunov 79d626330c load rooms at player actor start 2024-04-15 01:46:34 +02:00
.gitea/workflows apply uniform formatting 2024-03-20 19:59:15 +01:00
.run improve docs and split command handlers into methods (#40) 2024-03-26 16:26:31 +00:00
certs feat(xmpp): placeholder for xmpp projection and example of xml 2023-02-28 00:05:30 +01:00
crates load rooms at player actor start 2024-04-15 01:46:34 +02:00
dist read config path from cli args 2023-09-22 17:24:36 +02:00
docs Add message timestamps (#41) 2024-04-12 21:32:21 +00:00
src implement persistent memberships 2024-04-13 02:33:21 +02:00
.dockerignore bump version 2023-10-08 21:02:36 +02:00
.gitignore Update rust toolchain 2023-11-20 17:19:12 +01:00
.pre-commit-config.yaml Add message timestamps (#41) 2024-04-12 21:32:21 +00:00
Cargo.lock Add message timestamps (#41) 2024-04-12 21:32:21 +00:00
Cargo.toml update dependencies 2024-03-20 19:53:51 +01:00
config.toml storage module init 2023-08-05 00:06:48 +02:00
deny.toml disable tls support in sqlx, remove webpki-roots 2023-09-14 18:55:03 +02:00
readme.md update docs 2023-10-10 02:30:50 +02:00
rust-toolchain update dependencies 2024-03-20 19:53:51 +01:00
rustfmt.toml apply uniform formatting 2024-03-20 19:59:15 +01:00

readme.md

Lavina

Multiprotocol chat server based on open protocols.

Goals

Support for multiple open protocols

Federated protocols such as XMPP and Matrix aim to solve the problem of isolation between service providers. They allow people using one service provider to easily communicate with people using different providers, which is not possible with providers based on non-federated protocols, such as Telegram and WhatsApp.

Non-federated protocols also make it harder to bring a new provider into the market, as it will have a few users at first, which will not be able to communicate with their friends who use a different provider commonly known as a network effect.

Using a federated protocol does not solve the problem entirely, though, as it brings the network effect onto a higher level. Previously, we had XMPP as the only open federated protocol. Matrix was introduced in 2014 as a modern alternative. This fragmented the ecosystem, since users of Matrix cannot communicate with users of XMPP straightforwardly, creating a different sort of a network effect.

Lavina is an attempt to solve that problem. It is not a new protocol, but it's a way to make other protocols be interoperable between each other. Users of a Lavina service should be able to connect to their service using a client of any supported protocols, their service should federate with other services using any supported protocols.

Products should compete with each other on basis of technical merit and not network effects.

Scaling down, up and wide

Federated services are being run by communities and companies of various sizes and scales this ranges from tiniest single-person servers to large communities with thousands of active users to global corporations with billions of concurrent connections.

  1. Scale down we should support running the software on low-level hardware such as Raspberry Pi or single-core VPS. This is important for costs saving of smaller sized instances.
  2. Scale up we should utilize available resources of more powerful machines in a fair and efficient manner. This includes multiple CPUs, increased RAM and storage, network bandwidth.
  3. Scale wide the most complex property to implement, we should support running the service as a distributed cluster of instances, which efficiently schedule the load and balance connections across themselves.

Clustered setup may additionally provide support for data replicas for additional reliability and improved read scaling. It should also consider data locality so as not to introduce additional network hops, which may result in multiple cross-AZ/DC data transfers in scope of a single request.