EOS Online Subsystem: Epic Online Services for Unreal Engine [FREE EDITION NOW AVAILABLE]

Hi everyone! For the past two months I’ve been working on a plugin to integrate Epic Online Services into Unreal Engine. It implements the Online Services Subsystem API for EOS.

Right now it has the following features:

  • Built-in authentication: Just call AutoLogin and all the complexity of logging in with EOS Auth/Connect is handled for you.
  • Friends: Not only does it support pulling friends from EAS, it can also unify friends from the native subsystem (so if someone is playing through Steam, they will see their Steam and Epic friends in one unified list).
  • Sessions: Create and find sessions for both peer-to-peer and dedicated server games. The plugin also handles discovering the public IP address for dedicated servers when they’re hosting sessions.
  • Parties & invites: Full support for EOS parties, including joining parties through the Epic Online Services overlay and sending invites to other players. You can even send invites to players on other platforms (Steam, etc.) and the plugin will automatically handle getting players into the party when the game is launched on that other platform.
  • Presence: Support for EOS presence, such as setting a player’s status.
  • Peer-to-peer networking: Connect players over the EOS peer-to-peer networking API. Supports cross-play between platforms.
  • Stats, achievements and leaderboards: Upload stats, unlock achievements and submit records to leaderboards.
  • Player Data Storage: Store and retrieve user data through the User Cloud interface.
  • Title Storage: Download content on-demand through the Title File interface; you can use this for downloading e.g. DLC etc when it’s needed.

Plus a few notable extras:

  • Play in editor support: Now you can test your online functionality without setting up multiple computers (like you need to with Steam).
  • Platform support: Currently supports Windows, Mac, Linux, iOS, Android and Nintendo Switch. Support for other consoles is in progress.
  • Free edition: If you earn less than $30,000 USD/yr, don’t need source code and don’t need support, you can use the Free Edition of the plugin.
  • Blueprint support (additional purchase): Access EOS from blueprints by purchasing Online Subsystem Blueprints.

Visit the website

Buy now on Marketplace ($119 USD)

Download the Free Edition


Use Epic Online Services in Unreal Engine! With support for authentication, friends, sessions, parties, presence, stats, achievements, leaderboards, Player Data Storage, Title Storage and peer-to-peer networking, this plugin has what you need to build games on top of EOS.

It supports neat features, like showing a unified friends list of friends from both the native platform and Epic. It allows you to seamlessly invite friends to parties from other platforms like Steam, and it fully supports play-in-editor so you don’t need to set up multiple machines to do your testing on.

Authentication is handled for you. You don’t need to deal with account linking or creation, and you don’t need to build user interfaces to support the Epic Online Services login flow. Just call AutoLogin and you’re done.

If you’re a developer earning less than $30k USD/yr, a Free edition is available. Check the website to see if the Free edition is right for you.

If you need blueprint support, check out Online Subsystem Blueprints. EOS Online Subsystem only provides C++ support by default, so if you need blueprint support, you will need to buy OSB as an additional purchase.

Purchasing the EOS Online Subsystem plugin entitles you to source code access and support. Upload your receipt to the License Manager to access support and source code.

Forgot to post these update announcements here, so here’s the two most recent releases that came out:

Release 2020.09.16

This release brings the following changes:

  • Android is now supported. This includes support for signing in with an Epic Games account.
  • Nintendo Switch is now supported for registered Nintendo Switch developers using a source version of the plugin. If you are currently using binaries from the Marketplace through the Epic Games launcher and are developing for Nintendo Switch, please follow the instructions in the License Manager to access the Nintendo Switch support.
  • Improvements to documentation, including the addition of video guides on how to configure the plugin.

Release 2020.09.13

This release brings the following changes:

  • Developers can now override the UMG widgets used in the Authentication Graph. Refer to the documentation on customing the login UI for more information.
  • The Redpoint Games License Manager can now be used to manage your access to source code and support (instead of direct messaging receipts on Discord).
  • The networking driver can now be used for both P2P and IP-based connections. The documentation has been updated to recommend developers enable the networking driver in all games.
  • Fixed an issue where the authentication graph would crash if the map changed between starting the authentication process and it attempting to display UI.
  • Fixed an issue where an EOS account could not be created if signing in with an Epic Games account for the first time.
  • Allow the native platform library loaders to override the default authentication graph. This is used on console platforms to replace the authentication graph entirely.
  • Fixed an issue where retrieving the friends list would fail if an Epic account didn’t have any friends (instead of it returning an empty friends list).
  • Added support for reading and writing party and party member attributes in the party interface.
  • Added support for firing the party member joined/left/promoted events in the party interface.
  • Added support for firing the party data and party member data events in the party interface.
  • Along with the networking driver update to support both P2P and IP-based connections, the session interface will now automatically use the public IP address of the server (as detected by the EOS backend) when listening on an IP-based connection. This will be the true public IP address of the server (as you would find out through “What’s my IP” services).
  • Added support for the IOnlineUser interface, which can be used to lookup arbitrary user accounts and resolve external platform IDs to product user IDs (such as converting a Steam user ID into an EOS product user ID).

