Supports Windows x64, Linux x64/arm64, Android x64/arm64, MacOS, iOS arm64 (iphone/simulator)
Disclaimer: This project is NOT affiliated with Epic Games Inc or Godot Engine. It doesn't endorse Epic Online Services. This project and sample Godot scenes are provided solely for educational purposes and may or may not comply with Epic Games' Design Guidelines, if you plan to release a game make sure you read the Guidelines and any other steps needed to release a public game like asking for user consent, option to delete user data, website with privacy policy and license, etc.
-
The High Level Epic Online Services provides easy to use methods and signals to interact with EOS recommended for beginners.
-
The GDExtension EOS provides advanced EOS usage not recommended for beginners. See
EOSandIEOSclasses.
Supercharge your Godot 4.2+ workflow with GDAI MCP – the ultimate Godot MCP server that lets AI tools like Claude, Cursor, Windsurf, VSCode and more automate scene creation, node editing, reading godot errors, creating scripts, debugging, and more.
Vibe code like never before!
đź”— https://gdaimcp.com
Following are the main classes in High Level Epic Online Services. They also have documentation in the Godot Editor:
A basic example of using High Level EOS:
# In main script
extends Node
func _ready() -> void:
# Setup HEOS Logs
HLog.log_level = HLog.LogLevel.INFO
var credentials = HCredentials.new()
credentials.product_name = "PRODUCT_NAME_NAME"
credentials.product_version = "PRODUCT_VERSION_HERE"
credentials.product_id = "PRODUCT_ID_HERE"
credentials.sandbox_id = "SANDBOX_ID_HERE"
credentials.deployment_id = "DEPLOYMENT_ID_HERE"
credentials.client_id = "CLIENT_ID_HERE"
credentials.client_secret = "CLIENT_SECRET_HERE"
# optional
#credentials.encryption_key = "ENCRYPTION_KEY_HERE"
var setup_success := await HPlatform.setup_eos_async(credentials)
if not setup_success:
printerr("Failed to setup EOS. See logs for more details")
return
# Setup Logs from EOS
HPlatform.log_msg.connect(_on_eos_log_msg)
var log_res := HPlatform.set_eos_log_level(EOS.Logging.LogCategory.AllCategories, EOS.Logging.LogLevel.Info)
if not EOS.is_success(log_res):
printerr("Failed to set logging level")
return
HAuth.logged_in.connect(_on_logged_in)
# During development use the devauth tool to login
HAuth.login_devtool_async("localhost:4545", "CREDENTIAL_NAME_HERE")
# Or login without any credentials
# await HAuth.login_anonymous_async()
func _on_logged_in():
print("Logged in successfully: product_user_id=%s" % HAuth.product_user_id)
# Example: Get top records for a leaderboard
var records := await HLeaderboards.get_leaderboard_records_async("LEADERBOARD_ID_HERE")
print(records)
func _on_eos_log_msg(msg: EOS.Logging.LogMessage) -> void:
print("SDK %s | %s" % [msg.category, msg.message])
- Authentication (Epic Games, Steam, Discord, Anonymous etc)
- Social Overlay on Windows
- Achievements
- Stats & Leaderboards
- Lobby, Sessions and Multiplayer
- Voice
- Metrics
- Mods
- Player/Title data storage
- Progression Snapshot
- Reports and Sanctions
- Ecommerce (Ecom Epic Games Store)
- AntiCheat
A simple demo showcasing P2P multiplayer using Epic Online Services: Click Here
Making this project took a lot of time and effort, reading the Epic Online Services documentation countless times and testing each method in Godot. I would really appreciate if you could support the project in any way.
Join the Discord server for discussing suggestions or bugs: 3ddelano Cafe
This project uses GDExtension to wrap the Epic Online Services C SDK so that it can be easily used in Godot using
GDScript, C#, etc with similar class hierarchy and static type support. It makes use of signals for sending events like
user login, logout, achievement unlock, etc.
This is a regular plugin for Godot 4.2+. To install the plugin follow the steps below:
- Asset Library link: View the plugin on Godot Asset Library
- In the Godot editor, navigate to the
AssetLibtab, and in the search bar typeEOSG. - Click on the plugin with name
Epic Online Services Godot (EOSG)by3ddelano - In the popup that opens, click the
Downloadbutton. - Once the download is done, click the
Installbutton. - Goto
Project->Project Settings->Pluginsand enable theEpic Online Services Godot 4.2+ (EOSG)plugin. - Restart the godot editor.
- You can now use the plugin. Head to the Documentation for more information on how to use the plugin.
- Goto the Releases section and download the latest release
- Extract the zip file and copy the
addons/epic-online-services-godotfolder into theres://addons/folder of your project. If theres://addonsdoes not exist, create it. - In the Godot editor, goto
Project->Project Settings->Pluginsand enable theEpic Online Services Godot 4.2+ (EOSG)plugin. - Restart the godot editor.
- You can now use the plugin. Head to the Documentation for more information on how to use the plugin.
- Godot Engine 4.2+ (Get it here Godot Engine Download)
- Epic Online Services C SDK (Download from Epic Developer Portal)
- Make sure you have accepted the Terms and Conditions for Epic Online Services
- A product registered with Epic Games Services (Make one for free Epic Developer Portal)
To develop this plugin, follow the below steps:
-
Download/clone the repository.
-
Extract the
EOS C SDKzip downloaded from Epic Games, rename it toeos-sdkand paste it in thethirdparty/folder. Refer to the below folder structure.
-
Build the GDExtension plugin in debug mode (With debug symbols)
# In root folder scons platform=<platform> target=template_debug dev_build=yes
Eg.
scons platform=windows target=template_debug dev_build=yes -
Build the GDExtension plugin for release (Optimized)
# In root folder scons platform=windows target=template_release -
The built GDExtension library will be in the
res://addons/epic-online-services-godot/bin/folder of the sample project.
If you get an error Not allowed to attach to process trying to debug GDExtension on MacOS using LLDB. Run the below
command:
codesign --entitlements debug-entitlements.plist -f -s - /Applications/Godot.app/Contents/MacOS/GodotThe sample Godot project is located in the sample folder
-
Clone/Download the repo.
-
Download the latest release from the Releases section and replace the existing
/addons/epic-online-services-godotwith the one from the Release (this includes the built shared libraries). -
Copy your credentials (
Product Id,Sandbox Id,Deployment Id,Client Id,Client Secret) of your Epic Games "Product" from the Epic Games Dev Portal and paste them inMain.gdscript in the relevant sections. The encryption key is a random 64 character long string. These credentials need to be kept as private as possible. One way is to make sure to encrypt all scripts when exporting the final game. ( See Compiling with script key encryption) -
Configure your Product on the EOS Dev Portal with the following configuration:
- In the
Client Policiessection inProduct Settings, for the Client policy type chooseCustom policy, enable theUser is requiredand enable every features and action exceptConnect(Trusted Server Required). This will allow the sample to access the different services provided by Epic Online Services. In your actual game, the client policy is important and you should give minimal permissions to features. - In the
Permissionssection ofEpic Account Services, enable all three:Basic Profile,Online PresenceandFriends. - (Optional if you want some pre-made achievements)
In the
Achievementssection inGame Services, use theBulk Importoption and import theHelloProduct.zipfile located atres://HelloProduct.zip
If you want to use the Account Portal login option in Epic Online Services, you need to bootstrap the Godot/Game
executable as needed by EOS-SDK 1.15 and greater.
See Redistributable Installer
A sample of the generated .ini file for the Godot Editor is shown below (during game development):
ApplicationPath=Godot_v4.2.0-stable_win64.exe
WorkingDirectory=
WaitForExit=0
NoOperation=0
Follow the instructions in Running the service for local development and:
-
During game development
Bootstrap the Godot Editor executable (eg.
Godot_v4.2.0-stable_win64.exe) to test theAccount Portallogin -
After exporting the game
Bootstrap the exported game executable (eg.
My Amazing Game.exe)
Use a community created Android Export Plugin
Or follow the steps below to manually export for Android.
-
Setup the
Android Build Templatein your Godot project by following the tutorial Gradle builds for Andriod. This will create an android project inres://android/build. -
Now with reference to the tutorial Add the EOS SDK to Your Android Studio Project, perform the following steps.
-
In the
res://android/build/build.gradlefile, add the following lines after the implementations in thedependenciessection.Before
dependencies { implementation libraries.kotlinStdLib implementation libraries.androidxFragment ... other code
After
dependencies { implementation libraries.kotlinStdLib implementation libraries.androidxFragment // EOS SDK dependencies implementation 'androidx.appcompat:appcompat:1.5.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.security:security-crypto:1.0.0' implementation 'androidx.browser:browser:1.4.0' implementation 'androidx.webkit:webkit:1.7.0' // Update the path so that it points to eossdk-StaticSTDC-release.aar provided in addons/epic-online-services-godot/bin/android/ implementation files('../../addons/epic-online-services-godot/bin/android/eossdk-StaticSTDC-release.aar') ...other code
-
In the
res://android/build/build.gradlefile, add the following lines after thedefaultConfigin theandroidsection.Before
android { ... other code defaultConfig { ... other code // Feel free to modify the application id to your own. applicationId getExportPackageName() versionCode getExportVersionCode() versionName getExportVersionName() minSdkVersion getExportMinSdkVersion() targetSdkVersion getExportTargetSdkVersion() missingDimensionStrategy 'products', 'template' } ... other code
After
android { ... other code defaultConfig { ... other code // Feel free to modify the application id to your own. applicationId getExportPackageName() versionCode getExportVersionCode() versionName getExportVersionName() minSdkVersion getExportMinSdkVersion() targetSdkVersion getExportTargetSdkVersion() missingDimensionStrategy 'products', 'template' // This is needed by EOS Android SDK String ClientId = "PUT YOUR EOS CLIENT ID HERE" resValue("string", "eos_login_protocol_scheme", "eos." + ClientId.toLowerCase()) } ... other code
-
In the
res://android/build/config.gradlefile, update theminSdkto23to match with the requirements of theEOS Android SDK.Before
minSdk : 21,
After
minSdk : 23,
-
In the
res://android/build/src/com/godot/game/GodotGame.javafile, update it as follows.package com.godot.game; import com.epicgames.mobile.eossdk.EOSSDK; // added import org.godotengine.godot.GodotActivity; import android.os.Bundle; public class GodotApp extends GodotActivity { static { // added System.loadLibrary("EOSSDK"); // added } // added @Override public void onCreate(Bundle savedInstanceState) { EOSSDK.init(getActivity()); // added setTheme(R.style.GodotAppMainTheme); super.onCreate(savedInstanceState); } }
-
Now open your project in the Godot Editor, and goto
Project -> Exportand create a new Android export profile. -
In the
Gradle Buildsection, enableUse Gradle Build. In theArchitecturessection enablearm64-v8a. In thePermissionssection ensure thatACESSS_NETWORK_STATE,ACCESS_WIFI_STATEandINTERNETare enabled. These permissions are needed for the EOS SDK to work. Fill in the other details such as package name, etc as needed. -
You can now export the Android APK by clicking the
Export Projectbutton.
Export the project from Godot editor for iOS target. You might get a build error during this process, ignore it. Open the generated iOS project in XCode and build the project. The build should be successful. EOSG has support for iOS arm64 device and iOS arm64 simulator.
-
Completed with sample
- Auth Interface
- Achievements Interface
- Connect Interface
- CustomInvites Interface
- Friends Interface
- Stats Interface
- UserInfo Interface
- Leaderboards Interface
- Metrics Interface
- Mods Interface
- Presence Interface
- ProgressionSnapshot Interface
- Reports Interface
- UI Interface
- Lobby Interface (Also sample for manual audio input/output)
- RTC Interface
- P2P Interface
- Version Interface
-
Completed without sample
- KWS Interface
- PlayerDataStorage Interface
- Sanctions Interface
- Sessions Interface
- TitleStorage Interface
- Ecom Interface
- AntiCheatServer Interface
- AntiCheatClient Interface
-
Not completed
- Integrated Platform Interface







