A Mastodon-compatible, ActivityPub-speaking server in Rust
Clone or download
Failed to load latest commit information.
database rustfmt: bröther please give nëwlinës Oct 31, 2018
docs update docs/stories.md Dec 23, 2017
lib clippy: fix lints in posticle crate Nov 2, 2018
migrations newlines Jul 6, 2018
scripts scripts/setup: alert user when SASS not installed Oct 12, 2018
src clippy: fix lints in posticle crate Nov 2, 2018
static Restyling web interface Aug 12, 2018
style fix wrapping for both cw and content (#130) Oct 21, 2018
templates ui: make profile update flow more fluid Oct 10, 2018
.editorconfig editorconfig: add .js Feb 19, 2018
.env improve DOMAIN handling Jan 6, 2018
.gitattributes .gitattributes: Tell linguist Cargo.lock is generated Jan 14, 2018
.gitignore gitignore: vscode Jul 31, 2018
.travis.yml update to rust nightly-2018-10-31 🎃 Oct 31, 2018
CODE_OF_CONDUCT.md Create CODE_OF_CONDUCT.md Dec 26, 2017
Cargo.lock Bump serde_json from 1.0.32 to 1.0.33 Nov 12, 2018
Cargo.toml Bump regex from 1.0.5 to 1.0.6 Nov 7, 2018
LICENSE Create LICENSE Dec 26, 2017
Procfile Procfile: don't use bundler Oct 12, 2018
README.md README.md: add maintenance badges Nov 9, 2018
REQUIRED_RUST_NIGHTLY update to rust nightly-2018-10-31 🎃 Oct 31, 2018
appspec.yml run scripts to automate Continuous Delivery Jan 23, 2018
build.rs build.rs: switch to dart sass instructions, don't use bundler Oct 12, 2018
diesel.toml add diesel.toml Jul 1, 2018
docker-compose.yml Add a docker-compose file for convenient database provisioning Jun 3, 2018
rustfmt.toml Bikeshed rustfmt config (#9) Jan 13, 2018



Build Status dependency status maintainance: actively developed Average time to resolve an issue Percentage of issues still open chat on Zulip

Rustodon is an Mastodon-compatible federated social microblogging server. It utilizes ActivityPub to federate with a constellation of other servers, connecting their communities with yours.

Current Status

You probably don't want to use this, yet. Federation is WIP, etc.

We currently have authentication, users, profiles, statuses, content warnings, actors and statuses published as both HTML and AS2, and timelines. We do not have a job system, status delivery, inboxes, outboxes, notifcations, mentions, post privacy, or account privacy.

If you want to work on making Rustodon feature-complete, check out the issue tracker! We're not just looking for Rust devs, either; CSS witches, documentarians, UI/UX aficionados, etc, are highly welcome 😃

Hacking on the code

You will need to install several base dependencies:

  1. Rust. Make sure you have followed the official instructions regarding your PATH variable.

    In the Rust development environment, all tools are installed to the ~/.cargo/bin directory, and this is where you will find the Rust toolchain, including rustc, cargo, and rustup. Accordingly, it is customary for Rust developers to include this directory in their PATH environment variable. During installation rustup will attempt to configure the PATH. Because of differences between platforms, command shells, and bugs in rustup, the modifications to PATH may not take effect until the console is restarted, or the user is logged out, or it may not succeed at all. If, after installation, running rustc --version in the console fails, this is the most likely reason.

  2. Postgres. If you don't have a Postgres instance available, you can use the supplied docker-compose configuration file to start an instance:
    docker-compose up -d
    The instance will be started in the background. The default username and password is rustodon. The corresponding connection string would be:
    export DATABASE_URL=postgres://rustodon:rustodon@localhost/rustodon
    On some operating systems, you may need to separately install the Postgres client library:
    • Debian/Ubuntu/etc: apt install libpq-dev
    • Arch: pacman -S postgresql-libs
  3. SASS. To install, follow the official directions, and make sure the sass binary is somewhere in your PATH.

Once you have installed these base components, you should run scripts/setup to install the remainder of the application dependencies.

Running the application

To run the application once you have installed all dependencies, you should run either:

  • cargo run: Runs just the server
  • fors start: Runs the server and additional helper processes

Rustodon will launch on http://localhost:8000 by default; this can be overriden by setting certain environment variables.

Federation requires that the application know where it's hosted, and (thanks to Webfinger) also forces us to serve over HTTPS. To get around this in a development environment, you can use ngrok or a similar service. To make sure the app knows where it's serving from (used to compute, eg, AS2 UIDs), set DOMAIN in .env.

Running database migrations

diesel database setup

Running the tests

cargo test --all