Plugin Documentation

AppConfigLive
Live-ops feature flags and remote config from AWS AppConfig

Turn features on and off, tune your economy and schedule events without a patch: AppConfigLive keeps an AWS AppConfig configuration up to date in your game with background polling, typed flag and value access, offline snapshots, shipped fallbacks and local overrides, plus the AppConfig control plane for live-ops tools.

v1.0
UE 4.27 & 5.8
Win64, Linux & Android
86 Blueprint nodes
Category Networking
Alpha XP

Overview

AWS AppConfig stores feature flags and freeform configuration (JSON, YAML, text) per application, environment and configuration profile, and rolls changes out with deployment strategies and automatic rollback. AppConfigLive brings that into Unreal Engine 4.27 and 5.8.

  • Sessions: Start Configuration Session opens an AppConfig Data session and keeps it current with background polling that honours the interval AppConfig asks for.
  • Feature flags: Get Flag Enabled, typed attribute getters, enabled-flag lists and the names of the flags that changed in every update.
  • Remote config: typed values by path (shop.featured[0].sku), whole sections into Blueprint structs.
  • Offline: snapshots on disk restored at start-up, shipped fallbacks, local overrides for QA menus and kill switches.
  • Live-ops tools: list, read and create applications, environments, profiles and hosted versions, start / stop / wait for deployments, validate configurations, resolve names to ids.
Multi-variant flagsAppConfig multi-variant flags (variants chosen per user context) are evaluated only by the AppConfig Agent, not by the AppConfig Data API that game clients use. AppConfigLive receives the flag's default value for them. Use separate flags or attributes per segment, or evaluate segments in your own code with the attribute getters.

Requirements

RequirementDetails
Unreal Engine4.27 and 5.8
PlatformsWin64, Linux and Android
ModulesAppConfigLive (Runtime), AppConfigLiveSdk (prebuilt AWS SDK for C++ 1.11.916 in Source/ThirdParty)
DependenciesNo other plugins. On Linux and Android the SDK uses the engine's libcurl, OpenSSL and certificate store.
AWSAn AWS account with AWS AppConfig. Configuration requests and Cognito usage are billed by AWS.

Installation

  1. Install AppConfigLive from Fab into your engine, or copy the AppConfigLive folder into your project's Plugins folder.
  2. Enable AppConfigLive in Edit > Plugins and restart the editor.
  3. Open Project Settings > Plugins > AppConfigLive: set Region, Identity Pool Id and the Application / Environment / Configuration Profile identifiers (names or ids).
  4. C++ only: add PublicDependencyModuleNames.Add("AppConfigLive"); to your Build.cs.
Several AWS plugins in one projectEach Alpha XP cloud plugin carries its own copy of the SDK under a plugin-specific name, so they install side by side without conflicts.

Setting up AWS

  1. In the AWS AppConfig console create an application (for example MyGame), an environment (Production) and a configuration profile: Feature flag for flags, Freeform for JSON settings.
  2. Add flags or a JSON document, save a version and start a deployment (strategy AppConfig.AllAtOnce for instant changes).
  3. In Amazon Cognito create an identity pool with guest access (players read configuration before they sign in).
  4. Give the pool's player roles read access to the configuration only:
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": ["appconfig:StartConfigurationSession", "appconfig:GetLatestConfiguration"],
    "Resource": "arn:aws:appconfig:us-east-1:123456789012:application/abc1234/environment/def5678/configuration/ghi9012"
  }]
}

The resource is application/<app id>/environment/<env id>/configuration/<profile id> (ids, not names; Resolve Names To Ids or the console show them). Use * segments to cover several profiles.

Live-ops tools (admin nodes)

The nodes in the Admin group call the AppConfig control plane. Never give them to the player role. Use them from an editor utility or an internal tool signed in with an admin identity, static keys or the default credential chain, with a policy such as:

{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Action": [
      "appconfig:ListApplications", "appconfig:GetApplication", "appconfig:CreateApplication",
      "appconfig:ListEnvironments", "appconfig:GetEnvironment", "appconfig:CreateEnvironment",
      "appconfig:ListConfigurationProfiles", "appconfig:GetConfigurationProfile", "appconfig:CreateConfigurationProfile",
      "appconfig:ListHostedConfigurationVersions", "appconfig:GetHostedConfigurationVersion", "appconfig:CreateHostedConfigurationVersion",
      "appconfig:ListDeploymentStrategies", "appconfig:GetDeploymentStrategy",
      "appconfig:ListDeployments", "appconfig:GetDeployment", "appconfig:StartDeployment", "appconfig:StopDeployment",
      "appconfig:ValidateConfiguration"
    ],
    "Resource": "*"
  }]
}

