Home

Awesome

<div align="center"> <h1> Revolt Backend

Stars Forks Pull Requests Issues Contributors License

</h1> The services and libraries that power the Revolt service.<br/> <br/>
CratePathDescription
core/configcrates/core/configCore: ConfigurationCrates.io Version Crates.io Version Crates.io Version Crates.io License
core/databasecrates/core/databaseCore: Database ImplementationCrates.io Version Crates.io Version Crates.io Version Crates.io License
core/filescrates/core/filesCore: S3 and encryption subroutinesCrates.io Version Crates.io Version Crates.io Version Crates.io License
core/modelscrates/core/modelsCore: API ModelsCrates.io Version Crates.io Version Crates.io Version Crates.io License
core/permissionscrates/core/permissionsCore: Permission LogicCrates.io Version Crates.io Version Crates.io Version Crates.io License
core/presencecrates/core/presenceCore: User PresenceCrates.io Version Crates.io Version Crates.io Version Crates.io License
core/resultcrates/core/resultCore: Result and Error typesCrates.io Version Crates.io Version Crates.io Version Crates.io License
deltacrates/deltaREST API serverLicense
bonfirecrates/bonfireWebSocket events serverLicense
services/januarycrates/services/januaryProxy serverLicense
services/autumncrates/services/autumnFile serverLicense
bindings/nodecrates/bindings/nodeNode.js bindings for the Revolt softwareLicense
</div> <br/>

Minimum Supported Rust Version

Rust 1.76 or higher.

[!CAUTION] The events server has a significant performance regression between Rust 1.77.2 and 1.78.0 onwards, see issue #341.

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:

A default.nix is available for Nix users! Just run nix-shell and continue.

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

ServicePort
MongoDB14017
Redis14079
MinIO14009
Maildev14025<br>14080
Revolt Web App14701
crates/delta14702
crates/bonfire14703
crates/services/autumn14704
crates/services/january14705

Now you can clone and build the project:

git clone https://github.com/revoltchat/backend revolt-backend
cd revolt-backend
cargo build

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"

Then continue:

# start other necessary services
docker compose up -d

# run everything together
./scripts/start.sh
# .. or individually
# run the API server
cargo run --bin revolt-delta
# run the events server
cargo run --bin revolt-bonfire
# run the file server
cargo run --bin revolt-autumn
# run the proxy server
cargo run --bin revolt-january

# hint:
# mold -run <cargo build, cargo run, etc...>
# mold -run ./scripts/start.sh

You can start a web client by doing the following:

# 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/revoltchat/revite
cd revite
yarn
yarn build:deps
echo "VITE_API_URL=http://local.revolt.chat:14702" > .env.local
yarn dev --port 14701

Then go to http://local.revolt.chat:14701 to create an account/login.

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

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:

just publish

Cutting new binary releases

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.

Testing

First, start the required services:

docker compose -f docker-compose.db.yml up -d

Now run tests for whichever database:

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

License

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

Individual crates may supply their own licenses!