Here’s the latest changes (from newest to oldest). In case you missed it, the Free Edition is now available. You can find out more about the Free Edition on the website:…ocs/licensing/

Release 2020.10.05

This release focuses on fixing bugs and issues identified in the last major release:

  • Fixed a crash that would occur when using unsupported session attribute types with CreateSession or UpdateSession.
  • Fixed a crash that would occur if you left either ClientId or ClientSecret unset in the config.
  • Fixed listen servers being incorrectly detected as dedicated servers.
  • Fixed the product user ID not being available for API calls when running as a dedicated server.
  • Fixed a crash that would occur if the EOS online subsystem failed to initialize, but then the engine created a UEOSNetDriver for a network connection. This could happen if you configure the plugin incorrectly, and then attempt to start a multiplayer game in the editor.
  • Fixed dedicated servers not having their ports registered correctly with the EOS Sessions service.
  • Skip calling the player metrics APIs for the dedicated server (as it is not a player).
  • Support falling back to local IP addresses when connecting to a dedicated server in development. This allows you to test dedicated servers in the editor without any additional configuration.
  • Fixed connections to dedicated servers not working correctly if the server was listening on a port other than 7777.
  • Prevent two local users signing in with the same EOS account. This is not a supported scenario and may have previously introduced other issues. Now the authentication system will prevent a user from signing in if there is already another local user signed into that account.

Release 2020.10.03

This is a major new release with tons of new features and improvements. With this release, the plugin now supports all Epic Online Services APIs. It’s also the first official release of the Free Edition!

  • The Free Edition is now available! You can download it from the License Manager.
  • User Cloud (Player Data Storage) is now implemented. You can use this interface to store and retrieve player data across platforms.
  • Title File (Title Storage) is now implemented. You can use this store and retrieve game-specific data such as DLC downloads, etc.
  • Achievements, stats and leaderboards are now all implemented.
  • Metrics are now implemented. This comes in the form of an improvement to the sessions implementation, as it now makes the appropriate metrics API calls when players join or leave sessions.
  • Linux is now supported as a platform.
  • The plugin now adds a dropdown to the Level Editor Toolbar, allowing you quick access to settings and documentation.
  • You can now configure the plugin settings through the “Project Settings” window instead of editing .ini files.
  • Fixed an issue where the unit tests module could prevent Hot Reload from working for developers using a source version of the plugin.

Release 2020.09.23

This release brings the following changes:

  • EOS SDK 1.8 is now supported. The new Title Storage API is not yet supported.
  • EOS SDK configuration has now been converted to an external module (EOSSDK) instead of requiring you to call EOSSDK.AddToModule(…). This change only impacts you if you are linking against the EOS SDK in C++ modules (for example, if you have custom code that uses the EOS SDK APIs directly). You should now add EOSSDK to your PrivateDependencyModuleNames instead.
  • Significant refactoring in the way the plugin handles string values and IDs, to fix some hard to diagnose heap corruption bugs.
  • Developers using the plugin in a source build of the engine can now enable Steamworks support by adding ProjectDefinitions.Add(“ONLINE_SUBSYSTEM_EOS_ENABLE_STEAM=1”); to their .Target.cs files. The previous way of configuring plugin build behaviour through environment variables is deprecated and will be removed in a future version. If you are using the plugin from the Marketplace, the Free Edition or using the plugin source code with an engine installed through the Epic Games Launcher, this change does not impact you (Steamworks support is always enabled in those builds).
  • The ProductName and ProductVersion configuration values now have default values, to allow the EOS SDK initialize even when not fully configured yet.
  • Significant work has been done to add automated tests (with code coverage) to the plugin. This will allow us to improve reliability and stability as future versions are released.

Here’s the latest updates since I last posted here. For the latest updates you can also join our Discord or follow us on Twitter.


