Release Notes
1.5.11353 (2025-08-28)
Unity Plugin
- Fixed a crash primarily affecting low-end Android devices (those with armv7 architecture) in
Client::CreateOrJoinLobbyWithMetadata
- Fixed a crash when passing large amounts of metadata in
Client::CreateOrJoinLobbyWithMetadata
1.5 (2025-08-13)
DM History Support
With the release of DM chat history this patch, the Social SDK can now fully support asynchronous player communication between individual players and in larger chat rooms. Players who go offline or background the came can come back to the history of the chat room and get caught up with what’s happening.
- Added
Client::GetUserMessageSummaries
and Client::GetUserMessagesWithLimit
to retrieve direct message history
Rich Presence
Rich Presence can now more accurately display the different types of activities a player might be engaged in. Specifically, the “Competing” status may be valuable for games that host tournaments, weekend brackets, or other competitive play. Also, when you receive game invites, you can now accept them cross-device; don’t miss the group forming even if you’re AFK.
- Added support for additional activity types (Listening, Watching, Competing)
- Added support for new clickable URL fields and additional user status customization
- Support for server-to-server rich presence invites and gateway-based invite handling. This means an invite can be accepted on a different device and the
ActivityInviteCreatedCallback
will be invoked on connected SDK sessions.
Linked Channels
Linked channels are all about keeping groups of friends connected in and outside the game. You can now join a player to channel’s linked Discord server from in-game, helping them bridge that gap and stay connected with friends even when they stop playing.
- Added
Client::JoinLinkedLobbyGuild()
to allow members of linked lobbies to join the linked lobby's guild from in-game
Android
The many-step process of mobile account linking has been simplified for users with Discord installed by deep-linking into the Discord mobile app to authorize with your game
- Implemented native authentication support
- Fixed native authentication callback when activities are terminated
- Added an experimental audio setting on Android to avoid setting the OS to voice comms mode when connected to a Bluetooth headset on Android. This may be used if you wish to avoid the transition to voice volume controls and other related changes when connected to Bluetooth. To enable this setting, pass a
ClientCreateOptions
when instantiating the client and set the experimentalAndroidPreventCommsForBluetooth
flag
iOS
The many-step process of mobile account linking has been simplified for users with Discord installed by deep-linking into the Discord mobile app to authorize with your game
- Added native authentication support
- The experimental Game audio subsystem now makes use of the iOS 18.2+ echo canceller when available and falls back to Standard mode otherwise.
Windows
Linux
- Ensured glibc 2.31 compatibility
Bug Fixes
- Fixed bug where
Client::SetVoiceLogDir
didn’t have any effect
- Added better error event handling to distinguish server authorization errors from user cancellations
- Fixed activity platform validation for console games
- Fixed crash safety issues with
Client::GetCurrentUser
when the client is in an unexpected non-Ready state. Added Client::GetCurrentUserV2
which explicitly returns an optional handle instead of dummy data in this situation. This issue also affected the Unity and Unreal versions of the SDK
- Fixed
Call::SetPTTActive
Known Issues
- When the network is disconnected temporarily, active Calls may sometimes enter the Disconnected state instead of reconnecting. If a Call reaches Disconnected state, you must end and rejoin the call to reconnect if desired.
- For DM chat history
- No SDK-side caching for
GetUserMessagesWithLimit
- Every invocation of
GetUserMessagesWithLimit
will directly query the backend rather than using local SDK-side caching. This may have performance implications, particularly under high-frequency usage.
- Provisional account merge message retrieval
- After a provisional account is merged into a full account, messages sent while the user was on the provisional account cannot be retrieved.
1.4 (2025-06-26)
Lobby Chat History
- Added
Client::GetLobbyMessagesWithLimit
to retrieve lobby message histories based on a provided lobby ID, with a maximum of 200 messages and up to 72 hours.
- Only messages from lobbies the user is currently a member of can be retrieved.
- DM history will be coming soon too!
Unified Friends List
- Added
Client::GetRelationshipsByGroup
which both logically groups a user’s relationships for the purpose of rendering a friends list and sorts users based on our Unified Friends List design guidelines. Before, it was necessary to call Client::GetRelationships
and manually partition each relationship into the appropriate friend group, as well as write your own sorting operations.
- Added
Client::SetRelationshipGroupsUpdatedCallback
which fires whenever a user change occurs which could invalidate a previously sorted friends list retrieved from Client::GetRelationshipsByGroup
. Call Client::GetRelationshipsByGroup
again to maintain an up-to-date friends list.
- Added
IsSpamRequest
to RelationshipHandle
, returns true
if Discord believes the request to be spam.
Audio Changes
- A new experimental audio mode has been added for mobile devices which uses standard media audio streams instead of voice-specific processing. On iOS this causes the voice engine to use the Remote I/O Audio Unit instead of Voice Processing I/O and likewise on Android, media stream types are used instead of voice communication types. This mode may be enabled by creating a Client with a
ClientCreateOptions
parameter whose experimentalAudioSystem
property is set to AudioSystem::Game
. In this case, you should also set Client::SetEngineManagedAudioSession
to true. We do not recommend using this for production - however, if you are interested in trying it out, we are looking for feedback!
- Added
Client::SetAecDump
to enable recording of audio diagnostic information.
Auth
- Publisher Auth
- Publisher Auth is a new feature which makes authorization easier for publishers with multiple games. This is an early release of this feature and only available to a limited number of partners for now.
- Added
Client::ExchangeChildToken
to facilitate child token exchange for public clients. Confidential clients will require a server to server implementation, but this method may be useful for development.
- Invites from sibling applications will be visible to the SDK. They can be identified by the
applicationId
field on the ActivityInvite
payload.
- Messages sent from other sibling applications will be visible to the SDK. They can be identified by the
ApplicationId
method on the MessageHandle
.
- Added
Client::RevokeToken
and Client::UnmergeIntoProvisionalAccount
to allow games leveraging Public Clients to perform token revocation or unmerge operations directly from clients.
Android
- The SDK is now compatible with 16KB page size.
Misc
- Improved activity serialization, avoiding including null/empty keys in the JSON payload.
1.3.9273 (2025-06-05)
PlayStation
- Added missing linker stubs to Unreal packages
1.3 (2025-06-02)
Auth
- Added an
APPLICATION_DEAUTHORIZED
webhook event which can be configured in the developer portal. When a user unlinks their account or revokes authorization for your application in any way, this event will be sent to configured webhooks. The payload will contain serialized user information. See https://discord.com/developers/docs/events/webhook-events for more information on configuring webhook events. Documentation is coming soon, but check the developer portal for details in the meantime.
PC
- Added configurable request timeout SDK HTTP client requests. Support is on PC in this release with console and mobile support coming in future release. Timeout default value is 30000ms (30 seconds) and can be configured using the new Client API: Client::SetHttpRequestTimeout
- Fixed a crash that can occur when handling certain failed HTTP requests
Mobile
- SetSpeakerMode is now deprecated. Unless SetEngineManagedAudio is used, audio routing will be handled automatically by the SDK
Android
- Fixed routing of game and voice audio when external audio devices are connected and/or disconnected. SetEngineManagedAudio has been added to communicate that the SDK should not manage audio routing and automatically enter and leave MODE_IN_COMMUNICATION when joining and leaving calls.
- Fixed an issue with the Authorize method when a device configuration change needs to restart the activity
iOS
- Various fixes for audio routing and session management. When using the Unity plugin, game audio will no longer stop playing when ending a call. For standalone SDK use, a method SetEngineManagedAudio has been added to communicate that the SDK should not automatically start and stop the AVAudioSession when joining and leaving calls.
- Corrected supported platform values in Info.plist for iOS .frameworks.
Consoles
- Standalone archives now only contain console-specific files, like the Unity and Unreal Engine archives
Misc
- Fixed a thread safety issue with Client::AddLogCallback
- Added [Flags] declaration for bit flags enums in C#
1.2.8730 (2025-05-08)
- Resolved load errors on iOS 11. Note that the minimum version supported for
Client::Authorize
support remains iOS 15. Support for legacy iOS versions is limited to provisional accounts at this time.
1.2 (2025-05-05)
Rich Presence
- Added support for adding custom buttons on activity cards via
Activity::AddButton
Packaging
- Unity and Unreal plugin artifacts now contain just the additional files for console support so they can be extracted on top of the base plugin
- Unity plugin is now packaged as a .zip that you should extract inside the Packages directory of your project to enable the above
- Console archives now contain a small README with some console-specific documentation
Misc
- Added
Client::OpenConnectedGamesSettingsInDiscord
for deeplinking into Discord's settings for connected games, which provides players some control over who can DM them
- Fixed a hang that could occur on Linux in
Client::RegisterLaunchCommand
and Client::RegisterLaunchSteamApplication
Client::RegisterLaunchCommand
and Client::RegisterLaunchSteamApplication
now work from inside the Steam Runtime on Linux
- Fixed a crash on exit that could occur when there were pending callbacks in the queue
1.1.8318 (2025-04-18)
Platforms
- Playstation standalone archives now include linker stubs
Voice
- Fixed a regression in audio playback on Linux
1.1 (2025-04-11)
Platforms
- Added Xbox One and PS4 console support
Auth
- Added support for Unity Services as an external auth provider
Voice
- StartCallWithAudioCallbacks now permits sample data to be modified during record and playback for custom effects processing
- Fixed a bug where the speaking state for a user could be stuck in the "on" state
- Added discordpp::Call::GetPTTReleaseDelay
- Initialization of the voice engine is now delayed until it's needed
- Fixed a deadlock with the Linux PulseAudio backend where malfunctioning audio devices could cause a voice engine lockup
Rich Presence
- Added support for sending rich presence updates and invites without connecting to the Discord gateway on desktop
Misc
1.0 (2025-03-26)
Downloads
Downloads for the SDK can now be found on the developer portal. If you go to https://discord.com/developers/applications and click on your application you should have a new "Discord Social SDK" section in the sidebar (shown below) and you can download the latest release from there.
API Cleanup
In the 1.0 release, we removed all APIs that were previously marked as deprecated. Additionally we had to make one additional breaking change from the previous release. Before we had a single Client::GetDefaultScopes
function that returned the oauth scopes to use, but we planned on separating these.
Client::GetDefaultPresenceScopes
now returns an oauth scope that will enable: account linking, the friends list, rich presence, provisional accounts, and activity invites.
Client::GetDefaultCommunicationScopes
now returns an oauth scope that will enable: user DMs, lobbies, linked channels, and voice chat, in addition to everything in the presence scopes.
Client::GetDefaultCommunicationScopes
is the exact same as what your integrations have been using so far, so just switching to that will be a noop, it returns the exact same oauth scopes as before and nothing else has changed.
However, if you are not planning to use DMs or Lobbies, you should consider switching to Client::GetDefaultPresenceScopes
, since that way when users go to authorize the integration, they will only see the scopes that your integration is actually requesting, and won't wonder why you are requesting messaging permissions when you don't use them. If you have any questions about this though, please reach out!
Going forward, we are also enabling linked channels by default for apps that use the "communications" scopes, however, that change was not retroactive, so if you plan to use linked channels, please reach out to us when you are ready and we can turn that on for you.
Voice
- Ensure that when a call is ended the participant always notifies the server they have left
- Added
Call::GetVADThreshold
- Fixed a subtle regression in
Client::SetSelfDeafAll
- Documented that
Client::StartCall
will return null if attempting to start a call in a lobby while already in a call for that same lobby
- Fix a crash that occurs in lobby voice after network drop out on Xbox
Presence/Invites
- Fixed a crash when a non-friend user sends an activity invite to a lobby
- Fixed that for provisional accounts, who also had the discord desktop app running, presence would not be cleared when the SDK was shutdown but the game was still running.
- When publishing rich presence, the Joinable flag will only be set on the Activity if valid party information is present so that the Discord apps do not render the rich presence as joinable which can lead to an error
- Fixed
UserHandle::Status
and UserHandle::GameActivity
not including information about the current user
- Improved the docs around RegisterLaunchCommand
C/C++ APIs
- Fixed the internal C api (which we don't recommend using) to not crash if a nullptr is passed to the free function
- Fixed
Discord_SetGlobalAllocator
was not exported
- Removed
DiscordObjectState::Unowned
since it was never used
Misc
- Fix an issue with the SDK getting not reconnecting after a temporary disconnection
- Fix an occasional crash in the Unity editor on domain reload because of a stale callback queue
- Reduced how frequently the SDK tries to RPC to the Discord desktop app
- Fixed the Discord desktop RPC client getting behind if there were a number of RPCs sent at once
- Signed the binaries for mac
- Fixed the validation code in
AcceptGameFriendRequest