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