Libera-Chat / sable

GNU Affero General Public License v3.0
77 stars 8 forks source link

Sable, a chat server

Sable is an experimental chat server designed to address many of the fundamental limitations of legacy IRC server software. In particular:

Architecture

Things are still changing too much to draw a diagram here. The foundational principles are:

Some other design decisions which are not as fundamental but are worth mentioning:

Navigating the code

Currently, Sable is split into several crates:

Building Sable

  1. Install rust. The rust people say you should use rustup.
  2. Clone this repo.
  3. cargo build

Running Sable

There's a sample set of configs and certificates in the configs directory, which will run a network of two servers on 127.0.1.2 and 127.0.1.3, both using 6667 and 6697 for client connections, and 6668 for server linking. To run them:

./target/debug/sable_ircd -n configs/network.conf -s configs/server1.conf --bootstrap-network configs/network_config.json
./target/debug/sable_ircd -n configs/network.conf -s configs/server2.conf

There are two types of network configuration. At present, the list of nodes and their network addresses is static, and read only at startup. This is what's in the network.conf file, which should be shared between all server nodes. Runtime configuration currently consists of operator credentials, and is contained in a separate file (network_config.json in the examples). This can be loaded via the command line when bootstrapping a new network, or updated at runtime via the config_loader utility.