conduit/DIFFERENCES.md
strawberry 830cd0e6d7 document we shutdown cleaner and safer
Signed-off-by: strawberry <strawberry@puppygock.gay>
2024-01-09 12:24:42 -05:00

5 KiB

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 support (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 latest commit where 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 enabled 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
  • Add debug admin command to force update user device lists (could potentially resolve some E2EE flukes) (ForceDeviceListUpdates)
  • Declare various missing Matrix versions and features at /_matrix/client/versions
  • Add support for serving server and client well-known files from conduwuit using well_known_client and well_known_server options
  • Add non-standard sliding sync proxy health check (?) endpoint at /client/server.json that some clients such as Element Web query using the well_known_client or well_known_server config options
  • Send a User-Agent on all of our requests (conduwuit/0.7.0-alpha+conduwuit-0.1.1) which strangely was not done upstream since forever. Some providers consider no User-Agent suspicious and block said requests.
  • Safer and cleaner shutdowns on both database side as we run cleanup on shutdown and exits database loop better (no potential hanging issues in database loop), overall cleaner shutdown logic