diff --git a/DIFFERENCES.md b/DIFFERENCES.md new file mode 100644 index 00000000..10fd46cd --- /dev/null +++ b/DIFFERENCES.md @@ -0,0 +1,36 @@ +### list of features, bug fixes, etc that conduwuit does that upstream does not: + +- Has a working CI/CD for tests, codebase warnings (rustc and clippy), caching, and build (still need to output artifacts with build variants) +- Fixed every single clippy (default lints) and rustc warnings, including some that were performance related or potential safety issues / unsoundness +- Has dependabot and significantly updates all dependencies possible +- Uses upstream reqwest instead of super old fork (via upstream MR) +- Uses proper argon2 crate instead of questionable rust-argon2 crate +- Improved and cleaned up logging (less noisy dead server logging, registration attempts, more useful troubleshooting logging, etc) +- Attempts and interest in removing extreme and unnecessary panics/unwraps/expects that can lead to denial of service or such (upstream and upstream contributors want this unusual behaviour for some reason) +- Merged and cleaned up upstream MRs that have been sitting for 6-12 months +- Using latest rust-rocksdb git for the latest RocksDB release which has various fixes, features, improvements, etc, including some regarding database corruption. +- Configurable RocksDB logging (`LOG` files) with proper defaults (rotate, max size, verbosity, etc) to stop LOG files from accumulating so much +- Federated presence support and configurable local presence (via upstream MR) +- Concurrency support for key fetching for faster remote room joins and room joins that will error less frequently (via upstream MR) +- Experimental room version 11 suppor (via upstream MR) +- Enabled all non-officially-supported room versions as experimental so we can at least attempt to join them +- Configurable guest registration including forbidding guest registrations if no admin user is created yet, respects allow registration setting, and an optional override setting with a default of no guest registrations allowed. +- Explicit startup error/warning if your configuration allows open registration without a token or such like Synapse +- Improved RocksDB defaults to use new features that help with performance significantly, uses settings tailored to SSDs, and a conduwuit setting to tell RocksDB to use settings that are tailored to HDDs or slow spinning rust storage. +- Updated Ruma to almost latest version possible, and add some unstable MSCs (some still require an implementation though) +- conduwuit allows MXIDs with `+` in them (thanks to Ruma update) +- Revamped admin room infrastructure and commands (via upstream MR) +- Make spaces/hierarchy cache use cache_capacity_modifier instead of hardcoded small value +- Send missing push notifications on invitations (via upstream MR) +- Make PDU appending, building, etc asynchronous +- Add *optional* feature flag to use SHA256 key names for media instead of base64 to overcome filesystem file name length limitations (OS error file name too long) (via upstream MR) +- Add *optional* feature flag to enable zstd HTTP body compression +- Add support for querying both Matrix SRV records, the deprecated `_matrix` record and `_matrix-fed` record if necessary +- Add config option for device name federation with a privacy-friendly default (disabled) +- Add config option for requiring authentication to the `/publicRooms` endpoint (room directory) with a default disabled for privacy +- Add config option for federating `/publicRooms` endpoint (room directory) to other servers with a default disabled for privacy +- Add support for listening on a UNIX socket for performance and host security with proper default permissions (660) +- Add missing `destination` key to all `X-Matrix` `Authorization` requests (spec compliance issue) +- Fix spec compliance issue with servers being able to fetch remote user profiles over federation for users who don't belong to our server (`/_matrix/federation/v1/query/profile`) +- Use aggressive build-time performance optimisations for release builds (1 codegen unit, no debug, fat LTO, etc, and optimise all crates with same) +- Raise various hardcoded timeouts in codebase that were way too short, making some things like room joins and client bugs error less or none at all than they should \ No newline at end of file diff --git a/README.md b/README.md index 5e01c8c1..afc838c9 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ -# Conduit -### A Matrix homeserver written in Rust +# conduwuit +### a well maintained fork of [Conduit](https://conduit.rs/) #### What is Matrix? [Matrix](https://matrix.org) is an open network for secure and decentralized @@ -15,30 +15,44 @@ friends or company. #### Can I try it out? -Yes! You can test our Conduit instance by opening a Matrix client ( or Element Android for -example) and registering on the `conduit.rs` homeserver. The registration token is "for_testing_only". Don't share personal information. - -Server hosting for conduit.rs is donated by the Matrix.org Foundation. +There are no public conduwuit homeservers available, however conduwuit is incredibly simple to install. It's just a binary, a config file, and a database path. #### What is the current status? -Conduit is Beta, meaning you can join and participate in most +conduwuit is a fork of Conduit which is in beta, meaning you can join and participate in most Matrix rooms, but not all features are supported and you might run into bugs -from time to time. +from time to time. conduwuit attempts to fix and improve the majority of upstream Conduit bugs +or UX issues that are taking too long to be resolved, or unnecessary Matrix or developer +politics halting simple things from being merged or fixed, and general inactivity. -There are still a few important features missing: +There are still a few nice to have features missing that some users may notice: -- E2EE emoji comparison over federation (E2EE chat works) -- Outgoing read receipts, typing, presence over federation (incoming works) +- Outgoing read receipts and typing indicators (receiving works) -Check out the [Conduit 1.0 Release Milestone](https://gitlab.com/famedly/conduit/-/milestones/3). +#### What's different about your fork than upstream Conduit? + +See [DIFFERENCES.md](DIFFERENCES.md) + +#### Why does this fork exist? Why don't you contribute back upstream? + +I have tried, but: +- unnecessary Matrix / developer politics +- bikeshedding unnecessary or irrelevant things in MRs +- disagreement with how the upstream project is maintained including the codebase +- infinitely broken CI/CD and no interest in fixing it or improving it +- upstream maintainer inactivity +- questionable community members +- lack of MR reviews or issue triaging and no upstream maintainer interest in receiving help +- severe bugs, including denial of service and other likely vulnerabilities, not being merged due to things mentioned above +- no interest in adding co-maintainers to help out + +are what are keeping me from contributing. If the state of the upstream project improves, I'm +willing to start contributing again. As is, I think if folks want a more polished and well-kept version of Conduit, conduwuit exists for that. #### How can I deploy my own? - Simple install (this was tested the most): [DEPLOY.md](DEPLOY.md) -- Debian package: [debian/README.md](debian/README.md) - Nix/NixOS: [nix/README.md](nix/README.md) -- Docker: [docker/README.md](docker/README.md) If you want to connect an Appservice to Conduit, take a look at [APPSERVICES.md](APPSERVICES.md). @@ -47,33 +61,24 @@ If you want to connect an Appservice to Conduit, take a look at [APPSERVICES.md] 1. Look for an issue you would like to work on and make sure it's not assigned to other users 2. Ask someone to assign the issue to you (comment on the issue or chat in - [#conduit:fachschaften.org](https://matrix.to/#/#conduit:fachschaften.org)) -3. Fork the repo and work on the issue.[#conduit:fachschaften.org](https://matrix.to/#/#conduit:fachschaften.org) is happy to help :) -4. Submit a MR - -#### Thanks to - -Thanks to FUTO, Famedly, Prototype Fund (DLR and German BMBF) and all individuals for financially supporting this project. - -Thanks to the contributors to Conduit and all libraries we use, for example: - -- Ruma: A clean library for the Matrix Spec in Rust -- axum: A modular web framework + [#conduwuit:puppygock.gay](https://matrix.to/#/#conduwuit:puppygock.gay)) +3. Fork the repo and work on the issue. +4. Submit a PR (please keep contributions to the GitHub repo, main development is done here, +not the GitLab repo which exists just as a mirror.) #### Contact If you run into any question, feel free to -- Ask us in `#conduit:fachschaften.org` on Matrix -- Write an E-Mail to `conduit@koesters.xyz` -- Send an direct message to `timokoesters@fachschaften.org` on Matrix -- [Open an issue on GitLab](https://gitlab.com/famedly/conduit/-/issues/new) +- Ask us in `#conduwuit:puppygock.gay` on Matrix +- [Open an issue on GitHub](https://github.com/girlbossceo/conduwuit/issues/new) #### Donate -Liberapay: \ -Bitcoin: `bc1qnnykf986tw49ur7wx9rpw2tevpsztvar5x8w4n` +Liberapay: \ +Ko-fi: \ +GitHub Sponsors: + #### Logo -Lightning Bolt Logo: https://github.com/mozilla/fxemoji/blob/gh-pages/svgs/nature/u26A1-bolt.svg \ -Logo License: https://github.com/mozilla/fxemoji/blob/gh-pages/LICENSE.md +No official conduwuit logo exists. Repo and Matrix room picture is from bran (<3).