GitHub - stoatchat/stoatchat: The software powering Stoat

Minimum Supported Rust Version

Rust 1.86.0 or higher.

Development Guide

Before contributing, make yourself familiar with our contribution guidelines and the technical documentation for this project.

Before getting started, you'll want to install:

  • mise
  • Docker
  • Git
  • mold (optional, faster compilation)

A default.nix is available for Nix users! Run nix-shell to activate mise.

As a heads-up, the development environment uses the following ports:

Service Port
MongoDB 27017
Redis 6379
MinIO 14009
Maildev 14025
14080
Revolt Web App 14701
RabbitMQ 5672
15672
crates/delta 14702
crates/bonfire 14703
crates/services/autumn 14704
crates/services/january 14705
crates/services/gifbox 14706

Now you can clone and build the project:

git clone https://github.com/stoatchat/stoatchat stoat-backend
cd stoat-backend
mise install
mise build

Tip

You can override BUILDER in your .env file to run cargo with mold if you installed it:

# .env
BUILDER = "mold --run cargo"

A default configuration Revolt.toml is present in this project that is suited for development.

If you'd like to change anything, create a Revolt.overrides.toml file and specify relevant variables.

Tip

Use Sentry to catch unexpected service errors:

# Revolt.overrides.toml
[sentry]
api = "https://abc@your.sentry/1"
events = "https://abc@your.sentry/1"
files = "https://abc@your.sentry/1"
proxy = "https://abc@your.sentry/1"

Tip

If you have port conflicts on common services, you can try the following:

# compose.override.yml
services:
  redis:
    ports: !override
      - "14079:6379"

  database:
    ports: !override
      - "14017:27017"

  rabbit:
    ports: !override
      - "14072:5672"
      - "14672:15672"

With the corresponding Revolt configuration:

#     Revolt.overrides.toml
# and Revolt.test-overrides.toml
[database]
mongodb = "mongodb://127.0.0.1:14017"
redis = "redis://127.0.0.1:14079/"

[rabbit]
port = 14072

And mise configuration

#.env
DATABASE_PORT = "14017"
RABBIT_PORT = "14072"
REDIS_PORT = "14079"

Then continue:

cp livekit.example.yml livekit.yml

mise start

You can start a web client by doing the following in another terminal:

# if you do not have yarn yet and have a modern Node.js:
corepack enable

# clone the web client and run it:
git clone --recursive https://github.com/stoatchat/for-web stoat-web
cd stoat-web
# refer to stoat-web/README.md for startup, creating an account and loging in

When signing up, go to http://localhost:14080 to find confirmation/password reset emails.

To stop all services, hit (CTRL + c) in the terminal you ran mise start and run mise docker:stop

Deployment Guide

Cutting new crate releases

Begin by bumping crate versions:

just patch # 0.0.X
just minor # 0.X.0
just major # X.0.0

Then commit the changes to package files.

Proceed to publish all the new crates:

Cutting new binary releases

Tag and push a new release by running:

If you have bumped the crate versions, proceed to GitHub releases to create a changelog.

Testing

First, start the required services:

Now run tests for whichever database:

TEST_DB=REFERENCE cargo nextest run
TEST_DB=MONGODB cargo nextest run

License

The Stoat backend is generally licensed under the GNU Affero General Public License v3.0.

Individual crates may supply their own licenses!