Skip to content
This repository was archived by the owner on Jan 2, 2026. It is now read-only.

Releases: polyphony-chat/chorus

v0.20.0

15 May 17:05
53235dc

Choose a tag to compare

(see #617)

Major changes in this version include:

  • An overhaul of how errors are handled and error cases, including JSON error support (#607)
  • A new API for ignoring users + updates to the Relationship struct (#606)
  • Several internal changes and fixes

Public API changes

  • changes to ChorusError:
    • ReceivedErrorCode is now ReceivedError, which contains a more specific error object
    • InvalidFormBody has been removed
    • InvalidResponse now contains the response's HTTP status
  • due to the ratelimiter changes, Instance methods that send API requests now need an &mut self reference
  • to avoid cloning Instances, auth routes (login, register and mfa) now take a cloned Shared<Instance>. The best practice way to handle Instances is now to call into_shared(), store Shared<Instance> instead of Instance and call .clone() on the Arc when creating new ChorusUsers
  • new fields in the Relationship struct:
    • is_spam_request,
    • stranger_request,
    • origin_application_id and
    • user_ignored

Additions

  • ChorusUser::bulk_remove_relationships
  • ChorusUser::ignore_user
  • ChorusUser::unignore_user
  • JSON Error and Api error types

Bugfixes

  • #616 - Instances are no longer cloned when logging into or registering accounts

Internal changes

  • #607 (refactoring the internal ratelimiter and request logic, making it support requests without a ChorusUser)
  • #608 by @zicklag (updating internal self-updating struct logic, removing an unsafe block for safer code)
  • #612 and #613 by @bitfl0wer (improving CI, more checks for security)
  • #614 (updating the url of discord userdoccers links in documentation)
  • several dependency bumps

v0.19.0

15 Mar 10:49
8483470

Choose a tag to compare

(see #603)

It's been nearly 4 months, but they have been quite busy!

Major additions in this version include:

  • the finished guild api (39 new routes + several new entities - #593),
  • a robust api for managing sent (fake) telemetry data (adding X-Super-Properties and User-Agent headers, bringing us a bit closer to #584 - #590),
  • an api for awaiting responses to gateway send events (which also adds two pre-made observers for receiving events through tokio channels - #591) and
  • an api for setting the default gateway listeners for spawned gateways from Instance (#598)

Public API changes

  • each Instance now contains a client_properties property, which lets api consumers set data sent as telemetry to the instance. Setting client_properties.send_telemetry_headers (the only field which is not directly serialized) to false will disable sending certain headers which contain this data in requests, but sending the very same data when opening a Gateway connection cannot be disabled. Further, disabling this isn't recommended due to privacy reasons. (The server expects to find these headers, which may identify users using your app)
  • each Instance now also contains a default_gateway_events property, which is cloned for each new Gateway the Instance spawns. This also makes Gateway Events are clonable.
  • GatewayError::NoResponse as part of the gateway in-place events api
  • Proper Gateway Intents and Capabilities types (#595 by @Quat3rnion)
  • Add UserStatus variant "Unknown" (#596 by @bitfl0wer)
  • changed read_state in Gateway Ready to an enum which now includes the new way discord.com serializes it as (A Vec of ReadStateEntry) and the old way it did and Spacebar still does
  • added GuildFeatures variants ActivityFeedDisabledByUser, ChannelIconEmojisGenerated, EnabledModerationExperienceForNonCommunity, Featurable, PrivateThreads
  • changed Reaction's Emoji to PartialEmoji, as per userdoccers
  • changed Message Reaction events to use PartialEmoji, as per userdoccers
  • Guild::get - add with_counts parameter
  • Guild::create - update schema for new fields, see spacebarchat/server#1251
  • Guild::modify - update schema, add audit_log_reason
  • Guild::get_members - update query parameters
  • rename Guild::search_members to Guild::query_members, since search members is another different route
  • Guild::query_members - update query parameters
  • Guild::modify_member - update fields of schema ( + documentation)
  • Guild::modify_current_member - update fields of schema ( + documentation)
  • Guild::modify_current_member_profile - update fields of schema ( + documentation)
  • update Activity type, make fields and types public

Additions

  • #593 - 39 new Guild API routes
  • #590 - see Instance.client_properties and ClientProperties
  • #591 - identify, resume, request_guild_members, update_voice_state, request_last_messages as methods that can be awaited to receive the response from the server; OneshotEventObserver<T> and BroadcastEventObserver<T>
  • #598 - Instance.default_gateway_events

Bugfixes

  • #589 (#592)
  • fix an issue with .well-known discovery of Instances not working (ba42169)
  • Guild::get_preview fix: method is GET, not PATCH
  • fix a few repr enums not using Serialize_repr and Deserialize_repr and such causing deserialization errors
  • changed Reaction's Emoji to PartialEmoji, as per userdoccers, to fix a deserialization error
  • changed Message Reaction events to use PartialEmoji, as per userdoccers, to fix a deserialization error

Internal changes

  • add methods with_audit_log_reason, with_maybe_audit_log_reason, with_authorization, with_authorization_for, with_headers_for to ChorusRequest
  • update license headers, fix missing license headers (84f3415 by @bitfl0wer)
  • Add license-header check workflow (7e70029 by @bitfl0wer)
  • Try to fix errors in our doctests, so they can actually be tested in the future (testing framework still needs to be updated)
  • add bytes as a dependency, so we can access its types - this does not actually add to compilation, as other important dependencies (http, reqwest, sqlx, tokio_tungstenite, ...) depend on the same version

v0.18.0

24 Nov 06:55
d9d6ea9

Choose a tag to compare

(see #576)

Public API changes

  • #570: Various entity public api changes
  • 644d3be, 85e922b: Add type OneOrMoreSnowflakes, allow GatewayRequestGuildMembers to request multiple guild and user ids
  • f65b9c1: Differentiate PresenceUpdate and GatewayPresenceUpdate
  • 0e5fd86: Temporarily fix PresenceUpdate for Spacebar Client by making user optional
  • 61ac7d1: Updated LazyRequest (op 14) to use the Snowflake type for ids instead of just String

Additions

Bugfixes

  • #565: Fix sqlx En-/Decoding of PremiumType
  • 7460d3f: Fix GatewayIdentifyConnectionProps for Spacebar Client by deriving default on all fields, since the client does not send it
  • 3d9460f: Derive Default for MessageReferenceType, assume default reference_type if none is provided
  • 4baecf9: Fixed a deserialization error related to presences in GuildMembersChunk being an array, not a single value
  • 1b20102: Fixed a deserialization error with deserializing activities in PresenceUpdate as an empty array when they are sent as null
  • 7feb571: Fixed a deserialization error on discord.com related to experiments (they are not implemented yet, see #578)
  • fb94afa: Fixed a deserialization error on discord.com related to last_viewed in ReadState being a version / counter, not a DateTime

Internal changes

  • 40754c5: bump sqlx-pg-uint to v0.8.0
  • #575: Refactor of gateway close code handling
  • 4ed68ce: Refactored the gateway to fully use the Opcode enum instead of constants
  • #579

v0.17.0

10 Oct 17:10
edf0ede

Choose a tag to compare

(see #562)

Public API changes

  • #561: Add missing fields in GatewayReady event, create GatewayReadyBot for Bots
  • #560: Differentiate between instance softwares through /version and /ping endpoints
  • #537: Implement 30 user routes
  • #565 : Fix sqlx En-/Decoding of PremiumType
  • #567

Internal changes

Bugfixes

  • #565 : Fix sqlx En-/Decoding of PremiumType

v0.16.0

28 Aug 18:12
3e22b5c

Choose a tag to compare

What's Changed

(See #511)

Major changes:

  • Implement gateway options and z-lib-stream compression (#508)
  • Countless types updates by @Quat3rnion:
    • Using and adding distinct types instead of primitives (#501, #503, #505, #507, #509)
    • Add sqlx derives and implementations (#501, #505)
    • Make a facade type for Shared to be used in non-client contexts (#501)
    • Add new schemas (#503, #509)
    • Add bitflags serialization derive (#505)
  • Remove dependency on openssl in favor of rustls and webpki_roots (#522)
  • sqlx feature: Remove MySQL/MariaDB support in favor of PostgreSQL
  • sqlx: Convert between Rust u64 and PostgreSQL NUMERIC using sqlx_pg_uint
  • Prefer &str over String when possible (#553)

Minor changes:

  • Add the repository field to chorus_macros' cargo.toml (#496)
  • (Internal) Replace Observer and GatewayEvent with pubserve crate (#524)
  • (Internal, CI) Minor improvements to CI (#498)
  • (Internal, CI) #529 Increase CI parallelization, use cargo nextest in linux job
  • (Internal, CI) #544 Add cargo doc lints to prs and releases
  • sqlx: Snowflake: PgU64 as conversion-base instead of String (#551)
  • (Internal, non-WASM) Distinguish between ws and wss when spawning tungstenite connection to backend, not constructing TLS related objects if ws is used as a connection URL. (#554)

Fixes:

  • Fix login and register to only create one gateway connection (#495)
  • Add custom deserializer for PermissionOverwriteType (#512)
  • Derive Clone for RelationshipAdd event (#525 and #532)
  • (Internal) Use a macro to derive WebSocketEvent (#490 and #486)
  • (Internal) Move Shared<T> to types/mod.rs (#492)
  • (Internal) Deduplicate code for voice gateway backends (#493)
  • #514:
    • fix PATCH /users/@me - It incorrectly returned a required password error, even if the current password was set
    • fix GET /users/@me/guilds - It incorrectly sent body parameters instead of query ones
    • don't log debug! for every successful ratelimited request - use trace! so it's less spamy
    • update the max expected compression ratio (several times) from 20 to 200. let's hope that will be enough
    • fix deserialization errors relating to guild folders in user settings
    • fix a panic in SqlxBitFlags if there are extra flags. It now truncates them
    • update chorus_macros to 0.4.1 (due to the above fix)
    • log (trace!) event data if we fail to parse it or it's unrecognised, for debugging purposes
    • fix a deserialization error in the MessageACK event
    • fix public_flags in user objects not being PublicFlags bitflags
  • #523 caused by #514, fixed in #533

Full Changelog: https://github.com/polyphony-chat/chorus/pull/511/commits

v0.15.0

16 Apr 16:09

Choose a tag to compare

Release 0.15.0

Changes

  • Primitive voice support: #457
  • Cleaner code
    • Replace Arc<RwLock<T>> with Shared<T>: #466
    • More, better documentation
    • More tests
    • Fix some typos
    • Make gateway close() code cleaner
  • Remove #[derive(Eq)] from types which falsely had this trait derived
  • Change license from AGPL-3 to MPL-2.0: #477
  • Bump whoami, mio, h2 to fix CVEs
  • Bump versions of used GitHub Actions](#487)

More commits

Full Changelog: v0.14.0...v0.15.0

v0.14.0

20 Jan 17:15

Choose a tag to compare

v0.14.0 Pre-release
Pre-release

What's Changed

Full Changelog: v0.13.0...v0.14.0

Pre-release v0.13.0

03 Dec 21:39

Choose a tag to compare

Pre-release v0.13.0 Pre-release
Pre-release

Quality of Life
See #452

What's Changed

Full Changelog: v0.12.0...v0.13.0

v.0.12.0 - The WebAssembly Update

22 Nov 16:36

Choose a tag to compare

Pre-release

Pre-release v0.12.0

  • Chorus can now compile to wasm32-unknown-unknown and run in browser environments! This allows developers to build apps for all sorts of platforms, now including the web, using Chorus.
  • This release features a bugfix, preventing voice support being implemented for Discord.com.

What's Changed

Full Changelog: v0.11.0...v0.12.0

v0.11.0

19 Nov 17:06

Choose a tag to compare

v0.11.0 Pre-release
Pre-release

First tagged release.