Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
253 commits
Select commit Hold shift + click to select a range
c491a09
Remove .mod from gitignore
VBorisof Jan 28, 2026
fc25c35
[codegen] Delete hardcopied .proto files
VBorisof Jan 28, 2026
dad44df
[codegen] Download .proto files
VBorisof Jan 28, 2026
da1fe92
Prune the repository
andresfelipemendez Feb 3, 2026
cd91a1e
reorder proto
andresfelipemendez Feb 4, 2026
1adc879
fix body request gen
andresfelipemendez Feb 4, 2026
a1f540e
tests
andresfelipemendez Feb 4, 2026
ebc10dc
Use query params for array args; add tests
andresfelipemendez Feb 4, 2026
13c4a8d
Propagate session token to MakeRequest
andresfelipemendez Feb 4, 2026
0083034
[codegen] Enum parsing check & debug template
VBorisof Feb 2, 2026
c72f960
Add HttpKey auth and server API overloads
andresfelipemendez Feb 4, 2026
f6aa2ed
Add extended Nakama client validation tests
andresfelipemendez Feb 4, 2026
8d3419d
Ignore .env and auto-detect UNREAL_ENGINE
andresfelipemendez Feb 5, 2026
e2e1f92
Add enum support to codegen and update build tasks
andresfelipemendez Feb 5, 2026
2eb3b61
Remove NUtils.h stub from Nakama Unreal
andresfelipemendez Feb 5, 2026
2b1fd4a
Add NakamaBlueprints module and update blueprints
andresfelipemendez Feb 6, 2026
4dd8f1a
Instrument Nakama client/BP with stats and add tests
andresfelipemendez Feb 9, 2026
848926d
[codegen] Accept a list of proto files (#158)
VBorisof Feb 10, 2026
16cdc90
Initialize NakamaUnreal defaults & add menu widget
andresfelipemendez Feb 10, 2026
6be8a61
Fix duplicated funcMap entries; add realtime.proto
andresfelipemendez Feb 10, 2026
0b4dcb6
Enable UI cursor and input mode in ShowMenu
andresfelipemendez Feb 10, 2026
5dda360
[codegen][rt-client] Scrape RT requests, mostly flesh out realtime cl…
VBorisof Feb 11, 2026
3bf8ef7
Optimize JSON body handling & RPC payload type
andresfelipemendez Feb 12, 2026
15d733c
Serialize RPC body as condensed JSON string
andresfelipemendez Feb 12, 2026
58b691f
Extract SendRequest and add transform RPC test
andresfelipemendez Feb 12, 2026
2abe19e
generate highlevel sdk
andresfelipemendez Feb 17, 2026
5462128
streamline the taskfile
andresfelipemendez Feb 17, 2026
25b0b50
free functions
andresfelipemendez Feb 17, 2026
180c6d0
delete unused templates
andresfelipemendez Feb 18, 2026
eaa58ed
satori
andresfelipemendez Feb 18, 2026
7fb49cc
renaming
andresfelipemendez Feb 18, 2026
043de1f
satori tests
andresfelipemendez Feb 18, 2026
1d9dbb9
remove getters and setters, generate nakama future result replacing t…
andresfelipemendez Feb 19, 2026
aee9cae
fix satori tests
andresfelipemendez Feb 19, 2026
ad8e9a8
optimize tests to run in paralell
andresfelipemendez Feb 19, 2026
f3fbec4
remove session shared pointer
andresfelipemendez Feb 20, 2026
03d13d9
error code moved to partial template
andresfelipemendez Feb 20, 2026
ceb80e0
rename task test-unreal to just test
andresfelipemendez Feb 20, 2026
3302c32
Use TNakamaFuture::FState instead of TPromise
andresfelipemendez Feb 23, 2026
1ac1a04
refactoring
andresfelipemendez Feb 25, 2026
c083cf8
rename tests
andresfelipemendez Feb 25, 2026
d4f902b
Web sockets, real time client (#161)
VBorisof Feb 27, 2026
132254e
[tasks] Fetch satori protos with a github token
VBorisof Feb 28, 2026
7ab191f
Merge branch 'master' into sdk3
VBorisof Mar 2, 2026
e9d9f88
[websockets] Define log category
VBorisof Mar 3, 2026
e3c8c54
[testrunner] Minor adjustments to reporting
VBorisof Mar 3, 2026
a2caf10
[tasks] Fix github token fetching on windows
VBorisof Mar 3, 2026
c22f4dc
[testrunner] Prettify output for shards, provide log file link
VBorisof Mar 3, 2026
e06d3a0
[testrunner] Account for dumber terminals
VBorisof Mar 3, 2026
b8d3207
[unreal-ws] Minor fixes for WebSocket Subsystem implementation
VBorisof Mar 4, 2026
9f52702
[ue-websockets] Lifecycle adjustments
VBorisof Mar 6, 2026
f0b84f7
[tasks] Remove redundant codegen instruction
VBorisof Mar 6, 2026
54008a3
[test] Add web socket subsystem tests
VBorisof Mar 6, 2026
0dc733b
[ue-websockets] Rename websockets subsystem to nakama-specific
VBorisof Mar 7, 2026
5740284
[tests] Adjust tests for NakamaWebSocketSubsystem
VBorisof Mar 7, 2026
c1ba0ee
[nakama-wss] Extract NakamaFuture, reuse for web socket subsystem
VBorisof Mar 7, 2026
963d061
[tests] Adjust nakama wss tests
VBorisof Mar 7, 2026
313df41
[rt][wss] Adjust WebSocketSubsystem API, split ctors for easier use. …
VBorisof Mar 7, 2026
84526c6
[tests] Add NakamaRT integrations tests
VBorisof Mar 7, 2026
d8066d4
[rt] Add blueprint function library
VBorisof Mar 7, 2026
4d2b457
[rt] Re-generate blueprint files
VBorisof Mar 7, 2026
a4364fe
[wss] Do not broadcast server pong messages; Adjust tests
VBorisof Mar 7, 2026
e299b1d
[tests] Re-enable all tests
VBorisof Mar 7, 2026
fa5da00
[tests] Adjust test ouput
VBorisof Mar 7, 2026
a9ca0c9
satori tests
andresfelipemendez Mar 9, 2026
e7a878d
[tests] Fix failing matchmaking tests
VBorisof Mar 10, 2026
4e4d210
satori tests
andresfelipemendez Mar 10, 2026
7982eb1
refactor file structure separate tests from unreal ui code
andresfelipemendez Mar 10, 2026
6ab01de
clone and compile satori
andresfelipemendez Mar 10, 2026
c71ed55
single satori file and proto check tool
andresfelipemendez Mar 10, 2026
e347291
repace blueprint action AddToRoot to TWeakObjectPtr
andresfelipemendez Mar 11, 2026
a72e294
delete accounts end of each tests
andresfelipemendez Mar 11, 2026
fbd643f
fix match join
andresfelipemendez Mar 12, 2026
f9c0602
fix leak sending pings
andresfelipemendez Mar 12, 2026
554ed7a
check WebSocketSubsystem before using to avoid crash
andresfelipemendez Mar 12, 2026
7453bee
atomic bIsConnected
andresfelipemendez Mar 12, 2026
348e80d
fix bp NewObject<T>() called with no outer
andresfelipemendez Mar 12, 2026
844b3f5
make satori call nakama for rpc calls
andresfelipemendez Mar 12, 2026
23c0e9d
[codegen] Fix minor buffer preallocation bug
VBorisof Mar 12, 2026
3a8de7d
[codegen] Go canonical file names
VBorisof Mar 12, 2026
15c6b70
[wss] Guard .OnConnectionError() with stale socket check
VBorisof Mar 12, 2026
2e6268d
[wss] Be more defensive about storing new ConnectionParams
VBorisof Mar 13, 2026
df73308
replace ints with enums
andresfelipemendez Mar 13, 2026
dd90454
fix error codes
andresfelipemendez Mar 13, 2026
3cbf3da
default values and, remove listener clears since it would break reconect
andresfelipemendez Mar 13, 2026
cae6410
replace deprectaed tatomic
andresfelipemendez Mar 13, 2026
f0ae776
[codegen] Url-encode query parameters
VBorisof Mar 13, 2026
bedc38c
separate module implementation files for blueprints to fllow unreal u…
andresfelipemendez Mar 13, 2026
2d1dc47
fix dangling pointer for gcd ubojects inflight retry
andresfelipemendez Mar 13, 2026
9bddb5a
[codegen] Treat proto wrapper types as optional
VBorisof Mar 16, 2026
d55d669
flatteng high level api function arguments
andresfelipemendez Mar 16, 2026
b05e9e1
[codegen] Push yacg
VBorisof Mar 17, 2026
c34ecf4
separate satori
andresfelipemendez Mar 18, 2026
f84083b
transient bp libs
andresfelipemendez Mar 18, 2026
e65d63a
flatten codegen
andresfelipemendez Mar 20, 2026
d9baf57
refactor modular codegen
andresfelipemendez Mar 20, 2026
365c9a4
convert remaining templates
andresfelipemendez Mar 20, 2026
10e755f
share templates
andresfelipemendez Mar 20, 2026
d6f8c24
generate all templates
andresfelipemendez Mar 20, 2026
06fa3b4
strengthen gethttpmethod
andresfelipemendez Mar 20, 2026
aa86155
remove dead sentine use path join, generate error constructor
andresfelipemendez Mar 20, 2026
d43b8d1
experimental dotnet
andresfelipemendez Mar 20, 2026
2a8cea8
realtime
andresfelipemendez Mar 21, 2026
8b7682c
[wip][codegen] Revert codegen-modular changes, adjust client interface
VBorisof Apr 7, 2026
65ed5ce
Add function locals; implement .cpp; enrich RPC model
VBorisof Apr 8, 2026
8adee33
Restore NakamaRt.cpp
VBorisof Apr 9, 2026
1e3ef5d
[codegen] Refactor; remove viewmodels, finish mappers, adjust typemaps
VBorisof Apr 13, 2026
46569e7
[codegen] Continue refactor, introduce NameResolvers
VBorisof Apr 14, 2026
d811dbf
[codegen] Adjust cpp template
VBorisof Apr 14, 2026
a7a90cf
[codegen] Fill/sort parameters on earlier stage
VBorisof Apr 14, 2026
552a38b
[codegen] Continue refactor, implement http api map
VBorisof Apr 14, 2026
8c823fe
[codegen] Finish refactor, implement http api, begin migration for te…
VBorisof Apr 15, 2026
3915fc2
[codegen] Add static files
VBorisof Apr 16, 2026
a86110b
[codegen] Template adjustments
VBorisof Apr 16, 2026
585857a
[codegen] Expand for types. Generalize function locals to DataDecl me…
VBorisof Apr 16, 2026
59506a4
[codegen] Adjust templates
VBorisof Apr 16, 2026
c99b25f
[codegen] RT Client; interface adjustments, cleanup
VBorisof Apr 17, 2026
38770fa
[codegen][wip] Finish templates, mostly finish mappers.
VBorisof Apr 18, 2026
7bb8794
[codegen] Adjust prefixed
VBorisof Apr 19, 2026
13f7d2b
[codegen] Adjust module layout
VBorisof Apr 19, 2026
4c5d183
[codegen] Fix template
VBorisof Apr 19, 2026
fb7cc6d
[codegen] Finish re-write of nakama sdk with new codegen
VBorisof Apr 19, 2026
2402860
[codegen] Fix minor bugs, add default init values for primitives
VBorisof Apr 19, 2026
5305857
[codegen] Delete older modules
VBorisof Apr 19, 2026
4ca8879
[codegen] Replace old codegen
VBorisof Apr 20, 2026
7c1881c
[codegen] Fix several issues, slight name resolution refactor
VBorisof Apr 20, 2026
734a613
[tasks] Adjust taskfile for new codegen
VBorisof Apr 20, 2026
1ae2e95
[codegen] Auto-create directories
VBorisof Apr 20, 2026
9a53873
[codege] Regenerate files
VBorisof Apr 20, 2026
6b24ed3
[codegen] Fix template includes
VBorisof Apr 20, 2026
2485140
[codegen] Fix satori template includes
VBorisof Apr 20, 2026
964437f
[codegen] Regenerate
VBorisof Apr 20, 2026
e2fe2c1
[codegen] Rename NameResolver -> TypeMapper
VBorisof Apr 20, 2026
872184d
[codegen] Enum members to UPPERCASE
VBorisof Apr 20, 2026
ee03ca0
[codegen] Regenerate
VBorisof Apr 20, 2026
4080ddc
[codegen] Blueprints: Fix Delegates to expose Error
VBorisof Apr 20, 2026
c718852
[blueprints] Regenerate
VBorisof Apr 20, 2026
4e5a02e
[blueprints] Adjust codegen to auto-generate default TMap<..., ...>-s…
VBorisof Apr 20, 2026
139370a
[rt] Fix rt type generation, regenerate
VBorisof Apr 20, 2026
25abfba
[unreal] Move static files away from codegen
VBorisof Apr 20, 2026
91f1234
[unreal] Fix errors
VBorisof Apr 20, 2026
de2d07f
[codegen] Fix template errors
VBorisof Apr 21, 2026
20aedd3
[nakama][satori] Regenerate, fix build errors
VBorisof Apr 21, 2026
20ac238
[codegen] Fix errors
VBorisof Apr 21, 2026
f9dce65
[nakama][satori] Regenerate, fix build errors
VBorisof Apr 21, 2026
1e84e20
[codegen] Fix errors
VBorisof Apr 21, 2026
550424b
[nakama][satori] Regenerate, fix build errors
VBorisof Apr 21, 2026
32a3ac3
[codegen] Fix cross-file reference edgecase for Realtime mapper
VBorisof Apr 21, 2026
87aec5b
[codegen] Fix errors
VBorisof Apr 21, 2026
f19870e
[nakama][satori] Regenerate, fix build errors
VBorisof Apr 21, 2026
2c1357c
[tests] Fix tests
VBorisof Apr 21, 2026
9b45559
[codegen] Fixes for tests
VBorisof Apr 21, 2026
27c7bb8
[nakama][satori] Regenerate, fix testing errors
VBorisof Apr 21, 2026
a168e8a
[tests] Fix tests
VBorisof Apr 21, 2026
83e298e
[wip] hl-mapper
VBorisof Apr 22, 2026
a147f48
Restore param ordering on high-level APIs
VBorisof Apr 22, 2026
8b56be5
[codegen] Fixes
VBorisof Apr 22, 2026
358d348
[nakama] Regenerate
VBorisof Apr 22, 2026
31e3e12
[tests] Fix tests
VBorisof Apr 22, 2026
2188ee0
[wip][rt] Update Realtime client generator to pick up return types/ca…
VBorisof Apr 23, 2026
11f3213
[rt] Update Realtime client generator to pick up return types, add pr…
VBorisof Apr 24, 2026
867cfe4
[codegen][rt] Add codegen for RT binders
VBorisof Apr 24, 2026
e035e27
[rt] Regenerate
VBorisof Apr 24, 2026
567fe5a
[rt] Adjust tests
VBorisof Apr 24, 2026
f42d78d
[codegen] Fixes
VBorisof Apr 24, 2026
a76fac8
[nakama] Regenerate
VBorisof Apr 24, 2026
b4b05de
[tests] Fix tests
VBorisof Apr 24, 2026
fa9d5ea
[nakama] Add NakamaExtraEnums
VBorisof Apr 27, 2026
fafc793
[codegen] Fix for Timestamps: FString->FDateTime
VBorisof Apr 27, 2026
9fa8b40
[nakama][satori] Regenerate, fix Timestamps FString->FDateTime
VBorisof Apr 27, 2026
4cec79a
[tests] Fix tests
VBorisof Apr 27, 2026
09924f9
[codegen] Fix apimap param names
VBorisof Apr 29, 2026
c4c7b4d
[tasks] Remove codegen as testing step
VBorisof Apr 30, 2026
b97c10a
[docs] Adjust readme
VBorisof Apr 30, 2026
9edc092
[docs] Adjust readme
VBorisof Apr 30, 2026
4e4a23c
[docs] Updating readme
DapperDino May 1, 2026
9c7791a
[docs] Fix typo
DapperDino May 1, 2026
72177a2
[docs] Add Satori auth snippets to readme
DapperDino May 1, 2026
0685045
[nakama] Fix error namespace and copyright year
VBorisof May 4, 2026
63364a4
[nakama] Initialize default value for a NakamaSession bool member
VBorisof May 4, 2026
d6b7948
[codegen] Fix BP delegates.
VBorisof May 5, 2026
06a84e8
[nakama][satori] Regenerate
VBorisof May 5, 2026
088198a
[tests] Fix integration tests build
VBorisof May 5, 2026
afecbd8
[bp] Expose NakamaSession & NakamaClientConfig funcs to blueprints
VBorisof May 5, 2026
b6bb807
[bp][satori] Expose SatoriSession & SatoriClientConfig funcs to bluep…
VBorisof May 5, 2026
bd43f93
[wss] Expose Blueprint functions
VBorisof May 5, 2026
40f191c
[nakama][satori] Fix build
VBorisof May 6, 2026
7c7688d
[wss] Remove Uproperty from JSON data in raw response; adjust member …
VBorisof May 6, 2026
df462e7
[codegen] Introduce NakamaRtEventProxy, adjustments for NakamaRtClient
VBorisof May 6, 2026
1d5b3a2
[rt] Regenerate, add NakamaRtEventProxy
VBorisof May 6, 2026
174cb0c
[tests] Fix RT tests for new event binders
VBorisof May 6, 2026
21e0473
[codegen][rt] Adjust NakamaRtEventProxy
VBorisof May 6, 2026
80564a2
[rt] Regenerate NakamaRtEventProxy
VBorisof May 6, 2026
630247f
[rt][codegen] RtEventProxy: Remove UFUNCTION from private handlers
VBorisof May 6, 2026
7260a94
[bp][codegen] Adjust RpcFunc call to have Session in Blueprints
VBorisof May 7, 2026
09a5e8a
Merge branch 'master' into sdk3
VBorisof May 7, 2026
4fa64d5
delete review.txt
VBorisof May 7, 2026
22dba64
[docs] Update remaining readme screenshots and captions
DapperDino May 7, 2026
4b139d6
[docs] Re-order readme and add satori blueprint mention
DapperDino May 7, 2026
e36b624
[plugin] Add a small version file for discoverability
VBorisof May 8, 2026
2396e2d
[etc] Copy nakama.version to game builds
VBorisof May 8, 2026
011a636
Fix Nakama.Build.cs nakama version
DapperDino May 8, 2026
fbe2e21
[codegen] Account for optional types
VBorisof May 10, 2026
64f00c0
[nakama][satori] Introduce concrete Optional Types: Blueprint friendly
VBorisof May 10, 2026
6debfae
[nakama][satori] Regenerate
VBorisof May 10, 2026
0472def
[codegen] Include Optional Types for NakamaRt
VBorisof May 10, 2026
4fbf629
[nakama][satori] Adjust Optional Types: proper RT aliases, proper int…
VBorisof May 10, 2026
0b742c8
[rt] Regenerate
VBorisof May 10, 2026
4ff68ed
[tests] Adjust/fix tests due to Optionals changes
VBorisof May 10, 2026
29b6a6d
Adjust nakama.version
VBorisof May 10, 2026
f30f768
[etc] Adjust changelog, bump plugin versions.
VBorisof May 11, 2026
f7d1d98
[bp] Fix broken test blueprints
VBorisof May 11, 2026
ad09b85
[git] Add .vsconfig to gitignore
VBorisof May 11, 2026
ee27d7d
[codegen] Remove redundant 0 checks
VBorisof May 11, 2026
0b0c20e
[codegen] Remove noexcept
VBorisof May 11, 2026
51e985e
[nakama][satori] Regenerate (remove noexcept)
VBorisof May 11, 2026
099c46d
[satori] Add SATORIAPI_API to Types
VBorisof May 12, 2026
953651c
[codegen][rt] Rt: Multi-socket fixes
VBorisof May 13, 2026
fb99300
[rt] Load WebSockets upon module startup
VBorisof May 13, 2026
62df0e0
[websockets] Replace NakamaWebSocketSubsystem with per-client RtConne…
VBorisof May 13, 2026
4dfd077
[etc] Adjust Sessions: missing field init in SatoriSession
VBorisof May 13, 2026
73a7844
[tests] Adjust RT tests
VBorisof May 13, 2026
9d68abc
[tests] Adjust testrunner
VBorisof May 13, 2026
c4d9d5f
[rt] Fix RTConnection, remove socket epochs
VBorisof May 15, 2026
6c536ad
[rt][bp] Regenerate RT Blueprints
VBorisof May 15, 2026
d202138
[tests] Fix missing RtConnection tests
VBorisof May 15, 2026
aba3d57
[codegen][rt] Generate RtConnection, slim-down RtProxy, rename to RtH…
VBorisof May 19, 2026
018a028
[rt][bp] Regenerate
VBorisof May 19, 2026
6bc457b
[tests] Adjust realtime tests
VBorisof May 19, 2026
e006fd0
[tests] Adjust testrunner to pick up tests correctly
VBorisof May 19, 2026
bfb4763
[etc] Bump nakama.version
VBorisof May 19, 2026
8393ea5
[tests] Adjust test blueprints
VBorisof May 19, 2026
ee0790b
[cmd][rt] Minor realtime adjustments, move some files to NakamaApi mo…
VBorisof May 19, 2026
4b25f3d
[tests] Test Blueprint Adjustments
VBorisof May 19, 2026
945aade
[etc] Bump version
VBorisof May 19, 2026
47fa815
[etc] Delete CLAUDE.md
VBorisof May 20, 2026
9e84569
[codegen][rt] Add bSuccess field to Connection
VBorisof May 20, 2026
bd0a057
[tests][bp] Adjust test blueprint
VBorisof May 20, 2026
0edfba0
[etc] Bump version
VBorisof May 20, 2026
b79e380
[nakama][satori][codegen] Collect QueryParams in Api methods into TAr…
VBorisof May 20, 2026
49630ad
[nakama][satori] Adjust HttpHelpers to accept, build and url-encode q…
VBorisof May 20, 2026
536192c
[etc] Bump version
VBorisof May 20, 2026
bd5ced9
[fix] Include unimported header
VBorisof May 20, 2026
c2f4f14
[codegen] Remove protos from git.
VBorisof May 20, 2026
21fd2dd
[codegen] Remove codegen binary
VBorisof May 20, 2026
b46504d
[docs] Readme update with new rt screenshots
DapperDino May 20, 2026
9d912e8
Merge branch 'sdk3' of https://github.com/heroiclabs/nakama-unreal in…
DapperDino May 20, 2026
9222e3e
[codegen] Revert to simpler codegen. Begin refactor.
VBorisof May 24, 2026
c847ae6
[codegen][tasks] Adjust Taskfile. Restore version file.
VBorisof May 24, 2026
56dc9ad
[nakama] Refactor/move files to single module, regenerate files.
VBorisof May 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
40 changes: 21 additions & 19 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@
*.idb

# Kernel Module Compile Results
*.mod*
*.cmd
modules.order
Module.symvers
Expand All @@ -50,10 +49,6 @@ dkms.conf

# Compiled Dynamic libraries

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai

Expand Down Expand Up @@ -165,16 +160,6 @@ Temporary Items
# Visual Studio 2015 database file
*.VC.db

# Compiled Object files

# Precompiled Headers

# Compiled Dynamic libraries

# Fortran module files

# Compiled Static libraries

# Executables
*.ipa

Expand All @@ -187,6 +172,8 @@ Temporary Items
*.sdf
*.VC.opendb

*.vsconfig

# Precompiled Assets
SourceArt/**/*.png
SourceArt/**/*.tga
Expand Down Expand Up @@ -547,10 +534,12 @@ NakamaBlueprintsTest/DerivedDataCache
NakamaBlueprintsTest/Saved
NakamaBlueprintsTest/Binaries

NakamaTest/Plugins/Nakama
NakamaTest/Intermediate
NakamaTest/Saved
NakamaTest/Binaries
IntegrationTests/Plugins/Nakama
IntegrationTests/Plugins/Satori
IntegrationTests/Intermediate
IntegrationTests/DerivedDataCache
IntegrationTests/Saved
IntegrationTests/Binaries

Nakama/Intermediate
Nakama/Saved
Expand All @@ -570,3 +559,16 @@ IntegrationTests/DerivedDataCache
vcpkg_installed/
/NakamaBlueprintsTest/Content/Developers
/NakamaBlueprintsTest/Content/Collections
.env
proto/
Reports/IntegrationTests/index.html
Reports/IntegrationTests/index.json
Reports/NakamaProfile/
/IntegrationTests/Reports
NakamaTest/Binaries
NakamaTest/DerivedDataCache
NakamaTest/Intermediate/
NakamaTest/Saved/
Reports
IntegrationTests/satori/
IntegrationTests/dashboards/
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,27 @@ All notable changes to this project are documented below.

The format is based on [keep a changelog](http://keepachangelog.com/) and this project uses [semantic versioning](http://semver.org/).

### [3.0.0] - 2026-05-11
### Added
- Async Future-based API.
- Missing Server-to-server methods.
- Auto-generation from Nakama/Satori schema.
- Extensive Integration Test suite.

### Changed
- Function signatures (please refer to documentation).
- Component lifetimes are less coupled to Unreal Engine Garbage Collector.

### Fixed
- Improved consistency across the SDK.
- Revamped real-time websocket code.

This is a major release with a larger list of changes.
For more information on the current version and the differences to previous versions,
please refer to [documentation](https://heroiclabs.com/docs/nakama/client-libraries/unreal/index.html)
and the [migration guide](https://heroiclabs.com/docs/nakama/client-libraries/unreal/migration-guide).


### [2.11.2] - 2026-04-27
### Added
- Server-side Satori events: #165
Expand Down
91 changes: 91 additions & 0 deletions IntegrationTests/.editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
[*.{cpp,h}]

# Naming convention rules (note: currently need to be ordered from more to less specific)

cpp_naming_rule.aactor_prefixed.symbols = aactor_class
cpp_naming_rule.aactor_prefixed.style = aactor_style

cpp_naming_rule.swidget_prefixed.symbols = swidget_class
cpp_naming_rule.swidget_prefixed.style = swidget_style

cpp_naming_rule.uobject_prefixed.symbols = uobject_class
cpp_naming_rule.uobject_prefixed.style = uobject_style

cpp_naming_rule.booleans_prefixed.symbols = boolean_vars
cpp_naming_rule.booleans_prefixed.style = boolean_style

cpp_naming_rule.structs_prefixed.symbols = structs
cpp_naming_rule.structs_prefixed.style = unreal_engine_structs

cpp_naming_rule.enums_prefixed.symbols = enums
cpp_naming_rule.enums_prefixed.style = unreal_engine_enums

cpp_naming_rule.templates_prefixed.symbols = templates
cpp_naming_rule.templates_prefixed.style = unreal_engine_templates

cpp_naming_rule.general_names.symbols = all_symbols
cpp_naming_rule.general_names.style = unreal_engine_default

# Naming convention symbols

cpp_naming_symbols.aactor_class.applicable_kinds = class
cpp_naming_symbols.aactor_class.applicable_type = AActor

cpp_naming_symbols.swidget_class.applicable_kinds = class
cpp_naming_symbols.swidget_class.applicable_type = SWidget

cpp_naming_symbols.uobject_class.applicable_kinds = class
cpp_naming_symbols.uobject_class.applicable_type = UObject

cpp_naming_symbols.boolean_vars.applicable_kinds = local,parameter,field
cpp_naming_symbols.boolean_vars.applicable_type = bool

cpp_naming_symbols.enums.applicable_kinds = enum

cpp_naming_symbols.templates.applicable_kinds = template_class

cpp_naming_symbols.structs.applicable_kinds = struct

cpp_naming_symbols.all_symbols.applicable_kinds = *

# Naming convention styles

cpp_naming_style.unreal_engine_default.capitalization = pascal_case
cpp_naming_style.unreal_engine_default.required_prefix =
cpp_naming_style.unreal_engine_default.required_suffix =
cpp_naming_style.unreal_engine_default.word_separator =

cpp_naming_style.unreal_engine_enums.capitalization = pascal_case
cpp_naming_style.unreal_engine_enums.required_prefix = E
cpp_naming_style.unreal_engine_enums.required_suffix =
cpp_naming_style.unreal_engine_enums.word_separator =

cpp_naming_style.unreal_engine_templates.capitalization = pascal_case
cpp_naming_style.unreal_engine_templates.required_prefix = T
cpp_naming_style.unreal_engine_templates.required_suffix =
cpp_naming_style.unreal_engine_templates.word_separator =

cpp_naming_style.unreal_engine_structs.capitalization = pascal_case
cpp_naming_style.unreal_engine_structs.required_prefix = F
cpp_naming_style.unreal_engine_structs.required_suffix =
cpp_naming_style.unreal_engine_structs.word_separator =

cpp_naming_style.uobject_style.capitalization = pascal_case
cpp_naming_style.uobject_style.required_prefix = U
cpp_naming_style.uobject_style.required_suffix =
cpp_naming_style.uobject_style.word_separator =

cpp_naming_style.aactor_style.capitalization = pascal_case
cpp_naming_style.aactor_style.required_prefix = A
cpp_naming_style.aactor_style.required_suffix =
cpp_naming_style.aactor_style.word_separator =

cpp_naming_style.swidget_style.capitalization = pascal_case
cpp_naming_style.swidget_style.required_prefix = S
cpp_naming_style.swidget_style.required_suffix =
cpp_naming_style.swidget_style.word_separator =

cpp_naming_style.boolean_style.capitalization = pascal_case
cpp_naming_style.boolean_style.required_prefix = b
cpp_naming_style.boolean_style.required_suffix =
cpp_naming_style.boolean_style.word_separator =
19 changes: 0 additions & 19 deletions IntegrationTests/.vsconfig

This file was deleted.

4 changes: 2 additions & 2 deletions IntegrationTests/Config/DefaultEngine.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

[/Script/EngineSettings.GameMapsSettings]
GameInstanceClass=/Script/Engine.GameInstance
EditorStartupMap=/Game/Maps/EmptyMap
GameDefaultMap=/Game/Maps/EmptyMap
EditorStartupMap=/Game/Maps/menu.menu
GameDefaultMap=/Game/Maps/menu.menu

[/Script/HardwareTargeting.HardwareTargetingSettings]
TargetedHardwareClass=Desktop
Expand Down
Binary file added IntegrationTests/Content/Maps/menu.umap
Binary file not shown.
Binary file added IntegrationTests/Content/Maps/testnakama.uasset
Binary file not shown.
2 changes: 1 addition & 1 deletion IntegrationTests/IntegrationTests.uproject
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"FileVersion": 3,
"EngineAssociation": "{A3A5E785-4C17-39B0-8BE8-0F814BEA5348}",
"EngineAssociation": "{7BBEE08C-471E-1AB2-A872-B7AFBBC9FC79}",
"Category": "",
"Description": "",
"Modules": [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ public class IntegrationTests : ModuleRules
public IntegrationTests(ReadOnlyTargetRules Target) : base(Target)
{
PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs;
CppStandard = CppStandardVersion.Cpp20;
PrivateDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "FieldNotification", "InputCore", "Json", "HTTP", "NakamaUnreal", "SatoriUnreal", "WebSockets", "Slate", "SlateCore", "UMG", "ModelViewViewModel" });
PrivateDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "FieldNotification", "InputCore", "Json", "HTTP", "NakamaApi", "Nakama", "NakamaBlueprints", "SatoriApi", "Satori", "SatoriBlueprints", "WebSockets", "Slate", "SlateCore", "UMG", "ModelViewViewModel" });
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
/**
* Future Threading Tests
*
* Demonstrates bug: TSatoriFuture terminal .Next() callbacks ran on the UE
* background task thread pool instead of the game thread.
*
* Root cause (Satori.h, old TSatoriFuture:169-179): the terminal Next() overload
* passed the user callback directly to UE::Tasks::Launch without any
* AsyncTask(ENamedThreads::GameThread, ...) dispatch. Callers that touched
* UObject*, fired delegates, or updated UI would therefore hit non-thread-safe
* access and intermittent crashes.
*
* Fix: both TNakamaFuture and TSatoriFuture are now aliases for the shared
* TAsyncFuture<> template (AsyncFuture.h / NakamaApi module), which dispatches
* every user-visible callback — chaining and terminal — to the game thread.
*
* The Satori test below verifies the fix. The Nakama control test was already
* passing before the consolidation.
*/

#include <atomic>
#include "Misc/AutomationTest.h"
#include "AsyncFuture.h"

// ============================================================================
// Satori: terminal .Next() must run on the game thread
// ============================================================================

IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FSatoriTerminalNextOnGameThreadTest,
"IntegrationTests.Threading.Satori.TerminalNextMustRunOnGameThread",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | EAutomationTestFlags::EngineFilter
)

struct FSatoriThreadingTestResult
{
bool bIsError = false;
};

bool FSatoriTerminalNextOnGameThreadTest::RunTest(const FString& Parameters)
{
TSharedRef<std::atomic<bool>> bCallbackRanOnGameThread = MakeShared<std::atomic<bool>>(false);
TSharedRef<std::atomic<bool>> bCallbackInvoked = MakeShared<std::atomic<bool>>(false);

MakeCompletedAsyncFuture(FSatoriThreadingTestResult{}).Next(
[bCallbackRanOnGameThread, bCallbackInvoked](FSatoriThreadingTestResult)
{
bCallbackRanOnGameThread->store(IsInGameThread());
bCallbackInvoked->store(true);
});

// Spin-wait up to 5 s, pumping the game-thread task queue each iteration
// so the AsyncTask dispatch can actually execute.
constexpr double TimeoutSeconds = 5.0;
const double Deadline = FPlatformTime::Seconds() + TimeoutSeconds;
while (!bCallbackInvoked->load())
{
FTaskGraphInterface::Get().ProcessThreadUntilIdle(ENamedThreads::GameThread);
if (FPlatformTime::Seconds() > Deadline)
{
AddError(TEXT("Timed out waiting for TSatoriFuture terminal .Next() callback"));
return false;
}
FPlatformProcess::Sleep(0.01f);
}

TestTrue(
TEXT("TSatoriFuture terminal .Next() callback must run on the game thread"),
bCallbackRanOnGameThread->load()
);

return true;
}

// ============================================================================
// Nakama: same guarantee, kept as a control / regression test
// ============================================================================

struct FNakamaThreadingTestResult
{
bool bIsError = false;
};

IMPLEMENT_SIMPLE_AUTOMATION_TEST(
FNakamaTerminalNextOnGameThreadTest,
"IntegrationTests.Threading.Nakama.TerminalNextMustRunOnGameThread",
EAutomationTestFlags::EditorContext | EAutomationTestFlags::ClientContext | EAutomationTestFlags::EngineFilter
)

bool FNakamaTerminalNextOnGameThreadTest::RunTest(const FString& Parameters)
{
TSharedRef<std::atomic<bool>> bCallbackRanOnGameThread = MakeShared<std::atomic<bool>>(false);
TSharedRef<std::atomic<bool>> bCallbackInvoked = MakeShared<std::atomic<bool>>(false);

MakeCompletedAsyncFuture(FNakamaThreadingTestResult{}).Next(
[bCallbackRanOnGameThread, bCallbackInvoked](FNakamaThreadingTestResult)
{
bCallbackRanOnGameThread->store(IsInGameThread());
bCallbackInvoked->store(true);
});

constexpr double TimeoutSeconds = 5.0;
const double Deadline = FPlatformTime::Seconds() + TimeoutSeconds;
while (!bCallbackInvoked->load())
{
FTaskGraphInterface::Get().ProcessThreadUntilIdle(ENamedThreads::GameThread);
if (FPlatformTime::Seconds() > Deadline)
{
AddError(TEXT("Timed out waiting for TNakamaFuture terminal .Next() callback"));
return false;
}
FPlatformProcess::Sleep(0.01f);
}

TestTrue(
TEXT("TNakamaFuture terminal .Next() callback must run on the game thread"),
bCallbackRanOnGameThread->load()
);

return true;
}
Loading