EOS Stats

Setup

Configure your EOS credentials, DefaultEngine.ini, and your local stat schema to get EOS Stats running.

Prerequisites

Before configuring the plugin, make sure you have:

  1. An Epic Developer Portal account — dev.epicgames.com
  2. A Product created in the portal with at least one Deployment
  3. At least one Stat configured in Dev Portal → [Your Product] → Stats
EOS ADVANCED SESSION SETUP GUIDE

In production when launched from EGS, you must use PersistentThenExchangeCode or NeverFallback + ExchangeCode directly.


Step 1 — Enable the Plugin

In Unreal Engine:

  1. Open Edit → Plugins
  2. Search for EOS Stats
  3. Enable the plugin and restart the Editor

Step 2 — Get Your EOS Credentials

In the Epic Developer Portal, navigate to:

Your Product → Product Settings → SDK Credentials

Collect the following values:

FieldWhere to find it
ProductIdProduct Settings → Product ID
SandboxIdProduct Settings → Sandbox ID (use your Dev sandbox)
DeploymentIdProduct Settings → Deployment ID
ClientIdSDK Credentials → Client ID
ClientSecretSDK Credentials → Client Secret

Step 3 — Configure DefaultEngine.ini

Add the [EOSCore] section to your project's Config/DefaultEngine.ini:

[EOSCore]
ProductId=your-product-id
SandboxId=your-sandbox-id
DeploymentId=your-deployment-id
ClientId=your-client-id
ClientSecret=your-client-secret

; Optional settings (defaults shown)
bAutoInitialize=true
bTickEOS=true
bEnableOverlay=true
bEnableSocialOverlay=true
Never commit real ClientSecret values to a public repository. Treat DefaultEngine.ini credentials the same as any other secret.

Tip: If your project already has OnlineSubsystemEOS configured (Project Settings → Online Subsystem EOS), the plugin automatically falls back to that Artifact's credentials for any field left empty in [EOSCore]. You do not need to duplicate your credentials.


Step 4 — (Optional) OnlineSubsystemEOS Co-existence

If your project already has OnlineSubsystemEOS enabled and set as the default platform service, the plugin will automatically detect and borrow its EOS platform handle.

[OnlineSubsystem]
DefaultPlatformService=EOS

In this case:

  • No second EOS handle is created — the plugin reuses the existing one safely.
  • No ticker is started — the OSS already ticks EOS.
  • You do not need the [EOSCore] section (though it is harmless to have it).

If OnlineSubsystemEOS is not active, the plugin creates its own handle from [EOSCore] and manages its own tick loop.


Step 5 — Create Your Stats in the Dev Portal

For each stat you want to track:

  1. Go to Dev Portal → [Your Sandbox] → Stats
  2. Create a stat and note its Stat Name exactly (e.g. kills) — it is case-sensitive
  3. Choose an Aggregation Type:
AggregationUse case
SumCumulative counters — kills, deaths, revives, matches played
LatestThe most recent value — currency balance, current level
MaxPersonal bests — highest score, longest streak
MinBest time / lowest value — fastest lap time
The Stat Name you set in the Dev Portal is the exact string you will pass to EOS Ingest Stat and EOS Query Stats.

Step 6 — Declare Your Stat Schema in Project Settings

EOS has no server-side API to list all stats configured for a productEOS Query Stats only returns stats that already have a value for the current player. To display a full stat sheet (e.g. "Kills: 0") before any data exists, declare your schema locally:

  1. Open Edit → Project Settings → Plugins → EOS Stats
  2. Add one entry per stat under Stat Definitions:
FieldDescription
StatNameMust match the Dev Portal name exactly
DisplayNameHuman-readable label for your UI
DescriptionOptional, for your own reference / UI tooltips
DefaultValueValue shown before this stat has ever been ingested (e.g. 0 for kills, 100 for starting health)

This is purely local config (DefaultEOS_Stats.ini) — it does not create stats on Epic's servers, it just tells your Blueprints what to expect.


Step 7 — Verify Setup

In your game's BeginPlay (or GameInstance Init), call Initialize EOS and check the return value:

Event BeginPlay
  └─► Initialize EOS ──► (returns true) ──► Continue to Auth Login
                     └─► (returns false) ──► Log error / show error screen

If Initialize EOS returns false, check:

  • Your credentials in DefaultEngine.ini are correct (no trailing spaces)
  • The EOSCore section name is exactly [EOSCore]
  • Your Sandbox and Deployment IDs match your Dev Portal environment
  • You are not in a Shipping build without valid production credentials

Subsystem Persistence

UEOSCoreStatsSubsystem and UEOSStatsSubsystem both live as long as the GameInstance. They persist across level changes automatically — you do not need to re-initialize EOS or re-declare your stat schema on each level load.


Log Category

All plugin logs use the LogEOSCore category. To see verbose logs, add to DefaultEngine.ini:

[Core.Log]
LogEOSCore=Verbose

Next Step

Once Initialize EOS returns true, follow the Example Project guide for the complete login → declare → ingest → query flow.