
Open-source community server alternative to Discord built with Rust and TypeScript.
Stoat Backend
The services and libraries that power the Stoat service.| Crate | Path | Description | |
|---|---|---|---|
core/config | crates/core/config | Core: Configuration | |
core/database | crates/core/database | Core: Database Implementation | |
core/files | crates/core/files | Core: S3 and encryption subroutines | |
core/models | crates/core/models | Core: API Models | |
core/permissions | crates/core/permissions | Core: Permission Logic | |
core/presence | crates/core/presence | Core: User Presence | |
core/result | crates/core/result | Core: Result and Error types | |
core/coalesced | crates/core/coalesced | Core: Coalescion service | |
delta | crates/delta | REST API server | |
bonfire | crates/bonfire | WebSocket events server | |
services/january | crates/services/january | Proxy server | |
services/gifbox | crates/services/gifbox | Tenor proxy server | |
services/autumn | crates/services/autumn | File server | |
daemons/crond | crates/daemons/crond | Timed data clean up daemon server | |
daemons/pushd | crates/daemons/pushd | Push notification daemon server |
Rust 1.86.0 or higher.
Before contributing, make yourself familiar with our contribution guidelines and the technical documentation for this project.
Before getting started, you'll want to install:
A default.nix is available for Nix users! Run
nix-shellto 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
BUILDERin your.envfile 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://[email protected]/1" events = "https://[email protected]/1" files = "https://[email protected]/1" proxy = "https://[email protected]/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 = 14072And 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
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:
just publish
Tag and push a new release by running:
just release
If you have bumped the crate versions, proceed to GitHub releases to create a changelog.
First, start the required services:
docker compose up -d
Now run tests for whichever database:
TEST_DB=REFERENCE cargo nextest run
TEST_DB=MONGODB cargo nextest run
The Stoat backend is generally licensed under the GNU Affero General Public License v3.0.
Individual crates may supply their own licenses!