Release Notes
1.0.0
Preview
Build 148 (Aug 19, 2026)
Breaking Changes
- Header files moved into namespace subdirectories
- PropertyValue was replaced by RealtimeValue
- PropertyMap was replaced by RealtimeMap
- To subscribe to events switch from using
client.OnEvent.Subscribe()toclient.SubscribeEvent() - Removed SerializationProtocol
- Remove AsyncRandomLobby
- Renamed LogLogLevels to PrintLogLevels
- Changed PhotonCommon namespace to RealtimeCore::Common
- Changed PhotonMatchmaking namespace to RealtimeCore::Matchmaking
What's New
RealtimeValuetype as a variant type that wraps different types, including custom types, to send them over the networkRealtimeDictionarytype as a key/value store that can be sent over the networkRealtimeMaptype as a key/value store that can be sent over the network, but in contrast to RealtimeDictionary it does not require all keys and all values to be of identical typesRealtimeClient::SubscribeEventto subscribe to a specific event based on the event code or based on type deductionRealtimeClient::SendEventoverloads forconst std::vector<uint8_t>&andconst RealtimeValue&- New Error Codes
EventDecodeFailed/EventEncodeFailedandEventPayloadTypeMismatchthat can be broadcast throughOnError - SubscribeEvent
(eventCode, callback) was added to subscribe to an event code with an expected payload type - PhotonConnect::getRefCount()
Changes
- The Android implementation of WebSocketConnect::stopConnection() now also log the line "Stopping the connection" at INFO level when it is called in a connected state like the other implementations, rather than "Stopping connection"
- (cherry picked from commit 3c3b832461f6a5cf600ea4dfe228184e46c3b94d)
- All implementations of WebSocketConnect::stopConnection() now log the line "Stopping the connection" at INFO level when they are called in connected state
- NOTE: before, behavior way varying - some implementations did not log at all, some had a slightly different log message, others logged that line even when the function was called in a disconnected state - now it's consistent across implementations
- NOTE: the GameCore implementation already behaved in the correct way, so no changes were required there
- (cherry picked from commit 1f08c7b1711240904d2d2fcd44d90f55385e74a5)
- SocketConnect::stopConnection() now returns ErrorCode::NET_ENOTCONN in case that it is called in a disconnected state, to match the behavior of the various implementations of WebSocketConnect::stopConnection()
- (cherry picked from commit fa21008716872c15038c389c3157e2f98d2e8d94)
- The destructor of class PhotonPeer now calls PeerBase::stopConnection() before releasing it's reference on the PeerBase
- NOTE: the recently added call to PeerBase::disconnect() does not lead to an immediate stop of the connection, but only informs the server about the disconnect and only calls stopConnection() once the server responds or a timeout kicks in
- NOTE: we can't really do a busy-waiting service()-loop in the destructor to await the server response or the timeout, as that would block the destructor for up to multiple seconds, hence we need the call to PeerBase::stopConnection()
- NOTE: it still makes sense to inform the server about the fact that the client is about to disconnect anyway before stopping the connection, even when we don't wait for the response, hence the code still calls PeerBase::disconnect() as well
- The access level for PeerBase::stopConnection() from protected to public, to make the aforementioned change possible
- PeerBase::stopConnection() now propagates the return value of PhotonConnect::stopConnection()
- (cherry picked from commit 1a806131ce2b3672eeda9524f5292d4baff7e135)
Removed
RealtimeClient::OnEventbroadcaster was removed in favor of the newSubscribeEventsubscription methods
Bug Fixes
- Fixed: Versioning for legacy build system"
- Fixed: This reverts commit b3d239eee1cfa9d29f46c6ee2e68f7e99797aa10
- Fixed: Versioning for legacy build system
- Fixed: In the Apple implementation of class WebSocketConnect, mpSocketImpl wasn't const correct
- Fixed: The Apple implementation of WebSocketConnect::stopConnection() did not safe-guard against being called on an already stopped connection
- Fixed: The Apple implementation of class WebSocketConnect does no longer retain itself and it's listener for the duration of the connection, as unlike for the other WebSocketConnect implementations, it's underlying WebSocket does not actually require it to do this, and there were rare edge cases in which the WebSocket would not properly call it's onDisconnect() callback, causing a memory leak
- Fixed: NOTE: removing the (apparently after fixes in previous revisions of WebSocketApple.mm no longer needed) return on error.code==1 in onDisconnect() made the leak even more rare than it already was before, but still did not prevent it entirely from happening
- Fixed: The destructor of class PhotonPeer now calls PeerBase::disconnect() to ensure that any background connection threads release any references that they might hold on the PeerBase immediately rather than only after a timeout, even when the user code did not call disconnect() before destructing the Peer
- Fixed: NOTE: this is only relevant for the background send/receive thread on the Switch and for the various WebSocketConnect implementations, as otherwise there is no background thread that holds a reference on the PeerBase and keeps it from getting deallocated while it is still connected
- Fixed: The reference to file DisconnectMessage.h in the Xcode project was broken
- Fixed: Outdated function naming in the comments in PeerState.h
- Fixed: In the Apple implementation of class WebSocketConnect the constructor parameter of type Logger was missing a parameter name
- Fixed: Moved the location of the declarations of retain() and release() within class PhotonConnect