Overview
BridgeBus connects Unreal Engine 4.27 and 5.8 to Amazon EventBridge and EventBridge Scheduler. Your game publishes what happens — matches finished, purchases, achievements, telemetry — as events; EventBridge rules deliver them to Lambda functions, SQS queues, Step Functions, other buses or HTTP endpoints without the game knowing about any of them. Requests run on background worker threads with automatic retries; every result arrives on the game thread.
- Put Event and Put Events (any number of entries, split at the 10-entry API limit, per-entry results).
- BridgeBus Emitter component: queue events from gameplay, automatic batched flushing, retry of throttled events, stats.
- Buses, rules and targets: list, describe, create and delete buses; put, enable, disable and delete rules; put, list and remove targets with input transformers, retry policies and dead-letter queues.
- Archives and replays, including a latent Wait For Replay.
- EventBridge Scheduler: one-off
at(), rate() and cron() schedules with time zones, flexible windows, start/end dates and self-deleting one-off schedules; Schedule Event emits an event at a given time.
- Pure helpers: event pattern builder, local pattern matcher, event envelope parser, ARN helpers, expression builders and validator, JSON helpers.
Requirements
| Requirement | Details |
| Unreal Engine | 4.27 and 5.8 |
| Platforms | Win64, Linux and Android |
| Modules | BridgeBus (Runtime), BridgeBusSdk (prebuilt AWS SDK for C++ 1.11.916 in Source/ThirdParty) |
| Dependencies | No other plugins. On Linux and Android the SDK uses the engine's libcurl, OpenSSL and certificate store. |
| AWS | An AWS account. EventBridge, Scheduler and Cognito usage is billed by AWS. |
Installation
- Install BridgeBus from Fab into your engine, or copy the
BridgeBus folder into your project's Plugins folder.
- Enable BridgeBus in Edit > Plugins and restart the editor.
- Open Project Settings > Plugins > BridgeBus and set Region, Identity Pool Id and Default Source.
- C++ only: add
PublicDependencyModuleNames.Add("BridgeBus"); 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
- In Amazon Cognito create an identity pool (enable guest access if players publish before signing in).
- Optional: create a custom event bus such as
mygame-prod in the EventBridge console and set it as Default Event Bus Name.
- Give the player role of the pool only what the game client needs — putting events with your own source:
{
"Version": "2012-10-17",
"Statement": [{
"Effect": "Allow",
"Action": "events:PutEvents",
"Resource": "arn:aws:events:us-east-1:123456789012:event-bus/mygame-prod",
"Condition": { "StringEquals": { "events:source": "com.mygame" } }
}]
}
If players create their own reminders with the scheduler, add a scoped scheduler statement (one schedule group per game) plus iam:PassRole on the scheduler execution role:
{
"Effect": "Allow",
"Action": ["scheduler:CreateSchedule", "scheduler:GetSchedule", "scheduler:DeleteSchedule"],
"Resource": "arn:aws:scheduler:us-east-1:123456789012:schedule/mygame-reminders/*"
},
{
"Effect": "Allow",
"Action": "iam:PassRole",
"Resource": "arn:aws:iam::123456789012:role/mygame-scheduler-role",
"Condition": { "StringEquals": { "iam:PassedToService": "scheduler.amazonaws.com" } }
}
The scheduler execution role (Default Scheduler Role Arn) is trusted by scheduler.amazonaws.com and allowed to invoke its targets, for example events:PutEvents on your bus or lambda:InvokeFunction.
Admin nodesCreate / Delete Event Bus, Put / Enable / Disable / Delete Rule, Put / Remove Targets, Create / Delete Archive, Start / Cancel Replay and the schedule-group nodes need admin permissions (events:* on the resources, scheduler:*ScheduleGroup). Use them in live-ops tools, editor utilities and dedicated servers with Static Keys or the Default Credential Chain — never grant them to the player role. Read-only nodes (List / Describe) need the matching events:List* / events:Describe* permissions.
Never ship access keysStatic keys in the settings end up in DefaultGame.ini and in packaged games. Shipping builds refuse settings keys unless Allow Static Keys In Shipping is enabled.
Quick start
Publish an event
- Add Put Event to an Event Graph. Detail Type
MatchFinished, Detail {"matchId":"42","winner":"blue"} (or build it with Struct To JSON).
- From On Success, read Result > Event Id. From On Failure, print Error > Message.
- In the EventBridge console create a rule on the bus with pattern
{"source":["com.mygame"],"detail-type":["MatchFinished"]} and a Lambda target — or do the same from a tool with Make Event Pattern, Put Rule and Put Targets.
Telemetry with the emitter
- Add a BridgeBus Emitter component to your GameState. Set Default Detail Type
Telemetry, Auto Flush Interval 5.
- Call Queue Event wherever something happens. The component sends batches in the background; bind On Failed to log lost events.
A timed event
- Set Default Scheduler Role Arn in the settings.
- Call Schedule Event with Fire Time = tomorrow 18:00 UTC, Event Bus Arn = Make Event Bus Arn, Detail Type
TournamentStart. The schedule emits the event at that time and deletes itself.
Node reference
All 79 nodes, grouped by Blueprint category. Latent nodes run in the background, fire exactly one final pin on the game thread and can be stopped with Cancel. Nodes marked (admin) need admin IAM permissions.
Config and identity
| Node | Kind | Inputs | Outputs | Purpose |
| Set Region | Callable | Region | - | Switches the AWS region for every following request. |
| Set Credential Mode | Callable | Mode | - | Overrides the credential mode from the settings. |
| Set Login Token | Callable | Provider, Token | - | Signs the player in to the identity pool with a provider token. |
| Clear Login Tokens | Callable | - | - | Forgets all tokens; the player becomes a guest. |
| Set Static Credentials | Callable | Access Key Id, Secret Access Key, Session Token | - | Uses these keys from now on (Static Keys mode). |
| Get Identity Id | Pure | - | Identity Id | The player's Cognito identity id (empty until resolved). |
| Make User Pool Provider Name | Pure | Region, User Pool Id | Provider | Login key of a Cognito user pool. |
| Is Configured | Pure | - | bool, Problem | False plus a reason when the settings are incomplete. |
| Set Event Defaults | Callable | Event Bus Name, Source | - | Runtime override of the default bus and source. |
| Set Scheduler Defaults | Callable | Group Name, Role Arn, Timezone | - | Runtime override of the scheduler defaults. |
| Resolve Identity | Latent | Force Refresh | On Success / On Failure (Identity Id, Error) | Fetches Cognito credentials now so errors show up early. |
| Cancel | Callable | (latent node) | - | None of the node's pins fire any more. |
| Is Finished | Pure | (latent node) | bool | True after the node finished or was cancelled. |
Events
| Node | Kind | Inputs | Outputs | Purpose |
| Put Event | Latent | Detail Type, Detail, Source, Event Bus Name, Resources, Time | On Success / On Failure (Result, Error) | Puts one event on a bus. |
| Put Events | Latent | Entries | On Completed (Results, Failed Count) | Puts many events, 10 per request; one result per entry, in order. |
| Test Event Pattern | Latent | Event Pattern, Event Json | On Success / On Failure (Matches, Error) | Asks EventBridge whether a full event matches a pattern. |
| Make Event Entry | Pure | Detail Type, Detail, Source, Event Bus Name, Resources, Time | Entry | Builds an entry for Put Events or the emitter. |
| Make Event Pattern | Pure | Sources, Detail Types, Resources, Accounts, Regions | Pattern JSON | Builds an event pattern from value lists. |
| Add Pattern Prefix Filter | Pure | Event Pattern, Field Path, Prefix | Pattern JSON | Adds a {"prefix": ...} filter on a dotted field path. |
| Add Pattern Value Filter | Pure | Event Pattern, Field Path, Values, Values As Json | Pattern JSON | Adds exact-match values on a field path (strings, or numbers/booleans). |
| Event Pattern Matches | Pure | Event Pattern, Event Json | bool | Local pattern check without a network call. |
| Parse Event | Pure | Event Json | bool, Event | Parses an EventBridge envelope (id, source, detail-type, time, detail ...). |
| Make Event Bus Arn | Pure | Account Id, Event Bus Name, Region | Arn | Builds arn:aws:events:<region>:<account>:event-bus/<name>. |
| Parse Arn | Pure | Arn | bool, Partition, Service, Region, Account Id, Resource | Splits any ARN into its parts. |
Buses
| Node | Kind | Inputs | Outputs | Purpose |
| List Event Buses | Latent | Name Prefix, Next Token, Limit | On Success / On Failure (Page, Error) | Lists the account's buses, paged. |
| Describe Event Bus | Latent | Event Bus Name | On Success / On Failure (Bus, Error) | ARN, description, policy, dead-letter queue of a bus. |
| Create Event Bus (admin) | Latent | Event Bus Name, Description, Dead Letter Arn | On Success / On Failure (Bus, Error) | Creates a custom bus. |
| Delete Event Bus (admin) | Latent | Event Bus Name | On Success / On Failure (Error) | Deletes a custom bus. |
Rules and targets
| Node | Kind | Inputs | Outputs | Purpose |
| List Rules | Latent | Event Bus Name, Name Prefix, Next Token, Limit | On Success / On Failure (Page, Error) | Lists the rules of a bus. |
| Describe Rule | Latent | Rule Name, Event Bus Name | On Success / On Failure (Rule, Error) | Pattern / schedule, state, role, creator of a rule. |
| Put Rule (admin) | Latent | Rule Name, Event Bus Name, Event Pattern, Schedule Expression, Description, Role Arn, State | On Success / On Failure (Rule Arn, Error) | Creates or updates a rule. |
| Enable Rule (admin) | Latent | Rule Name, Event Bus Name | On Success / On Failure (Error) | Turns a rule on. |
| Disable Rule (admin) | Latent | Rule Name, Event Bus Name | On Success / On Failure (Error) | Turns a rule off without deleting it. |
| Delete Rule (admin) | Latent | Rule Name, Event Bus Name, Force | On Success / On Failure (Error) | Deletes a rule (remove its targets first). |
| List Targets By Rule | Latent | Rule Name, Event Bus Name, Next Token, Limit | On Success / On Failure (Page, Error) | What a rule invokes. |
| Put Targets (admin) | Latent | Rule Name, Targets, Event Bus Name | On Success / On Failure (Result, Error) | Adds or updates targets; Result lists rejected ones. |
| Remove Targets (admin) | Latent | Rule Name, Target Ids, Event Bus Name, Force | On Success / On Failure (Result, Error) | Removes targets by id. |
| List Rule Names By Target | Latent | Target Arn, Event Bus Name, Next Token, Limit | On Success / On Failure (Page, Error) | Which rules invoke a target ARN. |
| Make Rule Target | Pure | Id, Arn, Role Arn, Input, Input Path, Dead Letter Arn, Max Retry Attempts, Max Event Age Seconds | Target | Builds a rule target. |
| Set Target Input Transformer | Pure | Target, Paths, Template | Target | Adds an input transformer (placeholders from JSONPaths). |
Archives and replays
| Node | Kind | Inputs | Outputs | Purpose |
| Create Archive (admin) | Latent | Archive Name, Event Source Arn, Description, Event Pattern, Retention Days | On Success / On Failure (Archive, Error) | Records the events of a bus for later replay. |
| List Archives | Latent | Name Prefix, Event Source Arn, Next Token, Limit | On Success / On Failure (Page, Error) | Lists archives. |
| Describe Archive | Latent | Archive Name | On Success / On Failure (Archive, Error) | State, event count, size, retention, pattern. |
| Delete Archive (admin) | Latent | Archive Name | On Success / On Failure (Error) | Deletes an archive. |
| Start Replay (admin) | Latent | Replay Name, Archive Arn, Destination Bus Arn, Event Start Time, Event End Time, Filter Rule Arns, Description | On Success / On Failure (Replay, Error) | Replays archived events of a time range onto a bus. |
| Describe Replay | Latent | Replay Name | On Success / On Failure (Replay, Error) | State and progress of a replay. |
| Cancel Replay (admin) | Latent | Replay Name | On Success / On Failure (Replay, Error) | Stops a running replay. |
| List Replays | Latent | Name Prefix, Event Source Arn, Next Token, Limit | On Success / On Failure (Page, Error) | Lists replays. |
| Wait For Replay | Latent | Replay Name, Poll Interval Seconds, Timeout Seconds | On Progress, On Completed / On Failure (Replay, Error) | Polls a replay until Completed, Cancelled or Failed. |
Schedules
| Node | Kind | Inputs | Outputs | Purpose |
| Create Schedule | Latent | Schedule Name, Schedule Expression, Target, Options | On Success / On Failure (Schedule Arn, Error) | Creates an at / rate / cron schedule. |
| Schedule Event | Latent | Schedule Name, Fire Time, Event Bus Arn, Detail Type, Detail, Source, Options | On Success / On Failure (Schedule Arn, Error) | One-off, self-deleting schedule that emits an event at Fire Time (UTC). |
| Get Schedule | Latent | Schedule Name, Group Name | On Success / On Failure (Schedule, Error) | Reads every field of a schedule. |
| Update Schedule | Latent | Schedule Name, Schedule Expression, Target, Options | On Success / On Failure (Schedule Arn, Error) | Replaces a schedule's settings. |
| Delete Schedule | Latent | Schedule Name, Group Name | On Success / On Failure (Error) | Deletes a schedule. |
| List Schedules | Latent | Group Name, Name Prefix, Next Token, Enabled Only, Disabled Only, Limit | On Success / On Failure (Page, Error) | Lists schedules (summaries). |
| Create Schedule Group (admin) | Latent | Group Name | On Success / On Failure (Group Arn, Error) | Creates a group for schedules. |
| Get Schedule Group | Latent | Group Name | On Success / On Failure (Group, Error) | ARN and state of a group. |
| Delete Schedule Group (admin) | Latent | Group Name | On Success / On Failure (Error) | Deletes a group and all its schedules. |
| List Schedule Groups | Latent | Name Prefix, Next Token, Limit | On Success / On Failure (Page, Error) | Lists groups. |
| Make At Expression | Pure | Time | Expression | at(yyyy-mm-ddThh:mm:ss). |
| Make Rate Expression | Pure | Value, Unit | Expression | rate(5 minutes), rate(1 day) ... |
| Make Cron Expression | Pure | Minutes, Hours, Day Of Month, Month, Day Of Week, Year | Expression | cron(...) from six fields. |
| Validate Schedule Expression | Pure | Schedule Expression | bool, Problem | Local syntax check with an explanation. |
| Make Schedule Target | Pure | Arn, Role Arn, Input, Dead Letter Arn, Max Retry Attempts, Max Event Age Seconds | Target | Target for any AWS resource or universal target. |
| Make Event Bus Schedule Target | Pure | Event Bus Arn, Detail Type, Detail, Source, Role Arn | Target | Target that puts an event on a bus. |
Emitter (BridgeBus Emitter component)
| Node | Kind | Inputs | Outputs | Purpose |
| Queue Event | Callable | Detail Type, Detail, Resources | bool | Queues one event with the component defaults. |
| Queue Events | Callable | Entries | Count | Queues prepared entries. |
| Flush | Callable | - | bool | Sends the queue now. |
| Clear | Callable | - | Dropped count | Drops the queue. |
| Get Pending Count | Pure | - | int | Events waiting. |
| Is Flushing | Pure | - | bool | A flush request is in flight. |
| Set Auto Flush | Callable | Interval Seconds, Batch Size | - | Changes automatic flushing. |
| Set Emitter Defaults | Callable | Source, Detail Type, Event Bus Name | - | Defaults for events queued from now on. |
| Get Stats | Pure | - | Stats | Queued / sent / failed / dropped totals, flush count, last flush time. |
| Set Paused | Callable | Pause | - | Stops queueing and flushing (telemetry opt-out). |
| Is Paused | Pure | - | bool | True while paused. |
JSON
| Node | Kind | Inputs | Outputs | Purpose |
| Struct To JSON | Callable | Struct (any) | bool, Json | Any struct to a JSON object (use it as event Detail). |
| JSON To Struct | Callable | Json | bool, Out Struct | Fills a struct from JSON. |
| Get JSON Field | Pure | Json, Path | bool, Value | Reads one value, path like detail.player.stats[2].score. |
Emitter component
BridgeBus Emitter keeps a queue of events and sends it when Auto Flush Interval elapses, when Max Batch Size events are waiting, or on Flush. One flush is in flight at a time (up to 100 events, sent 10 per request). Events rejected with a retryable error (throttling, internal failure, network) go back into the queue when Requeue Retryable is on; others are reported on On Failed. When the queue is full (Max Pending), the oldest events are dropped. With Flush On End Play the remaining events are sent when the actor ends play. Stamp Queue Time keeps the real event time even when batches are sent later.
Event patterns
Make Event Pattern (Sources = [com.mygame], Detail Types = [Purchase])
-> Add Pattern Prefix Filter (Field Path = detail.sku, Prefix = "gem_")
-> {"source":["com.mygame"],"detail-type":["Purchase"],"detail":{"sku":[{"prefix":"gem_"}]}}
Event Pattern Matches evaluates exact values, prefix, suffix, equals-ignore-case, exists, anything-but (values or prefix) and numeric ranges, on nested fields and array values. It is meant for client-side routing and tests; Test Event Pattern asks the service for the authoritative answer (it needs a complete event with id, account, time, region, source, detail-type and resources).
Schedule expressions
| Expression | Meaning |
at(2026-12-24T18:00:00) | Once, at that time in the schedule's time zone (Schedule Event always uses UTC). |
rate(30 minutes) | Every 30 minutes (singular unit for 1: rate(1 hour)). |
cron(0 9 ? * MON-FRI *) | 09:00 on weekdays. Exactly one of day-of-month / day-of-week is ?. |
Options: time zone (IANA name), state, flexible window (the scheduler may fire up to N minutes late to spread load), start and end dates for recurring schedules, and Action After Completion = Delete for one-off schedules.
Credentials
| Mode | Use for | How |
| Cognito Identity Pool | Game clients | Guests get unauthenticated credentials; after Set Login Token the player gets the authenticated role. Credentials refresh automatically. |
| Static Keys | Development, dedicated servers, live-ops tools | Settings keys or Set Static Credentials. |
| Default Credential Chain | Servers and tools | Environment variables, ~/.aws profile, ECS and EC2 roles. |
C++ API
// Build.cs: PublicDependencyModuleNames.Add("BridgeBus");
#include "BridgeBusLibrary.h"
TArray<FBridgeBusEventEntry> Entries;
Entries.Add(UBridgeBusLibrary::MakeEventEntry(TEXT("MatchFinished"), TEXT("{\"matchId\":\"42\"}"),
FString(), FString(), TArray<FString>(), FDateTime(0)));
UBridgeBusLibrary::PutEventsNative(Entries, FBridgeBusNativeDelegate::CreateLambda(
[](const TArray<FBridgeBusPutResult>& Results, int32 FailedCount)
{
// runs on the game thread
}));
All latent node classes (UBridgeBusPutEventAction and the others) can be created from C++ through their static factory functions; bind the delegates, then call Activate().
Types
| Type | Kind | Members |
| FBridgeBusEventEntry | Struct | Source, Detail Type, Detail, Event Bus Name, Resources, Time, Trace Header |
| FBridgeBusPutResult | Struct | Index, Success, Event Id, Error Code, Error Message |
| FBridgeBusEvent | Struct | Id, Version, Source, Detail Type, Detail, Time, Region, Account, Resources, Replay Name |
| FBridgeBusEventBusInfo / Page | Struct | Name, Arn, Description, Policy, Dead Letter Arn, Creation / Last Modified Time; Buses, Next Token |
| FBridgeBusRuleInfo / Page | Struct | Name, Arn, Event Bus Name, Event Pattern, Schedule Expression, State, Description, Role Arn, Managed By, Created By |
| FBridgeBusTarget / Page | Struct | Id, Arn, Role Arn, Input, Input Path, Input Paths Map, Input Template, Dead Letter Arn, Max Retry Attempts, Max Event Age Seconds, Sqs Message Group Id |
| FBridgeBusTargetsResult / FBridgeBusTargetError | Struct | Failed Entries (Target Id, Error Code, Error Message), Failed Entry Count |
| FBridgeBusNamePage | Struct | Names, Next Token |
| FBridgeBusArchiveInfo / Page | Struct | Name, Arn, Event Source Arn, Description, Event Pattern, State, State Reason, Retention Days, Event Count, Size Bytes, Creation Time |
| FBridgeBusReplayInfo / Page | Struct | Name, Arn, Event Source Arn, Description, State, State Reason, Event Start / End / Last Replayed Time, Replay Start / End Time, Destination Arn, Filter Arns |
| FBridgeBusScheduleTarget | Struct | Arn, Role Arn, Input, Event Bridge Source / Detail Type, Sqs Message Group Id, Dead Letter Arn, Max Retry Attempts, Max Event Age Seconds |
| FBridgeBusScheduleOptions | Struct | Description, Group Name, Timezone, State, Flexible Window Mode / Minutes, Start Date, End Date, Action After Completion |
| FBridgeBusScheduleInfo / Page | Struct | Name, Arn, Group Name, Schedule Expression, Timezone, State, Description, Target, window, dates |
| FBridgeBusScheduleGroupInfo / Page | Struct | Name, Arn, State, Creation / Last Modification Date |
| FBridgeBusEmitterStats | Struct | Queued, Sent, Failed, Dropped totals, Flush Count, Last Flush Time |
| FBridgeBusError | Struct | Code, Message, Http Status, Retryable |
| Enums | Enum | EBridgeBusCredentialMode, EBridgeBusRuleState, EBridgeBusArchiveState, EBridgeBusReplayState, EBridgeBusRateUnit, EBridgeBusScheduleState, EBridgeBusFlexibleWindowMode, EBridgeBusActionAfterCompletion |
Settings
Project Settings > Plugins > BridgeBus (saved to DefaultGame.ini). Changes apply to the next request.
| Setting | Default | Description |
| Region | us-east-1 | Region of your buses, schedules and identity pool. |
| Credential Mode | Cognito Identity Pool | Cognito Identity Pool, Static Keys or Default Credential Chain. |
| Identity Pool Id | (empty) | For example us-east-1:01234567-89ab-cdef-0123-456789abcdef. |
| Allow Guest Access | On | Unauthenticated identities before Set Login Token. |
| Access Key Id / Secret Access Key | (empty) | Static Keys mode - development and servers only. |
| Allow Static Keys In Shipping | Off | Settings keys are refused in Shipping builds unless enabled. |
| Endpoint Override | (empty) | Custom endpoint such as a local emulator. |
| Request Timeout Ms / Connect Timeout Ms | 30000 / 5000 | Time limits per request. |
| Max Retries | 3 | Automatic retries with exponential back-off. |
| Worker Threads | 4 | Background threads that run requests. |
| Verify SSL / Log Sdk Warnings | On / On | TLS verification; SDK warnings to LogBridgeBus. |
| Default Event Bus Name | default | Bus used when a node leaves Event Bus Name empty. |
| Default Source | com.mygame | Source used when an event leaves Source empty. |
| Default Schedule Group | default | Group used when a scheduler node leaves Group Name empty. |
| Default Scheduler Role Arn | (empty) | Role the scheduler assumes to invoke targets. |
| Default Timezone | UTC | IANA time zone of schedule expressions. |
Troubleshooting
| Error code | Cause and fix |
NotConfigured | Identity Pool Id or Default Scheduler Role Arn missing in Project Settings > Plugins > BridgeBus. |
AccessDeniedException | The role lacks the permission (for example events:PutEvents on the bus, or the source condition does not match). See Setting up AWS. |
ResourceNotFoundException | Wrong bus, rule, archive, replay or schedule name, or a different region. |
ValidationException | Invalid schedule expression, time zone or role. Check with Validate Schedule Expression. |
InvalidEventPatternException | The pattern is not valid JSON or uses an unsupported filter. |
PartialFailure | Some events / targets were rejected: check each result's Error Code. Throttled events can simply be resent. |
Unavailable | The SDK library could not be loaded or the engine is shutting down. See the Output Log (LogBridgeBus). |
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.