This release adds support for EOS SDK 1.9, extends cross-platform party invites to all authentication modes and fixes a wide range of bugs:

  • Breaking Change: The ToString() function of FUniqueNetIdEOS now only returns the product user ID (without the Epic account ID). This makes the result unique per user and suitable to use as a key for TMap<>. Previously you could get two strings for the same user (one with the Epic account ID and one without) depending on where you obtained the user ID from. To access the Epic account ID going forward, you can either use ToDebugString, cast the instance to FUniqueNetIdEOS and use GetEpicAccountIdString(), or query for the full user account using the user/identity APIs and obtain it from the user attributes.
  • Added support for EOS SDK 1.9. This does not yet add support for the new modding APIs.
  • Added support for Unreal Engine 4.26 Preview 4. No changes were required to support this release, but Preview 4 has now been tested with this release of the plugin. Support for Preview 4 is only available for Marketplace Edition users building from source.
  • Added support for the IOnlinePartySystem::RestoreInvites function. You should call this when your game starts up and is ready to display invite notifications in-game.
  • Added an internal type TUserIdMap<> which is a variant of TMap<> that uses unique net IDs as it’s keys. This type ensures that the map is unique per each ID value, rather than each pointer (when using TSharedPtr<const FUniqueNetId>). Although this is an internal type, it is a header-only implementation which you may find useful to copy into your own project if you’re managing unique net IDs in C++. It is located in OnlineSubsystemEOS/Shared/UniqueNetIdEOS.h for Marketplace Edition users.
  • Cross-platform party invites now work in NoEAS and EASOptional authentication modes. Previously they were unnecessarily restricted to EASRequired.
  • Fixed an issue where a player’s login would expire, and the plugin did not refresh credentials in response to the authentication expiry event. The plugin now attempts to refresh credentials when needed so that users do not get logged out.
  • When the EOS SDK signs out a user (due to credentials not being refreshed), the logout event will now be fired on IOnlineIdentity. Once the EOS SDK signs out a user, no further API calls will work until you sign the user in again.
  • Fixed an issue where calling IOnlineFriends::ReadFriends in NoEAS and EASOptional authentication modes would cause an error to be logged to the console, if the user was not signed into an Epic Games account.
  • Fixed an issue where FOnlinePartyIdEOS was relying on the lifetime of the EOS_LobbyId pointer, which was managed by the EOS SDK. In some circumstances, this led to the FOnlinePartyIdEOS referencing an invalid pointer after it was initially obtained.
  • Fixed an issue where the Discord authentication module did not correctly reference the Discord plugin for linking.
  • Fixed an issue where the IOnlinePartySystem::SendInvitation function could fire it’s delegate twice if the underlying EOS SDK call failed.
  • Fixed an issue where the IOnlinePartySystem::SendInvitation function could fail if you called it too soon after creating the party. It will now retry up to 3 times with exponential backoff.
  • Fixed an issue where the IOnlinePartySystem::RejectInvitation function did not correctly compare user IDs and thus it would never reject invitations.
  • Fixed an issue where the IOnlinePartySystem::RejectInvitation function did not remove invites from the plugin’s local cache of invites.
  • Fixed an issue where the IOnlinePartySystem::RejectInvitation function could log an error if the online subsystem shutdown before the call was able to complete.
  • Fixed an issue where invitation events could be fired even if the user is already in the party that the invitation is for. Instead, these events are now silently discarded.
  • Fixed a few areas of the plugin where local EOS structures and pointers were not initialized correctly. This could impact shipping builds. As part of this process, an Unreal Engine C++ linter was implemented and added to the source code repository. If you are a Marketplace Edition user and you are writing code directly against the EOS SDK, the source code for the linter is available so you can adapt it to check for issues in your own C++ code.
  • Fixed the URL of the “Getting Started” link in the License Manager for EOS Online Subsystem (Free Edition). This now links correctly to the documentation.
  • Added unit tests around sending and rejecting party invitations.


This release adds features to authentication, improves documentation and fixes platform specific issues:

  • Added Discord authentication to the repository. Due to Discord Game SDK licensing restrictions, Discord authentication is only available to Marketplace Edition users that are using a source-based version of the plugin.
  • Added exchange code authentication support for games shipping on the Epic Games store. This is experimental so if you run into any issues, please notify support.
  • Documented how to enable Steam and Discord authentication in games.
  • Documented the supported attribute types when creating or updating sessions.
  • Documented how to handle connection failures when using the session subsystem.
  • Documented how to uninstall the plugin if you need to remove it from your project.
  • Fixed a crash that would occur in packaged Nintendo Switch builds when the game could not load the EOS SDK.
  • Fixed a crash that would occur in iOS games, caused by incorrect linking settings.
  • Fixed a crash that would occur when you attempted to use server travel. Seamless server travel now works as expected, though non-seamless server travel does not. Epic Games has recommended seamless server travel since at least 2015, so if you have a particular need to use non-seamless server travel in your game, please reach out to support in the Discord server.
  • Fixed an issue where the cache path was incorrectly set on iOS, preventing the SDK from starting up correctly.
  • Fixed an issue where ULocalPlayer::GetPreferredUniqueNetId would always return null.
  • Fixed an issue where building for Android would fail if you were using the 1.8 SDK.
  • Fixed an issue where for some games packaged for Android, the build process would fail due to missing (optional) files.
  • Moved the Steam authentication implementation and the default platform implementation into their own modules. This change should not impact any developers, unless you’re referencing plugin internals.


This release fixes a few critical bugs, including an issue that would prevent packaging projects using the Free Edition:

  • Fixed an issue where Free Edition users could not package projects, due to EOSSDK not being included in the list of dependency module names for OnlineSubsystemEOS.
  • Fixed an issue where the engine would call AutoLogin when starting a multiplayer session. For accounts that were not logged into an Epic Games account in EASOptional mode, this would cause an Epic Games login prompt to appear, as the AutoLogin call was treated as a “link an Epic Games account” request.
  • Fixed Unreal Engine 4.24 compatibility for source builds of the Marketplace Edition.
  • Clarified documentation on where the plugin expects the EOS SDK to be installed.

@ hach-que
After Updating to Version: 2021.07.30,It Says Invalid License Key For EOS,Please report this issue to developer how can I solve this .However I entered correct license key and it was working before this update.