{"id":13556679,"url":"https://github.com/ruma/homeserver","last_synced_at":"2025-04-03T10:31:18.102Z","repository":{"id":106901984,"uuid":"47059992","full_name":"ruma/homeserver","owner":"ruma","description":"A Matrix homeserver written in Rust.","archived":true,"fork":false,"pushed_at":"2021-09-02T08:25:53.000Z","size":829,"stargazers_count":1077,"open_issues_count":62,"forks_count":41,"subscribers_count":51,"default_branch":"deprecation","last_synced_at":"2024-11-04T06:35:12.566Z","etag":null,"topics":["application","chat","homeserver","matrix","ruma","rust","server"],"latest_commit_sha":null,"homepage":"https://www.ruma.io/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ruma.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-29T10:59:46.000Z","updated_at":"2024-10-24T15:05:04.000Z","dependencies_parsed_at":"2023-04-26T23:00:53.554Z","dependency_job_id":null,"html_url":"https://github.com/ruma/homeserver","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/ruma%2Fhomeserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruma%2Fhomeserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruma%2Fhomeserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ruma%2Fhomeserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ruma","download_url":"https://codeload.github.com/ruma/homeserver/tar.gz/refs/heads/deprecation","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246984558,"owners_count":20864467,"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":["application","chat","homeserver","matrix","ruma","rust","server"],"created_at":"2024-08-01T12:03:58.215Z","updated_at":"2025-04-03T10:31:18.092Z","avatar_url":"https://github.com/ruma.png","language":null,"readme":"This repository contains the discontinued [Matrix](https://matrix.org/)\nhomeserver written in [Rust](https://www.rust-lang.org/), Ruma.\n\nFor details on the death of the project, see [this blog post](https://www.ruma.io/news/ruma-is-dead-long-live-ruma-2020-04-10/).\n\nBelow, you can find the previous contents of this readme. For the rest of the\nfiles, go to [the master branch](https://github.com/ruma/homeserver/tree/master).\n\n# Ruma\n\n**Ruma** is a [Matrix](https://matrix.org/) homeserver written in [Rust](https://www.rust-lang.org/).\n\nIf you're interested in the project, please take a look at the [Ruma website](https://www.ruma.io/), follow [ruma_io](https://twitter.com/ruma_io) on Twitter and chat with us in [#ruma:matrix.org](https://matrix.to/#/#ruma:matrix.org) on Matrix (also accessible via [#ruma](https://webchat.freenode.net/?channels=ruma) on the freenode IRC network.)\n\n## Status\n\nThe goal of Ruma as a project is to provide a complete implementation of a Matrix homeserver, a Matrix identity server, a Matrix client library, and Matrix application services.\nThis repository in particular aims to implement a Matrix homeserver.\nThe Ruma homeserver will be packaged as a single executable for small-scale deployments, and as multiple executables for large deployments that need to scale different parts of the homeserver independently.\nAdditional Matrix libraries used by Ruma can be found in the [Ruma organization on GitHub](https://github.com/ruma).\n\nFor a detailed view of which Matrix APIs are supported by Ruma so far, see the [STATUS](https://github.com/ruma/ruma/blob/master/STATUS.md) document.\n\n## Development\n\nRuma includes a development setup using [Docker](https://www.docker.com/).\nTo install Docker, see the installation instructions for [OS X](https://docs.docker.com/docker-for-mac/), [Linux](https://docs.docker.com/install/), or [Windows](https://docs.docker.com/docker-for-windows/).\n(Note that both Docker and Docker Compose are needed, but the standard ways of installing include both.)\n\n**Note**: `docker-compose` version 1.6 or higher and `docker-engine` version 1.10.0 or higher are required.\n\nCargo is the main entrypoint for development.\nUse the `script/cargo` shell script as you would normally use plain `cargo`.\nThis will run the Cargo command inside a Docker container that has Rust and other dependencies already installed.\nIt will automatically start a PostgreSQL database inside a container as well.\nThe first time you run a command with `script/cargo`, it will take some time to download the Docker images.\n\nTo build Ruma, run `script/cargo build --bin ruma`.\nThe application will be written to `target/debug/ruma`.\nYou can also build and run Ruma in one step with `script/cargo run --bin ruma`.\n(When run via Cargo, arguments to `ruma` itself must come after two dashes, e.g. `script/cargo run --bin ruma -- run`.)\n\n## Minimum Rust version\n\nRuma requires Rust 1.34 or later.\n\n### Developing without Docker\n\nDocker is used to make everyone's life easier including packaging Rust along with Ruma's other dependencies, and managing test PostgreSQL databases, all without assuming anything about the host system.\nIf you really want to avoid Docker, it's up to you to configure your development environment to match the assumptions made by code in Ruma.\nIn particular, this means at least the minimum version of Rust, all the system-level dependencies such as libsodium, and a PostgreSQL installation with suitable permissions available at the address and port used in `src/test.rs`.\n\n## Documentation\n\nTo generate API documentation for Ruma, run `script/cargo doc`.\nThen open `target/doc/ruma/index.html` in your browser.\nNote that this documentation is for Ruma's internal Rust code, not the public-facing Matrix API.\nUser-facing documentation will live on the [Ruma website](https://www.ruma.io/).\n\n## Testing\n\nRuma includes an integration test suite.\nOnce Docker is installed, run `script/cargo test` to run the test suite.\n\n## Configuration\n\nRuma requires a configuration file named `ruma.json`, `ruma.toml`, or `ruma.yaml`/`ruma.yml` written in JSON, TOML, or YAML, respectively.\nThis file should be in the working directory `ruma` is executed from.\nRuma will attempt to load the configuration file in that same order, stopping at the first one it finds.\nA configuration file would look something like this, in the JSON format:\n\n``` json\n{\n  \"version\": \"1\",\n  \"domain\": \"example.com\",\n  \"macaroon_secret_key\": \"qbnabRiFu5fWzoijGmc6Kk2tRox3qJSWvL3VRl4Vhl8=\",\n  \"postgres_url\": \"postgres://username:password@example.com:5432/ruma\"\n}\n```\n\nThe complete list of attributes in the configuration is as follows:\n\n* **bind_address** (string, default: \"127.0.0.1\"):\n  The network address where the server should listen for connections.\n* **bind_port** (string, default: \"3000\"):\n  The network port where the server should listen for connections.\n* **domain** (string, required):\n  The DNS name where clients can reach the server.\n  Used as the hostname portion of user IDs.\n* **macaroon_secret_key** (string, required):\n  The secret key used for generating [Macaroons](https://research.google.com/pubs/pub41892.html).\n  Must be 32 cryptographically random bytes, encoded as a Base64 string.\n  Changing this value will invalidate any previously generated macaroons, effectively ending all user sessions.\n* **postgres_url** (string, required):\n  A [PostgreSQL connection string](http://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING) for Ruma's PostgreSQL database.\n* **version** (string, required):\n  The version of the Ruma configuration file format that this configuration represents.\n  This field allows Ruma to make backwards-incompatible changes to the configuration file format over time without breaking existing deployments.\n  Currently the only valid value is \"1\".\n\n## Usage\n\n```\nruma 0.1.0\nA Matrix homeserver.\n\nUSAGE:\n    ruma [FLAGS] [SUBCOMMAND]\n\nFLAGS:\n    -h, --help       Prints help information\n    -V, --version    Prints version information\n\nSUBCOMMANDS:\n    help      Prints this message or the help message of the given subcommand(s)\n    run       Runs the Ruma server\n    secret    Generates a random value to be used as a macaroon secret key\n```\n\nBefore you run `ruma run`, make sure you have a configuration file in the working directory named `ruma.json` and that a PostgreSQL server is running and available at the location specified in the configuration file.\nRuma will automatically create the database (if it doesn't already exist) and manage the database schema.\nYou are responsible for providing Ruma with a valid PostgreSQL server URL and role that can perform these operations.\n\n## Swagger\n\nRuma includes an HTTP endpoint to serve [Swagger](http://swagger.io/) data at http://example.com/ruma/swagger.json (substituting the host and port of your Ruma server for example.com, of course.)\nPoint a copy of [Swagger UI](https://github.com/swagger-api/swagger-ui) at this URL to see complete documentation for the Matrix client API.\nNote that Ruma does not actually implement all these API endpoints yet.\n\n## Contributing\n\nSee the [CONTRIBUTING](CONTRIBUTING.md) document.\n\n## Dedication\n\nRuma is dedicated to my best friend, Tamara Boyens, who passed away in January 2017.\nShe and I talked online for hours every day.\nShe was a large part of my motivation in starting Ruma, because our online communication was where we spent the most time together after we both moved away from the city where we met, and we were always looking for a system that would fix our grievances with all the subpar choices we had for chatting.\n\n— Jimmy Cuadra\n\n## License\n\n[MIT](http://opensource.org/licenses/MIT)\n","funding_links":[],"categories":["Others","HarmonyOS","server"],"sub_categories":["Windows Manager"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruma%2Fhomeserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fruma%2Fhomeserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fruma%2Fhomeserver/lists"}