Changelog
Version 2.8.0 (June 05, 2025)
Added support for Unreal Engine 5.6!
Version 2.7.1 (January 28, 2025)
Fixed an issue where joining a session always resulted in a failure when using the Steam Online Subsystem in Unreal Engine 5.5.
Version 2.7.0 (January 8, 2025)
Separated the
bUsesPresenceandbUseLobbiesIfAvailablesession settings. Previously the presence setting indicated "lobby API" usage. In short, this meant that a specific "lobby type" session was created on the online platform's backend. Now that these two settings are separated, presence can be toggled independently from "lobby API" usage. Since Kronos is intended to be used with listen servers, you should have thebUseLobbiesIfAvailableparam enabled at all times if you are using Steam or EOS.Added
bUseLobbiesIfAvailabletoKronosHostParams.Added
bUseLobbiesIfAvailabletoKronosSessionSettings.Added
bForceUseReservationsAlwaysoption toKronosConfig. If enabled, the matchmaking system will always request a reservation before joining a game. This is a workaround for an issue with the EOS Online Subsystem where currently session settings are returned in an incorrect state after a search.Added more descriptive on screen error messages to the example blueprints.
Added missing logs for the
bUseVoiceChatIfAvailablesession setting. It will also be displayed properly in the Gameplay Debugger as well.Fixed an issue where in rare cases the game would get stuck disconnecting from a session. This has happened in the Lyra Game project.
Version 2.6.0 (November 16, 2024)
Added support for Unreal Engine 5.5!
Manager classes have been moved into their own category in the plugin's settings.
Added an option to toggle plugin config validation on/off.
Fixed an issue where the editor would crash on startup if the party client or party state classes were empty in the plugin's settings.
Removed the deprecated
SEARCH_PRESENCEsession query setting from matchmaking.Removed the unused
SEARCH_USERsession query setting from matchmaking.
Version 2.5.0 (September 4, 2024)
Important: This release deprecates some functions in the plugin. These functions will continue to work for now but they will be removed in future versions. Please see the deprecation messages in the editor and update your project's code and blueprints accordingly.
The plugin is now fully compatible with the EOS Integration Kit.
Added a ready up feature to party clients. Each player now has a ready state which can be toggled using the
TogglePlayerIsReadyfunction of theKronosPartyClient. By default the ready state of players do not affect anything, however you can easily build systems on top of this (e.g. only enable the matchmaking button if all party players are ready).Added
GetPlayerIsReadyfunction toKronosPartyPlayerWidget.Added
OnPlayerIsReadyChangedevent toKronosPartyPlayerWidget.Added blueprint support for the native
NamedOnlineSessionstructure. Named sessions are sessions that the user has joined. Use this to access all properties of the session (e.g. session state, session settings, session id, etc..). Use theGetGameSessionandGetPartySessionfunctions to get the session data for matches and parties respectively.Added blueprint support for the native
OnlineSessionStateenum. You can now directly access the session state of named sessions by using theGetNamedSessionStatefunction. This is especially useful if you want to check whether session data exists or not for a match or party.The
KronosSessionSettingsstructure has been reworked to extend its functionality. Custom session settings can now be accessed through this structure directly.The
KronosUserManagernow handles cases where the user is already logged in with the Online Subsystem during initial user authentication.Added
bAuthenticationIsPassthroughoption toKronosConfig. This can be used to allow third party programs or plugins to handle authentication instead of Kronos. If enabled, the user will not be logged in with the Online Subsystem during user authentication.Added
kronos.LeaveMatchconsole command.Added
kronos.LeavePartyconsole command.The party creation process has been reworked a bit to avoid a case where the "party created" message would be visible in the logs too early when the party was not fully ready yet.
The settings page of the plugin has been moved to the "Game" category.
Reorganized blueprint function categories.
All base Kronos widget classes are now marked as abstract.
Fixed an issue where logic tied to static game mode events (e.g. user authentication, automatic reservation completion, etc..) would be called for incorrect PIE worlds. This issue could only ever happen in the editor when multiple clients were running at the same time.
Fixed numerous missing const specifiers from functions across the plugin's codebase.
Fixed a very rare crash in the
ProcessLoginfunction of theKronosPartyHost.Fixed potential crashes where an invalid unique id would be converted into string form.
Fixed an issue with the support link in the "Plugins" window.
Version 2.4.0 (June 19, 2024)
Added a new
KronosPlayerGrouperComponentto the plugin. This component automatically assigns a group index to all players based on their reservation data. Players who joined the game together (as a party) will have the same group index. Using this you can essentially tell which players were in a party before they joined the game. The component is fully replicated so clients can easily access this data as well. For more information please refer to the Player Groups section of the documentation.Added
ReservationCustomDatavariable to reservations. Using this you can assign custom data to each reservation after they were registered with theKronosReservationHost.Added
InitRegisteredReservationevent toKronosReservationHost. Use this event to initialize custom data for the given reservation.Added
ShouldCreateReservationHostfunction toKronosReservationManager. This function can be overridden to customize whether the reservation system should be initialized for the current game mode.Added
GetReservationToRequestfunction toKronosMatchmakingPolicy(C++ only) that lets you modify the reservation that is about to be requested with a session.Added
bLogReservationsvariable toKronosReservationHostwhich controls whether to list all reservations in the console when a reservation is added, removed, or completed. Previously this was tied to the verbosity level of the Kronos log category.Added
DestroyReservationBeaconsfunction to theKronosReservationManagerandKronosStaticsin case you need to manually clean up reservation beacons.Added
GetHostReservationsfunction to theKronosReservationManagerandKronosStatics.Added initial replication handling for the
KronosLobbyPawn. This system brings two new nodes to the pawn class. See below.Added
OnInitialReplicationFinishedevent toKronosLobbyPawn.Added
HasInitialReplicationFinishedfunction toKronosLobbyPawn. You can override this to set variable replication requirements. By default the pawn will wait for its player state, player name, and player id to replicate.The lobby pawn relocation system in
KronosLobbyGameStatehas been completely reworked. The new solution is faster and uses a more sophisticated approach to handling player spawns.Added
LeaveGameSessionfunction toKronosOnlineSession(C++ only) in case you want to manually request leaving an online match. Blueprint projects should keep using theLeaveKronosMatchnode same as before.Added an option to hide the custom placement category of Kronos from the Place Actors tab. This option is available in Project Settings -> Kronos Matchmaking.
Fixed an issue where reservation beacons would prevent net drivers from being garbage collected in some cases. This primarily happened in Lyra Game. For this, a new option was added to
ServerTravelToLevelfunction that ensures reservation beacons are properly cleaned up before traveling to a new map. This option is enabled by default, and it should only be disabled in very specific cases.Fixed an issue where in some cases the game would crash when joining the lobby due to the view target having an invalid world. This primarily happened in the editor when opening the lobby with multiple clients directly.
Fixed an issue where the debug arrow component of
KronosLobbyPawnandKronosPartyPlayerActorwould not be excluded from packaged projects.Blueprint assignable events now won't have "Event" included at the end of their names.
The variables in all Kronos classes are now properly initialized in class constructors only. Variables are no longer initialized inline in header files.
The plugin is now built in IWYU mode as per engine plugin standard.
Version 2.3.0 (April 24, 2024)
Important: This release contains minor API changes! For more information about the changes please refer to the API Upgrades documentation page. Please update your project's code and blueprints accordingly.
Added support for Unreal Engine 5.4!
The session cleanup process has been reworked. The system now cleans up the session properly in case the client fails to connect to the host. With this, a small API change is introduced. Please see below.
The
OnCleanupSessionevent has been removed fromKronosOnlineSession.Added
OnCleanupForDisconnectCompleteevent toKronosOnlineSession. This is the equivalent of the previous cleanup session event. The parent implementation of this event is what returns the player to the main menu. You can delay this implementation in case you don't want to leave immediately (e.g. show match summary first and wait for user input).Added
OnCleanupForTravelFailureCompleteevent toKronosOnlineSession. You can use this event to handle cases where the users fails to establish the initial connection with the host when connecting to an online match.Added
ModifyServerTravelURLfunction toKronosOnlineSession.Added
ModifyClientTravelURLfunction toKronosOnlineSession.The
GetInitialReplicationPropsfunction inKronosPartyClienthas been renamed toHasInitialReplicationFinishedto better describe the function's purpose.Exposed helper functions to blueprints that helps to determine which Online Subsystem is used by the project. For example
IsUsingNull,IsUsingSteam,IsUsingEOS, etc.Improvements have been made to the plugin's C++ API. The runtime module is now implemented in a dedicated source file called
KronosModule. This allowed us to create a globalKronos.hfile that all Kronos classes now include automatically. This way subclasses have access to all definitions and macros that are specific to the plugin without manually needing to include the Kronos header file.Fixed an issue where if the delays in
KronosConfigwere set to zero they would never finish instead of simply not having the function delayed.Fixed an issue where the
KronosLobbyPawnarrow component would be created in non-editor builds even though it was excluded from the header file already.Fixed an issue with the plugin's C++ API where previously some important protected member functions could only be called by base Kronos classes (due to using friend classes incorrectly).
Fixed an issue where an error log related to updating sessions would be formatted incorrectly.
Updated copyright notice in plugin source files.
Version 2.2.1 (November 29, 2023)
Fixed an issue where plugin validation would cause an editor crash in some cases.
Plugin validation error messages have been slightly rephrased.
Version 2.2.0 (November 19, 2023)
Matchmaking now handles session pinging with
SteamSocketsautomatically! Along with this, a complex session sorting algorithm has been implemented into the matchmaking pass. When ping data is available, the algorithm will sort sessions into ping buckets and then sort each bucket based on player count for efficient session filling.Added a new default authentication widget. The
SKronosDefaultAuthWidgetwas created in Slate to avoid referencing a Blueprint asset from C++. It will only be used when no auth widget class is selected in theKronosUserManager.Added an integrated configuration validator to the plugin which can display various error messages to the user such as missing or incorrect classes. A notification will also pop-up when an error is found. The validator runs after the editor is opened, and also after each PIE session.
Added
GetSessionPingfunction toKronosStatics.Added
GetSessionElofunction toKronosStatics.Changed several parts of the plugin's codebase to reduce if statement nesting. This results in better exception handling and error logging. Changes primarily include party and reservation beacon creation code, as well as how the plugin accesses the Online Subsystem.
Fixed an issue where the project could not be packaged. This was caused by a Blueprint asset reference to the old default auth widget in C++.
Fixed an issue where
FindFriendSessionfunction was still used when reconnecting parties even though we no longer preferred using it.Fixed an issue where the
BanPlayerFromSessionfunction would return failure when the given user was already banned.The
Kronosruntime module has been reworked to better segment its code.Plugin validation is now handled by the
KronosEditormodule entirely.
Version 2.1.0 (October 26, 2023)
Important: The matchmaking code no longer uses the
FindFriendSessionfunction of the Online Subsystem with Steam when following the party leader to a session. This function relies on presence information which fails if the user has his game presence hidden in Steam.The session invite system has been reworked to allow users to not only send but also receive and accept session invites directly in the game. This means you no longer have to rely on the platform's external UI (e.g. Steam Overlay) to handle invites. Please note that the Online Subsystem must implement the
OnSessionInviteReceiveddelegate in order for this system to work! Unfortunately Steam doesn't have this implemented by default. Session invites can still be accepted through the platform's external UI.Added new config param:
CanAcceptSessionInviteFromOnlineMatchesto allow users the ability to override the default behavior of party connection. If you enable this, make sure that everything is working correctly in your game. For more information please hover over the parameter and read its description.The default authentication widget in the
KronosUserManageris now assigned properly. You'll now be able to see the authentication state automatically without assigning a custom widget.Fixed an issue where the
UpdateKronosMatchandUpdateKronosPartyasync nodes would fail due to invalid world context object usage.Fixed an issue where the
KronosPartyStateclass would not compile if the engine was built from source.Fixed the function category of the
IsOnlineFriendValidnode.
Version 2.0.2 (September 13, 2023)
Fixed an issue where the project could not be packaged due to a bunch of weird blueprint linking compile errors. The issue was related to how the plugin assigned the default authentication widget class in the
KronosUserManager. As a temporary solution, the default auth widget will no longer be assigned from code.
Version 2.0.1 (September 11, 2023)
Fixed an issue where automatic user authentication would not start in PIE.
Fixed an issue where the
OnGameDefaultMapLoadedevent ofKronosOnlineSessionclass would not be called in PIE.
Version 2.0.0 (September 7, 2023)
Important: This release contains breaking changes! For more information about the changes please refer to the API Upgrades documentation page. Please update your project's code and blueprints accordingly.
Added support for Unreal Engine 5.3!
All subsystems of the plugin has been replaced by custom online manager classes that each handle one aspect of the online service such as user identity, matchmaking, parties, and more. The benefit of this is that you can now override the functionality of these high-level systems of the plugin. It also allows for better code structuring. These online managers are automatically spawned and managed by the
KronosOnlineSessionclass. You can override the manager classes through the plugin's settings.The plugin now features automatic user authentication. Authentication will be started automatically when the game default map is loaded (set in your project settings). While authentication is in progress, a widget will be displayed showing the current auth state. Once user authentication is complete, the
OnEnterGameevent of theKronosOnlineSessionwill be called. This is basically the entry point to the main menu. You can display the main menu widget from here. Automatic user authentication can be disabled in the plugin's settings. Furthermore, you can also override which map to treat as the game default map from there.Added new class:
KronosUserManager. This class handles user authentication, and implements online user related functionality such as online identity and friends. This class replaces both theKronosIdentitySubsystemandKronosFriendsSubsystem.Added new class:
KronosMatcmakingManager. This class replaces theKronosMatchmakingSubsystem. Functionality remains the same.Added new class:
KronosPartyManager. This class replaces theKronosPartySubsystem. Functionality remains the same.Added new class:
KronosReservationManager. This class replaces theKronosReservationSubsystem. Functionality remains the same.Added the ability to read the user's friends list, and invite friends directly. You no longer have to rely on the platform's external UI (e.g. Steam Overlay) to do so. Please note that accepting session invites are still only possible through the platform external UI. This will be implemented properly in the next update as well.
Added
ReadKronosFriendsListasync node to the plugin.Added
GetFriendfunction toKronosStatics.Added
GetFriendCountfunction toKronosStatics.Added
SendGameInviteToFriendfunction toKronosStatics.Added
SendPartyInviteToFriendfunction toKronosStatics.Added
KronosUserAuthWidgetto the plugin. This widget is designed to be displayed during user authentication. It has built-in events for when user auth is started/changed/completed. A default auth widget is included with the plugin. You can override this widget in theKronosUserManager.Added
OnGameDefaultMapLoadedtoKronosOnlineSession.Added
OnEnterGameevent toKronosOnlineSession.Removed
LoginUserasync node from the plugin as it was no longer needed. Login is now handled during user authentication by theKronosUserManagerclass.Removed
LogoutUserasync node from the plugin as it was no longer needed. Logout can be requested through theKronosUserManagerclass.Changed the accessibility of all delegates in C++ to private as per engine convention. You can access these delegates through their dedicated accessor functions instead. This change does not affect Blueprints.
The
KronosNameplateComponenthas been moved from "Lobby" to "Components" folder in C++ as it is usable outside of lobbies as well. This change does not affect Blueprints.Updated plugin icon.
Updated
README.txtin the plugin's resources folder.Note: Support for Unreal Engine 4.26 has been removed from active support. A custom build for this version can still be requested.
Legacy Versions
Changelogs for older versions of the plugin are available on the Legacy page.
Last updated