{"id":13558396,"url":"https://github.com/rustodon/rustodon","last_synced_at":"2025-04-12T22:37:14.664Z","repository":{"id":43573634,"uuid":"114797218","full_name":"rustodon/rustodon","owner":"rustodon","description":"A Mastodon-compatible, ActivityPub-speaking server in Rust","archived":false,"fork":false,"pushed_at":"2021-07-05T05:19:13.000Z","size":1603,"stargazers_count":878,"open_issues_count":37,"forks_count":43,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-04-04T02:08:34.585Z","etag":null,"topics":["activitypub","federated","mastodon","microblog","rust","social-network"],"latest_commit_sha":null,"homepage":"https://rustodon.glitch.social","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rustodon.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-12-19T18:16:03.000Z","updated_at":"2025-04-03T21:29:07.000Z","dependencies_parsed_at":"2022-08-17T15:10:29.569Z","dependency_job_id":null,"html_url":"https://github.com/rustodon/rustodon","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustodon%2Frustodon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustodon%2Frustodon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustodon%2Frustodon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rustodon%2Frustodon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rustodon","download_url":"https://codeload.github.com/rustodon/rustodon/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248643006,"owners_count":21138353,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["activitypub","federated","mastodon","microblog","rust","social-network"],"created_at":"2024-08-01T12:04:55.729Z","updated_at":"2025-04-12T22:37:14.641Z","avatar_url":"https://github.com/rustodon.png","language":"Rust","readme":"# Rustodon\n[![Build Status](https://travis-ci.org/rustodon/rustodon.svg?branch=master)](https://travis-ci.org/rustodon/rustodon) [![dependency status](https://deps.rs/repo/github/rustodon/rustodon/status.svg)](https://deps.rs/repo/github/rustodon/rustodon) ![maintainance: actively developed](https://img.shields.io/badge/maintenance-actively%20developed-brightgreen.svg) [![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/rustodon/rustodon.svg)](http://isitmaintained.com/project/rustodon/rustodon \"Average time to resolve an issue\") [![Percentage of issues still open](http://isitmaintained.com/badge/open/rustodon/rustodon.svg)](http://isitmaintained.com/project/rustodon/rustodon \"Percentage of issues still open\") [![All Contributors](https://img.shields.io/badge/all_contributors-13-orange.svg?style=flat-square)](#contributors)\n\n\nRustodon is an [Mastodon](https://joinmastodon.org)-compatible _federated social microblogging server_. It utilizes [_ActivityPub_](http://activitypub.rocks) to _federate_ with a constellation of _other servers_, connecting their communities with yours.\n\n## Current Status\n**You probably don't want to use this, yet**. Federation is WIP, etc.\n\nWe currently have authentication, users, profiles, statuses, content warnings, actors and statuses published as both HTML and AS2, and timelines.\nWe **do not** have a job system, status delivery, inboxes, outboxes, notifcations, mentions, post privacy, or account privacy.\n\nIf you want to work on making Rustodon feature-complete, check out the [issue tracker](https://github.com/rustodon/rustodon/issues)! We're not just looking for Rust devs, either; CSS witches, documentarians, UI/UX aficionados, etc, are highly welcome :smiley:\n\n## Hacking on the code\n\nYou will need to install several base dependencies:\n\n1. [Rust](https://www.rust-lang.org/en-US/install.html). Make sure you have followed the official instructions regarding your `PATH` variable.\n   \u003e 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.\n   \u003e 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.\n   \u003e If, after installation, running rustc --version in the console fails, this is the most likely reason.\n1. [Postgres](https://www.postgresql.org/download/). If you don't have a Postgres instance available, you can use the supplied [docker-compose](https://github.com/docker/compose/) configuration file to start an instance:\n   ```\n   docker-compose up -d\n   ```\n   The instance will be started in the background. The default username _and password_ is `rustodon`. The corresponding connection string would be:\n   ```\n   export DATABASE_URL=postgres://rustodon:rustodon@localhost/rustodon\n   ```\n   On some operating systems, you may need to separately install the Postgres client library:\n   * Debian/Ubuntu/etc: `apt install libpq-dev`\n   * Arch: `pacman -S postgresql-libs`\n1. [SASS](https://sass-lang.com/). To install, follow [the official directions](https://sass-lang.com/install), and make sure the `sass` binary is somewhere in your `PATH`.\n\nOnce you have installed these base components, you should run `scripts/setup` to install the remainder of the application dependencies.\n\n### Running the application\n\nTo run the application once you have installed all dependencies, you should run either:\n\n* `cargo run`: Runs just the server\n* `fors start`: Runs the server and additional helper processes\n\nRustodon will launch on `http://localhost:8000` by default; this can be overriden by setting [certain environment variables](https://rocket.rs/guide/configuration/#environment-variables).\n\nFederation 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](https://ngrok.com/) 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`.\n\n### Running database migrations\n\n`diesel database setup`\n\n### Running the tests\n\n`cargo test --all`\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore --\u003e\n\u003ctable\u003e\u003ctr\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://imer.in\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/20133857?v=4\" width=\"100px;\" alt=\"Erin Moon\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eErin Moon\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#blog-barzamin\" title=\"Blogposts\"\u003e📝\u003c/a\u003e \u003ca href=\"#content-barzamin\" title=\"Content\"\u003e🖋\u003c/a\u003e \u003ca href=\"https://github.com/rustodon/rustodon/commits?author=barzamin\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-barzamin\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#maintenance-barzamin\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#review-barzamin\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"https://github.com/rustodon/rustodon/commits?author=barzamin\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://measlytwerp.live\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/42093217?v=4\" width=\"100px;\" alt=\"Measly Twerp\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMeasly Twerp\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=measlytwerp\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-measlytwerp\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://gitlab.peach-bun.com/yipdw\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/3859?v=4\" width=\"100px;\" alt=\"David Yip\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDavid Yip\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=yipdw\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-yipdw\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"http://www.robot-disco.net\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/487847?v=4\" width=\"100px;\" alt=\"Gaelan D'costa\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGaelan D'costa\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#infra-RobotDisco\" title=\"Infrastructure (Hosting, Build-Tools, etc)\"\u003e🚇\u003c/a\u003e \u003ca href=\"#ideas-RobotDisco\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"http://yeti-factory.org/\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/3809?v=4\" width=\"100px;\" alt=\"Chris Zelenak\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eChris Zelenak\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=netshade\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/rustodon/rustodon/commits?author=netshade\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/y6nH\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/355120?v=4\" width=\"100px;\" alt=\"Hugh\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHugh\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=y6nH\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#design-y6nH\" title=\"Design\"\u003e🎨\u003c/a\u003e \u003ca href=\"#content-y6nH\" title=\"Content\"\u003e🖋\u003c/a\u003e \u003ca href=\"#ideas-y6nH\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://heiber.im\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/616813?v=4\" width=\"100px;\" alt=\"Moritz Heiber\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMoritz Heiber\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=moritzheiber\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#platform-moritzheiber\" title=\"Packaging/porting to new platform\"\u003e📦\u003c/a\u003e \u003ca href=\"#tool-moritzheiber\" title=\"Tools\"\u003e🔧\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://linuxwit.ch\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/52814?v=4\" width=\"100px;\" alt=\"iliana destroyer of worlds\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eiliana destroyer of worlds\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=iliana\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/1011X\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1851619?v=4\" width=\"100px;\" alt=\"1011X\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003e1011X\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-1011X\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://www.csos95.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1892750?v=4\" width=\"100px;\" alt=\"Christopher Silva\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eChristopher Silva\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-csos95\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"https://github.com/rustodon/rustodon/commits?author=csos95\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://www.utam0k.jp/\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/13010913?v=4\" width=\"100px;\" alt=\"utam0k\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eutam0k\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-utam0k\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#platform-utam0k\" title=\"Packaging/porting to new platform\"\u003e📦\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/dexamphetamine\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/20431955?v=4\" width=\"100px;\" alt=\"dexamphetamine\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003edexamphetamine\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=dexamphetamine\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-dexamphetamine\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\u003ctd align=\"center\"\u003e\u003ca href=\"https://ktn.fyi\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/9281956?v=4\" width=\"100px;\" alt=\"ash lea\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eash lea\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/rustodon/rustodon/commits?author=ashkitten\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"#ideas-ashkitten\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e \u003ca href=\"#maintenance-ashkitten\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","funding_links":[],"categories":["Rust","Applications","应用程序 Applications","mastodon","Services","社交网络"],"sub_categories":["Social networks","社交网络 Social networks"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustodon%2Frustodon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frustodon%2Frustodon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frustodon%2Frustodon/lists"}