Environments with CloudWatch alarm monitors also need iam:PassRole for the alarm role.

Never ship access keysStatic keys in the settings end up in DefaultGame.ini and in packaged games. Players should always use the identity pool with the read-only policy above.

Quick start

Feature flags in Blueprint

  1. In your Game Instance (or the first level's Begin Play) call Get Default Config Session and store the result in a variable Config.
  2. Optional: Load Fallback From File with Content/Config/Defaults.json (add the folder to Additional Non-Asset Directories to Package) so the game has values before the first download.
  3. Bind On Configuration Changed on Config to refresh your UI and gameplay.
  4. Call Start Configuration Session with Session = Config and Start Polling ticked.
  5. Anywhere: Get Flag Enabled (double_xp) and Get Flag Attribute As Float (double_xp, multiplier, Default 1.0).

Freeform JSON

For a profile with {"shop": {"discount": 0.2, "featured": [{"sku": "sword_01"}]}}: Get Value Float shop.discount, Get Value String shop.featured[0].sku, or Get Value As Struct shop into your own Blueprint struct.

Publishing a change from a tool

  1. Resolve Names To Ids (MyGame, Production, LiveOps).
  2. Make Feature Flags Document from an array of flag structs, then Create Hosted Configuration Version with Content Type application/json.
  3. Start Deployment with the new Version Number (as text) and strategy AppConfig.AllAtOnce, then Wait For Deployment.

How it works

  • Polling. Each session holds an AppConfig Data token. Every poll calls GetLatestConfiguration; AppConfig answers with an empty body when nothing changed, and the session keeps its previous content. Polls never come sooner than the larger of your Poll Interval, the Required Minimum Poll Interval and the interval AppConfig sends back. Expired tokens (24 h) are renewed automatically. Failures back off up to 10 minutes and fire On Error; the last good configuration stays in effect.
  • Sources. Get Source tells where the data came from: Live (AppConfig, this run), Snapshot (saved by an earlier run), Fallback (shipped defaults). A fallback is replaced by a snapshot or live data; a snapshot only by live data.
  • Snapshots. With the default cache policy Save And Restore Snapshot every new live configuration is written to Saved/AppConfigLive/<app>_<env>_<profile>.json and restored when the session starts, so players have the last known values offline and on the first frame.
  • Overrides. Set Flag Override and Set Value Override sit on top of every configuration until Clear Overrides. Get Raw Text always returns the unmodified document.
  • Changes. On Configuration Changed carries the changed, added and removed flag names (flag profiles) or the changed top-level keys (freeform JSON).
  • Lifetime. Sessions created with a world context belong to the game instance and stop when it shuts down (end of Play In Editor). Without a game instance (editor utilities) keep the session in a variable.
  • YAML / text. Non-JSON profiles are available through Get Raw Text / Get Raw Bytes; the flag and value getters return their defaults.

Node reference

86 Blueprint nodes. Latent nodes run in the background, can be stopped with Cancel on their return value and fire exactly one final pin on the game thread. Session nodes are called on an AppConfigLive Session object.

Config and identity

NodeInputsOutputsPurpose
Set RegionRegion-Switches the AWS region for every following request.
Set Credential ModeMode-Overrides the credential mode from the settings at runtime.
Set Login TokenProvider, Token-Signs the player in to the identity pool with a provider token.
Clear Login Tokens--Forgets all login tokens; the player becomes a guest.
Set Static CredentialsAccess Key Id, Secret Access Key, Session Token-Uses these keys from now on (tools, servers, keys from your backend).
Get Identity Id-Identity IdThe player's Cognito identity id (empty until resolved).
Make User Pool Provider NameRegion, User Pool IdProviderLogin key of a Cognito user pool for Set Login Token.
Is Configured-Result, ProblemFalse and a reason when the settings are incomplete.
Resolve Identity LatentForce RefreshOn Success / On Failure (Identity Id, Error)Fetches the Cognito identity and credentials now.
Cancel(latent node)-None of the node's pins fire any more.
Is Finished(latent node)ResultTrue after the node finished or was cancelled.

Sessions and polling

NodeInputsOutputsPurpose
Get Default Config Session-SessionThe session for the identifiers in the project settings, kept by the game instance.
Create Config SessionApplication, Environment, Configuration ProfileSessionSession for another profile (names or ids); returns the existing one if already created.
Start Configuration Session LatentSession, Start PollingOn Success / On Failure (Session, Result, Error)Opens the AppConfig session, downloads the configuration and optionally keeps polling.
Fetch Latest Configuration LatentSessionOn Success / On Failure (Session, Result, Error)One explicit round trip; Result.Changed says whether anything changed.
Start PollingInterval Seconds (0 = settings)-Polls in the background until Stop Polling.
Stop Polling--Stops polling; the current configuration stays available.
Refresh Now-StartedPolls immediately; events report the result.
Is Polling-ResultTrue while polling is active.
Get Seconds Until Next Poll-SecondsTime to the next automatic poll.
Set Poll IntervalSeconds (15 - 86400)-Poll interval of this session.
Set Cache PolicyPolicy-Memory Only, Save Snapshot On Change or Save And Restore Snapshot for this session.
Get Identifiers-IdsApplication, environment and profile of the session.
On Configuration Changed Event-Session, ChangeA new configuration is in effect; Change lists changed / added / removed flags or keys.
On Error Event-Session, ErrorA poll failed; polling continues with back-off.

Document

NodeInputsOutputsPurpose
Get Configuration Version-Version LabelLabel of the hosted configuration version in use.
Get Content Type-Content TypeMIME type, for example application/json.
Get Raw Text-TextThe document as text, without overrides.
Get Raw Bytes-BytesThe document bytes exactly as received.
Get Last Update Time-Date Time (UTC)When the current configuration arrived or was saved.
Get Source-SourceNone, Live, Snapshot or Fallback.
Is Flag Profile-ResultTrue when the document is an AppConfig feature flag configuration.

Feature flags

NodeInputsOutputsPurpose
Get Flag EnabledFlag Name, DefaultEnabledThe flag's state (overrides applied), Default when unknown.
Has FlagFlag NameResultTrue when the flag exists.
Get FlagFlag NameResult, FlagName, enabled state and all attributes in one struct.
Get All Flag Names-NamesEvery flag in the configuration.
Get Enabled Flags-NamesThe flags that are on.
Get Flag SourceFlag NameSourceOverride when a local override applies, otherwise the document source.
Get Flag Attribute As StringFlag Name, Attribute, DefaultValueAttribute as text.
Get Flag Attribute As IntFlag Name, Attribute, DefaultValueAttribute as an integer.
Get Flag Attribute As FloatFlag Name, Attribute, DefaultValueAttribute as a float.
Get Flag Attribute As BoolFlag Name, Attribute, DefaultValueAttribute as a boolean.
Get Flag Attribute As JsonFlag Name, AttributeResult, JsonAttribute as JSON text (arrays, objects).
Get Flag Attribute As String ArrayFlag Name, AttributeValuesArray attribute (string[] / number[]) as strings.
Get Flag AttributesFlag NameMapAll attributes as JSON text values.
Parse Feature FlagsJsonFlagsFlag structs from a Data API or hosted (authoring) flag document.
Make Feature Flags DocumentFlagsJsonHosted flag document (flags, values, version 1) for Create Hosted Configuration Version.

Freeform values

NodeInputsOutputsPurpose
Get Value StringPath, DefaultValueValue by path such as shop.featured[0].sku.
Get Value IntPath, DefaultValueInteger by path.
Get Value FloatPath, DefaultValueFloat by path.
Get Value BoolPath, DefaultValueBoolean by path.
Get Value JsonPath (empty = all)Result, JsonAny value or the whole document (overrides applied) as JSON.
Get Value String ArrayPathValuesArray by path as strings.
Get Value KeysPath (empty = top level)KeysKeys of an object, to iterate sections.
Get Value As StructPath, Out Struct (any struct)ResultFills a Blueprint struct from the object at Path.
Struct To JSONStruct (any)Result, JsonAny struct as a JSON object string.
JSON To StructJson, Out Struct (any)ResultFills a struct from a JSON object string.
Get JSON FieldJson, PathResult, ValueOne value from any JSON text by path.

Overrides and offline

NodeInputsOutputsPurpose
Set Flag OverrideFlag Name, Enabled-Forces a flag locally (QA, kill switch) until Clear Overrides.
Set Value OverridePath, Json Value-Replaces a value locally (42, true, "text", [..], {..}).
Clear Overrides--Removes every override.
Load Fallback From StringText, Content TypeResultShipped defaults until a snapshot or live data arrives.
Load Fallback From FileFile PathResultSame from a file (project-relative; packaged files work).
Save Snapshot To Disk-ResultWrites the current configuration to the session's snapshot file.
Load Snapshot From Disk-ResultLoads the snapshot (never over live data).
Clear Snapshot-ResultDeletes the snapshot file.

Admin: applications, environments, profiles (latent)

NodeInputsOutputsPurpose
Resolve Names To IdsApplication, Environment, Configuration ProfileIds, ErrorNames (or ids) to the ids the admin nodes and IAM resources use.
List Applications-Applications, ErrorEvery application in the region (all pages).
Get ApplicationApplication IdApplication, ErrorOne application.
Create ApplicationName, DescriptionApplication, ErrorCreates an application.
List EnvironmentsApplication IdEnvironments, ErrorEnvironments of an application.
Get EnvironmentApplication Id, Environment IdEnvironment, ErrorState and alarms of an environment.
Create EnvironmentApplication Id, Name, Description, Alarm Arns, Alarm Role ArnEnvironment, ErrorCreates an environment, optionally with rollback alarms.
List Configuration ProfilesApplication Id, Type FilterProfiles, ErrorProfiles of an application.
Get Configuration ProfileApplication Id, Configuration Profile IdProfile, ErrorType, location and validators of a profile.
Create Configuration ProfileApplication Id, Name, Type, Description, Location Uri, Retrieval Role Arn, Json SchemaProfile, ErrorCreates a hosted (default) or external profile, optional JSON schema validator.
List Hosted Configuration VersionsApplication Id, Configuration Profile Id, Version Label, Max ItemsVersions, ErrorVersions of a hosted profile (without content).
Get Hosted Configuration VersionApplication Id, Configuration Profile Id, Version NumberVersion, ErrorOne version including its content.
Create Hosted Configuration VersionApplication Id, Configuration Profile Id, Content, Content Type, Description, Version Label, Latest Version NumberVersion, ErrorUploads a new version (optimistic lock with Latest Version Number).
Validate ConfigurationApplication Id, Configuration Profile Id, Configuration VersionOn Success / On Failure (Error)Runs the profile's validators without deploying.

Admin: deployments (latent unless noted)

NodeInputsOutputsPurpose
List Deployment Strategies-Strategies, ErrorYour strategies and the predefined AppConfig.* ones.
Get Deployment StrategyDeployment Strategy IdStrategy, ErrorDuration, growth and bake time of a strategy.
List DeploymentsApplication Id, Environment Id, Max ItemsDeployments, ErrorDeployments of an environment, newest first.
Get DeploymentApplication Id, Environment Id, Deployment NumberDeployment, ErrorState, progress and event log.
Start DeploymentApplication Id, Environment Id, Deployment Strategy Id, Configuration Profile Id, Configuration Version, DescriptionDeployment, ErrorRolls a version out to an environment.
Stop DeploymentApplication Id, Environment Id, Deployment Number, Allow RevertDeployment, ErrorStops and rolls back (or reverts) a deployment.
Wait For DeploymentApplication Id, Environment Id, Deployment Number, Poll Seconds, Timeout SecondsOn Completed / On Failure (Deployment, Error)Polls until Complete, Rolled Back or Reverted.
Is Deployment Terminal PureStateResultTrue for Complete, Rolled Back and Reverted.

Credentials

ModeUse forHow
Cognito Identity PoolGame clientsGuests get unauthenticated credentials; after Set Login Token the player gets the authenticated role. Credentials refresh automatically.
Static KeysDevelopment, live-ops tools, dedicated serversSettings keys or Set Static Credentials.
Default Credential ChainServers and editor toolsEnvironment variables, the ~/.aws profile, ECS and EC2 instance roles.

C++ API

// Build.cs: PublicDependencyModuleNames.Add("AppConfigLive");
#include "AppConfigLiveLibrary.h"
#include "AppConfigLiveSession.h"

UAppConfigLiveSession* Config = UAppConfigLiveLibrary::GetDefaultConfigSession(this);
Config->OnConfigurationChanged.AddDynamic(this, &UMyGameInstance::HandleConfigChanged);
Config->Fetch([](bool bOk, const FAppConfigLiveFetchResult& Result, const FAppConfigLiveError& Error)
{
    // game thread
});
Config->StartPolling(0.f);

const bool bDoubleXp = Config->GetFlagEnabled(TEXT("double_xp"), false);
const float Discount = Config->GetValueFloat(TEXT("shop.discount"), 0.f);

The latent node classes (UAppConfigLiveStartSessionAction and the others) can be created from C++ through their static factory functions; bind the delegates, then call Activate().

Types

TypeKindMembers
UAppConfigLiveSessionObjectOne application / environment / profile kept up to date; all session nodes, On Configuration Changed, On Error
FAppConfigLiveFlagStructName, Enabled, Attributes (JSON text values)
FAppConfigLiveChangeStructSource, Version Label, Initial, Changed / Added / Removed Flags, Changed Keys
FAppConfigLiveFetchResultStructChanged, Version Label, Content Type, Text, Next Poll Interval Seconds
FAppConfigLiveIdsStructApplication Id, Environment Id, Configuration Profile Id
FAppConfigLiveApplication / Environment / ProfileStructControl-plane resources (ids, names, state, alarms, location, type, validators)
FAppConfigLiveDeployment / DeploymentEvent / DeploymentStrategyStructDeployment number, version, state, percentage, growth, bake time, timestamps, event log
FAppConfigLiveHostedVersionStructVersion Number, Description, Content Type, Version Label, KMS key, Content
FAppConfigLiveErrorStructCode, Message, Http Status, Retryable
EAppConfigLiveSourceEnumNone, Live, Snapshot, Fallback, Override
EAppConfigLiveCachePolicyEnumMemory Only, Save Snapshot On Change, Save And Restore Snapshot
EAppConfigLiveProfileTypeEnumFreeform, Feature Flags
EAppConfigLiveDeploymentState / EnvironmentStateEnumBaking, Validating, Deploying, Complete, Rolling Back, Rolled Back, Reverted / Ready For Deployment ...
EAppConfigLiveCredentialModeEnumCognito Identity Pool, Static Keys, Default Credential Chain

Settings

Project Settings > Plugins > AppConfigLive (saved to DefaultGame.ini).

SettingDefaultDescription
Regionus-east-1Region of your AppConfig application and identity pool.
Credential ModeCognito Identity PoolCognito Identity Pool, Static Keys or Default Credential Chain.
Identity Pool Id(empty)For example us-east-1:01234567-89ab-cdef-0123-456789abcdef.
Allow Guest AccessOnUnauthenticated identities before Set Login Token.
Access Key Id / Secret Access Key(empty)Static Keys mode - development and tools only.
Allow Static Keys In ShippingOffSettings keys are refused in Shipping builds unless enabled.
Application / Environment / Configuration Profile Identifier(empty)Names or ids used by Get Default Config Session.
Poll Interval Seconds60How often sessions poll (15 - 86400).
Required Minimum Poll Interval Seconds15Lower bound sent to AppConfig when a session starts.
Cache PolicySave And Restore SnapshotWhat sessions do with snapshots on disk.
Snapshot Directory(empty = Saved/AppConfigLive)Folder for snapshot files.
Endpoint Override(empty)Custom endpoint such as a local emulator.
Request Timeout Ms / Connect Timeout Ms30000 / 5000Time limits per request.
Max Retries3Automatic retries with back-off.
Worker Threads4Background threads for requests (Wait For Deployment occupies one while it waits).
Verify SSL / Log Sdk WarningsOn / OnTLS verification; SDK warnings to LogAppConfigLive.

Troubleshooting

Error codeCause and fix
NotConfiguredIdentity pool, or the application / environment / profile identifiers, are empty.
ResourceNotFoundExceptionWrong application, environment or profile name/id, wrong region, or no deployment has been started to that environment yet.
AccessDeniedExceptionThe pool role lacks appconfig:StartConfigurationSession / GetLatestConfiguration on that resource (ids, not names, in the ARN).
BadRequestExceptionInvalid parameters (poll interval out of range, malformed content). Expired tokens are renewed automatically.
ThrottlingExceptionPolling too often across many players: raise Poll Interval Seconds.
UnavailableThe SDK library could not be loaded or the engine is shutting down; see LogAppConfigLive.
Values stay at defaultsThe profile is YAML / text (use Get Raw Text), the path is wrong (Get Value Keys helps), or the flag is multi-variant (see Overview).

Credits

© 2026 Alpha XP — alphaxp.net · Support: support@alphaxp.net. Includes the AWS SDK for C++ and the AWS Common Runtime (Apache License 2.0). Built for Unreal Engine 4.27 and 5.8.