A Mastodon-compatible, ActivityPub-speaking server in Rust https://rustodon.glitch.social/

dependabot[bot] 2ab6fe8f31 Merge pull request #210 from rustodon/dependabot/cargo/regex-1.1.6 2 days ago
docs 6e08bfd719 update docs/stories.md 1 year ago
lib 0bc13db222 Bump yaml-rust from 0.4.2 to 0.4.3 1 month ago
migrations da110d8667 db: flip privkey, pubkey order and make privkey NULLable 2 months ago
scripts 7a79bfe208 ci: include rustodonctl binary in deploy 1 month ago
src 271adbbf84 rustodonctl: generate-keys should filter on NULL, not [] 1 month ago
static 107abe2966 Restyling web interface 8 months ago
style 505a5837a9 fix wrapping for both cw and content (#130) 6 months ago
templates af88f5bf51 implement status deletion 3 months ago
.editorconfig 0527371afa editorconfig: add .js 1 year ago
.env 6a8d17bb35 improve DOMAIN handling 1 year ago
.gitattributes 49fd5928cd .gitattributes: Tell linguist Cargo.lock is generated 1 year ago
.gitignore f29023b945 gitignore: vscode 8 months ago
.travis.yml b04ab243b3 update rustc version 4 months ago
CODE_OF_CONDUCT.md 00952b395f Create CODE_OF_CONDUCT.md 1 year ago
Cargo.lock 531d6375d1 Bump regex from 1.1.5 to 1.1.6 2 days ago
Cargo.toml 531d6375d1 Bump regex from 1.1.5 to 1.1.6 2 days ago
LICENSE 051d861859 Create LICENSE 1 year ago
Procfile 29e1bb24d9 Procfile: don't watch nonexistant folders 2 months ago
README.md b2a8958653 README.md: add maintenance badges 5 months ago
appspec.yml 6e96eb3c53 run scripts to automate Continuous Delivery 1 year ago
build.rs 218c29d69a deps: update to askama 0.8.0 1 month ago
diesel.toml 9e2e64395b diesel.toml: fix schema path 2 months ago
docker-compose.yml 453090d8ef Add a docker-compose file for convenient database provisioning 10 months ago
rust-toolchain c481552ebf rename REQUIRED_RUST_NIGHTLY to rust-toolchain 1 month ago
rustfmt.toml dfffe85544 Bikeshed rustfmt config (#9) 1 year ago

README.md

Rustodon

Build Status dependency status 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 :smiley:

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