Skip to content

UE4SS Experimental Release Archive

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 01 Mar 00:30
· 1677 commits to main since this release

Important: The default installation layout has changed. All UE4SS files (including UE4SS.dll, settings, and mods) now reside in a ue4ss subfolder next to your game executable. Only the proxy DLL (dwmapi.dll) remains in the game's Win64 directory. This keeps your game folder cleaner and makes it easier to manage UE4SS installations. Existing installations in the old location will continue to work for backwards compatibility if the UE4SS dll is replaced directly.

New

General

Added CMake build system alongside Xmake - (UE4SS #1067)

  • CMake >= 3.22 is now supported as the default build system
  • Documentation updated to reference CMake build instructions
  • xmake may be deprecated in the future. Meanwhile, we cannot guarantee ABI compatability

Added support for UE Version 5.7

Added support for UE Version 5.6 - (UE4SS #977)

Added support for UE Version 5.5 - (UE4SS #708)

Added support for UE Version 5.4 - (UE4SS #503)

Added basic support for Development/Debug/Test built Unreal Engine games (UE4SS #607)

  • To use this functionality, set DebugBuild to true in UE4SS-Settings.ini

Added command line option to disable RE-UE4SS loading via proxy DLL. Use --disable-ue4ss to launch game without UE4SS while keeping the proxy DLL installed. (UE4SS #1069)

Added command line option to specify custom UE4SS.dll path via proxy DLL. Use --ue4ss-path <path> to load UE4SS.dll from a custom location, supporting both absolute and relative paths. This allows developers to easily test different UE4SS builds without modifying files. (UE4SS #1074)

Added environment variable UE4SS_MODS_PATHS. This is a colon separated list of additional directories to load Lua and C++ mods from. (UE4SS #1069)

Added new build definition "LessEqual421". Using this definition for games on UE<=4.21 is not mandatory for UE4SS to function, but will ensure the correct alignment is used in containers.

BREAKING: - This also changes the default FName alignment from 8 to 4.

  • To use this functionality, enter LessEqual421 in the section of the XMake configuration command.

BREAKING: Changed default EFindName parameter for FName constructors from FNAME_Find to FNAME_Add.

  • FName constructors will now create new name table entries by default if the name doesn't exist, rather than returning NAME_None
  • To maintain the old behavior, explicitly pass FNAME_Find as the second parameter
  • This affects all string-based FName constructors

Added optional scans for GUObjectHashTables, GNatives and ConsoleManagerSingleton; made FText an optional scan; externed the found GNatives for use by mods(UE4SS #744)

  • GUObjectHashTables and ConsoleManagerSingleton are currently unused and a WIP.

UE Platform support, which allows for much easier internal implementation of new Unreal classes (UEPseudo #80) - narknon, localcc

Added new installation method by allowing overriding of the location of the UE4SS.dll, documentation. - (UE4SS #506) - Buckminsterfullerene

Add Github alerts pre-processor support to the documentation system (UE4SS #611) - Buckminsterfullerene

Added custom game configurations for Abiotic Factor (UE4SS #709)

Added custom game configurations for Psychonauts 2 (UE4SS #731)

Added custom game configurations for Lies of P (UE4SS #787)

Added custom game configurations for Project Silverfish (UE4SS #1066)

Added custom game configurations for Whiskerwood (UE4SS #1079)

Added custom game configurations for StarRupture (UE4SS #1150)

The GUI can now be rendered in the game thread if RenderMode in UE4SS-settings.ini is set to
EngineTick or GameViewportClientTick (UE4SS #768, UE4SS #794).

Added override Lua files for ProcessLocalScriptFunction and ProcessInternal UE4SS #823 - M3C3I

Added override Lua files for CallFunctionByNameWithArguments UE4SS #848 - M3C3I

Add error messages in places where only error codes were previously logged (e.g. load a C++ mod) UE4SS #902

Added [f: <address_or_module_offset> section to UE4SS_ObjectDump.txt UE4SS #866

Added line in the docs to add FText::FromString(FString&) as an alternative to FText::FText(FString&) for UE5 games - (UE4SS #1078)

Live View

Added search filter: IncludeClassNames. (UE4SS #472) - Buckminsterfullerene

Added search filter: Match Memory Address. (UE4SS #882) - vitrvvivs

Added ability to call UFunctions directly from the GUI. (UE4SS #851)

Added highlights for properties matching the Has property and Has property of type filters (UE4SS #1089)

Added a Dump as JSON button for individual objects, located next to the Find functions button (UE4SS #1112)

Lua Debugger

Added new Lua Debugger GUI tab with debugging tools for Lua mod development (UE4SS #1099)

  • Breakpoint management with hit counts
  • Step debugging (Step Into, Step Over, Step Out, Continue)
  • Call stack viewer with clickable frames
  • Locals and upvalues inspection
  • Global variables browser with search and tree navigation
  • REPL console with command history
  • Script editor
  • Loaded modules viewer
  • Mods management tab to view, enable/disable, and create Lua mods

Added individual mod restart/uninstall/start functionality to Lua Debugger (UE4SS #1105)

  • Restart and Uninstall buttons for running mods in the Mods tab
  • Start button for non-running mods without requiring a full hot reload
  • Restart/Start button in Script Editor tab for quick mod iteration
  • New file creation dialog with optional auto-require in main.lua

UHT Dumper

Added support for generating FUtf8String and FAnsiString properties in UHT-compatible headers (UE4SS #1015)

Lua API

Added support for FUtf8String and FAnsiString Unreal string types with string manipulation API (UE4SS #1015)

  • Refactored FString implementation to use unified TLuaStringBase template for code reuse and consistency

Added global functions for mod management (UE4SS #1105)

  • RestartCurrentMod() - Restart the currently running mod
  • UninstallCurrentMod() - Uninstall the currently running mod
  • RestartMod(ModName) - Restart another mod by name
  • UninstallMod(ModName) - Uninstall another mod by name

Added comprehensive Delayed Action System for game-thread timer management (UE4SS #1128)

  • New execution functions:
    • ExecuteInGameThreadWithDelay(delayMs, callback) - Execute after delay, returns handle
    • ExecuteInGameThreadWithDelay(handle, delayMs, callback) - UE Delay-style (only executes if handle not active)
    • RetriggerableExecuteInGameThreadWithDelay(handle, delayMs, callback) - Resets timer if called again (debouncing)
    • LoopInGameThreadWithDelay(delayMs, callback) - Repeating timer with handle
    • ExecuteInGameThreadAfterFrames(frames, callback) - Frame-based delay (requires EngineTick)
    • LoopInGameThreadAfterFrames(frames, callback) - Frame-based repeating timer
    • MakeActionHandle() - Generate unique handle for use with delay functions
  • Timer control functions:
    • CancelDelayedAction(handle) - Cancel a pending action
    • PauseDelayedAction(handle) - Pause a timer
    • UnpauseDelayedAction(handle) - Resume a paused timer
    • ResetDelayedActionTimer(handle) - Restart with original delay
    • SetDelayedActionTimer(handle, newDelayMs) - Change delay and restart
    • ClearAllDelayedActions() - Cancel all actions for current mod
  • Query functions:
    • IsValidDelayedActionHandle(handle) - Check if handle exists
    • IsDelayedActionActive(handle) - Check if timer is running
    • IsDelayedActionPaused(handle) - Check if timer is paused
    • GetDelayedActionRate(handle) - Get configured delay
    • GetDelayedActionTimeRemaining(handle) - Get remaining time
    • GetDelayedActionTimeElapsed(handle) - Get elapsed time
  • New global variables: EngineTickAvailable, ProcessEventAvailable
  • New enum: EGameThreadMethod with ProcessEvent and EngineTick values
  • ExecuteInGameThread now accepts optional second parameter for execution method
  • Per-mod action ownership ensures mods can only control their own timers
  • Deprecates: ExecuteAsync and LoopAsync (still work but lack control features)

Updated Lua version to 5.4.7 (UE4SS #887)

  • This is necessary to compile with Clang.

ForEach loops now support early termination by returning true from callbacks (UE4SS #1058)

  • Applies to TArray:ForEach, TMap:ForEach, TSet:ForEach, and UDataTable:ForEachRow
  • Fully backward compatible - existing callbacks without return values continue to work

Added UDataTable support to Lua API. (UE4SS #997)

  • Find rows by name with DataTable:FindRow(RowName)
  • Get all rows with DataTable:GetAllRows()
  • Iterate rows with DataTable:ForEachRow(Callback)
  • Add/remove rows dynamically with DataTable:AddRow(RowName, RowData) and DataTable:RemoveRow(RowName)
  • Access row names with DataTable:GetRowNames()
  • Get the entire row map with DataTable:GetRowMap()
  • Clear all rows with DataTable:EmptyTable()
  • Get row count with #DataTable operator

Enhanced TArray support to enable round-trip functionality (UE4SS #992)

  • TArray userdata can now be passed as function parameters
  • Improved handling of empty arrays and nil values
  • Fixed proper element copying when passing arrays between Lua and C++

Added TSet implementation. UE4SS #883

Added TMap implementation. UE4SS #755

Enhanced TMap support to enable round-trip functionality UE4SS #933

  • TMap userdata can now be passed as function parameters
  • Improved handling of empty maps and nil values
  • Fixed proper key-value pair copying when passing maps between Lua and C++
  • Added proper rehashing to ensure map integrity after copying

Added Lua delegate property support with Add/Remove/Clear/GetBindings/Broadcast methods. See DelegateProperty, MulticastDelegateProperty, and MulticastSparseDelegateProperty. #1073

Added global function CreateInvalidObject, which returns an invalid UObject. (UE4SS #652)

Added GenerateLuaTypes function. (UE4SS #664)

Added global Dumpers functions to Types.lua. (UE4SS #664)

Added global functions RegisterEndPlayPreHook and
RegisterEndPlayPostHook. (UE4SS #769)

Errors can now be caught using pcall and xpcall. (UE4SS #833)

Added custom module searcher with UTF-8 path support for Lua require() (UE4SS #884)

  • Added support for case-insensitive Scripts/scripts directory detection
  • Improved error messages showing all attempted paths when module loading fails
  • Fixed IterateGameDirectories to properly handle UTF-8 paths and Unicode characters
  • Fixed CreateLogicModsDirectory to properly create directories with Unicode paths and handle parent directory creation
  • Fixed global Lua print function to properly handle UTF-8 string conversion

Added support for UScriptStruct when using RegisterCustomProprety (UE4SS #1036)

Added support for handling structs as userdata (Fixed StructData as userdata is not yet implemented). (UE4SS #1169) - Corporalwill123

Types.lua PR #650

  • Added NAME_None definition
  • Added EFindName enum definition
  • Added FName function overloads with FindType parameter
  • Added TMap definitions

Types.lua PR #820

  • Added UStruct definition
  • Added UClass definition

UEHelpers

  • Added function GetPlayer which is just a fast way to get player controlled Pawn (the majority of the time it will be the player character) PR #650

  • Added functions: GetEngine, GetGameInstance, GetGameViewportClient, GetGameModeBase, GetGameStateBase,GetPersistentLevel and GetWorldSettings PR #650

  • Added functions to get static objects: GetKismetStringLibrary, GetKismetTextLibrary PR #650

  • Added function GetActorFromHitResult which extracts the hit actor from a FHitResult struct based on UE's version PR #650

  • Added FName utility functions PR #650:

    • FindFName: wrapper for FName(Name, EFindName.FNAME_Find)
    • AddFName: wrapper for FName(Name, EFindName.FNAME_Add)
  • Added Lua Server Annotations to all UEHelpers functions PR #650

  • Added functions GetAllPlayerStates and GetAllPlayers PR #688

  • Added annotation for function FText to Types.lua. (UE4SS #788)

  • Removed cache for GetPlayerController and GetWorld PR #1047

C++ API

Added UDataTable class to C++ API. (UE4SS #997)

  • Full DataTable row access with FindRow<T>(), GetAllRows<T>(), and ForEachRow<T>()
  • Row manipulation with AddRow(), RemoveRow(), and EmptyTable()
  • Direct implementations that work across all UE versions without relying on virtual functions

Key binds created with UE4SSProgram::register_keydown_event end up being duplicated upon mod hot-reload.

  • To fix this, CppUserModBase::register_keydown_event has been introduced.
  • It's used exactly the same way except without the UE4SSProgram:: part. (UE4SS #446)

Added on_ui_init(), it fires when the UI is initialized.

  • It's intended to use the UE4SS_ENABLE_IMGUI macro in this function.
  • Failing to do so will cause a crash when you try to render something with imgui.

BREAKING: Changed FTransform constructor to be identical to unreal.

Added OpenFor::ReadWrite, to be used when calling File::open.

  • This can be used when calling FileHandle::memory_map, unlike OpenFor::Writing. (UE4SS #507)

Added hook for UGameViewportClient::Tick. (UE4SS #767)

Added hook for AActor::EndPlay. (UE4SS #769)

Added function 'UE4SSProgram::delete_mod'. (UE4SS #843)

Added function 'UE4SSProgram::get_all_input_events'. (UE4SS #843)

Enhanced TObjectPtr<> implementation to function as a proper smart pointer. (UE4SS-RE/RE-UE4SS #850, Re-UE4SS/UEPseudo #125)

BREAKING: The TObjectPtr<> class now uses a proper pointer implementation rather than direct struct member access. Code that directly accessed UnderlyingObjectPointer will need to be updated:

// Old way
TObjectPtr<UClass> ClassPtr;
UClass* RawPtr = ClassPtr.UnderlyingObjectPointer;

// New way
TObjectPtr<UClass> ClassPtr;
UClass* RawPtr = ClassPtr; // implicit conversion
// or
UClass* RawPtr = ClassPtr.Get(); // explicit access

Added improved string and path conversion utilities with proper UTF-8 support (UE4SS #913)

  • Rewrote to_charT_string_path() to properly handle UTF-8 and UTF-16 encodings
  • Added ensure_str_as<CharT>() for explicit target character type conversion
  • Added to_utf8_string() for convenient UTF-8 string conversion
  • Added normalize_path_for_lua() to convert paths to UTF-8 with forward slashes for Lua compatibility
  • Added utf8_to_wpath() to convert UTF-8 paths to Windows wide strings
  • BREAKING: to_charT_string_path() now returns UTF-8 encoded strings for char type instead of locale-dependent encoding

BPModLoader

Experimental

Changes

General

Updated ImGui from v1.89 to v1.92.1 for improved functionality and Clang compatability

Updated ImGuiTextEdit to support newest ImGui API

Updated fmt library to 11.2.0

Changed the default location of the UE4SS release assets to be in game executable directory/ue4ss/. This change is backwards compatible with the old location. (UE4SS #506) - Buckminsterfullerene

Updated PatternSleuth submodule (UE4SS #638)

The bUseUObjectArrayCache option in UE4SS-settings.ini is now set to false by default in the non-zDev release (UE4SS #747)

The GuiConsoleEnabled option in UE4SS-settings.ini is now set to 0 by default in the non-zDev
release (UE4SS #779)

Removed some development mods, README.md & Changelog.md from non-zDev release, added LICENCE file to both release types (UE4SS #830)

The execution of the game is now paused durin the first AOB scan, and then resumed to complete potential further scans and initialization. (UE4SS #985)

Removed the FText constructor AOB, replaced it with more consistent non-AOB method of constructing FText instances (UE4SS #1139)

Live View

Fixed the majority of the lag (UE4SS #512)

Added support for watching ArrayProperty and StructProperty (UE4SS #419)

The search filter ExcludeClassName can now be found in the IncludeClassNames dropdown list. (UE4SS #472) - Buckminsterfullerene

The following search filters now allow multiple values, with each value separated by a comma: IncludeClassNames, ExcludeClassNames, HasProperty, HasPropertyType. (UE4SS #472) - Buckminsterfullerene

Large structs that cause FPS problems no longer render, but you can still click on the struct to render each individual property of the struct. (UE4SS #1080)

Large performance increase when Apply filters when not searching is enabled (UE4SS #1090)

UHT Dumper

Lua API

print now behaves like vanilla Lua (can now accept zero, one, or multiple arguments of any type) (UE4SS #423) - Lyrth

The callback of NotifyOnNewObject can now optionally return true to unregister itself (UE4SS #432) - Lyrth

RegisterConsoleCommandHandler, RegisterConsoleCommandGlobalHandler, RegisterProcessConsoleExecPreHook and RegisterProcessConsoleExecPostHook now support enclosing parameters in double quotes ("). This allows spaces within the quotes to be ignored, treating the enclosed string as a single parameter. (UE4SS #653, UE4SS #669)

BREAKING: RegisterProcessConsoleExecPreHook, RegisterProcessConsoleExecPostHook callback parameter CommandParts now includes the command name at the start of the array (lua array index 1). (UE4SS #669)

Improved performance of script hooks created with RegisterHook, and
RegisterCustomEvent. (UE4SS #801)

BREAKING: AActor:GetWorld() and AActor:GetLevel() functions are now returning an invalid UObject instead of nil. (UE4SS #810)

Types with get or Get functions now have both variants. (UE4SS #877)

Improved error messages when improperly indexing into LocalUnrealParam, and RemoteUnrealParam without first calling Get. (UE4SS #1154)

UEHelpers UE4SS #650

  • Increased version to 3

  • Reworked all UEHelpers functions to ensure that they always return an object which can be checked with the function IsValid for validation

  • Reworked UEHelpers.GetPlayerController to return first valid player controller (It will now return a player controller even if it doesn't control a pawn at the time)

  • Reworked UEHelpers.GetWorld function to use UWorld cache (UWorld usually never changes)

  • Change UEHelpers.GetWorldContextObject function annotation to return UObject. (Any UObject with a GetWorld() function is a valid WorldContext)

  • Removed duplicate function UEHelpers.GetKismetMathLibrary

C++ API

BPModLoader

BPModLoader now supports loading mods from subdirectories within the LogicMods folder (UE4SS #412) - Ethan Green

ConsoleEnablerMod

Added additional console key ~ (Tilde) (UE4SS #687)

The console keys F10 and ~ are now added by the mod in addition to the existing keys instead of replacing them (UE4SS #687)

Repo & Build Process

Switch to xmake from cmake which makes building much more streamlined (UE4SS #377, UEPseudo #81) - localcc

Fixes

General

Fixed BPModLoaderMod not working in games made in UE 5.2+ - (UE4SS #503)

Fixed adding elements to TArray in Lua incorrectly resizing and zeroing out previous values (UE4SS #436) - dnchattan

Fixed some debug GUI layout alignments, especially with different GUI font scaling settings (UE4SS #429) - Lyrth

Fixed PalServer not accepting connections from players (UE4SS #453)

Fixed a crash that would occur randomly due to accidental execution of Live View search code (UE4SS #475)

Fixed freeze related to the error "Tried to execute UFunction::FuncPtr hook but there was no function map entry" (UE4SS #468)

Fixed ModsFolderPath in UE4SS-settings.ini not working (UE4SS #609)

Fixed attempt to index a nil value (global 'NewController') error in SplitScreenMod (UE4SS #729)

Fixed the GUI not closing properly with CTRL + O when OpenGL is enabled in
UE4SS-settings.ini. (UE4SS #780)

Fixed PalServer crashing when debug console is enabled in UE4SS-settings.ini (UE4SS #1160) - Okaetsu

Fixed PalServer console having broken text when running under Proton/Wine (UE4SS #1160) - Okaetsu

Live View

Fixed the "Write to file" checkbox not working for functions in the Watches tab (UE4SS #419)

Reduced the likelihood of a crash happening on shutdown when at least one watch is enabled (UE4SS #419)

Fixed constantly searching even if the search field is empty, and even if not on the tab (UE4SS #475)

Fixed crash caused by using invalid iterator. (UE4SS #771)

Fixed opened object getting clipped too early (UE4SS #814) -
Corporalwill123

Made StructProperty and ArrayProperty Expandable, making contained properties directly viewable (UE4SS #943) -
Corporalwill123

Fixed crash on warning in dumpers and generators (UE4SS #976)

Fixed crash on expanding arrays (UE4SS #1082)

Fixed broken filters: Include CDOs & CDOs only (UE4SS #1089)

Fixed the Include inheritance filter taking precedence over other filters, causing them to not apply (UE4SS #1089)

Fixed the Refresh search button sometimes not working correctly (UE4SS #1089)

Fixed filters incorrectly being applied when not searching (UE4SS #1089)

UHT Dumper

Fix SetupAttachment implementations randomly changing order (UE4SS #606) - Buckminsterfullerene

Lua API

Fixed FString use after free (UE4SS #425) - localcc

Fixed the "IterateGameDirectories" global function throwing "bad conversion" errors (UE4SS #398)

Fixed FText not working as a parameter (in RegisterHook, etc.) (UE4SS #422) - localcc

Fixed crash when calling UFunctions that take one or more 'out' params of type TArray. (UE4SS #477)

Fixed FindObject not accepting UClass as a valid outer parameter. (UE4SS #732) - GhostyPool

Fixed RegisterProcessConsoleExecPostHook. (UE4SS #631)

Fixed FindFirstOf return type annotation in Types.lua to signal that the return value will never be nil. (UE4SS #652)

Fixed non-const TArray outparams being skipped in UFunction property pushers. (UE4SS #754)

Fixed RegisterLoadMapPreHook not working at all. (UE4SS #776)

Fixed Key::NUM_ZERO being incorrectly mapped to
Key::NUM_NINE. (UE4SS #762)

Fixed table-in-table when used as a function param (i.e. FTransform) generating a Lua
error. (UE4SS #775)

Fixed script hooks corrupting the return value of the original
function. (UE4SS #800)

Fixed race condition when using RegisterCustomEvent or
UnregisterCustomEvent. (UE4SS #805)

Fixed frequent StrProperty can only be set to a string or FString
error. (UE4SS #819)

Fixed problems that caused issues for language servers. (UE4SS #821

Fixed errors being logged twice. (UE4SS #833)

Fixed RegisterHook and UnregisterHook not working properly with functions that have spaces in their
names. (UE4SS #827

Fixed an error with Object properties causing stack corruption. (UE4SS #939

Fixed UEHelpers sometimes causing a runtime error. (UE4SS #987

Fixed callbacks only working for the first registrant of several hooks. (UE4SS #1143

Fixed callbacks being executed in the wrong thread. (UE4SS #1170

Fixed UFunction and UClass properly inheriting from UStruct in Lua. (UE4SS #1158) - Corporalwill123

C++ API

Fixed a crash caused by a race condition enabled by C++ mods using UE4SS_ENABLE_IMGUI in their constructor (UE4SS #481)

Fixed the std::span returned by FileHandle::memory_map being improperly sized. (UE4SS #507)

Fixed 'File::Handle' unable to be moved if used in conjunction with memory_map. (UE4SS #544)

Fixed Key::NUM_ZERO being incorrectly mapped to Key::NUM_NINE. (UE4SS #716)

BPModLoader

Fixed "bad conversion" errors (UE4SS #398)

Fixed calling PostBeginPlay multiple times for each ModActor (UE4SS #447) - Okaetsu

Fixed displaying 'PostBeginPlay not valid' when VerboseLogging is set to false (UE4SS #447) - Okaetsu

Fixes mods not loading when UE4SS initializes too late (UE4SS #454) - localcc

Fixed LoadMod function issue that variables would go out-of-scope in the ExecuteInGameThread callback. Instead, LoadMods is now always called in a game thread. (UE4SS #752)

Settings

Added

[Overrides]
; Additional mods directories to load mods from
; Use + prefix to add a directory, - prefix to remove
; Can be relative to working directory or absolute paths
; Example:
;   +ModsFolderPaths = ../SharedMods
;   +ModsFolderPaths = C:/MyMods
;   -ModsFolderPaths = ../SharedMods
; Default: none

; Path to a specific mods.txt file to use as the controlling mod list.
; If set, ONLY this mods.txt will be parsed instead of mods.txt from all mod directories.
; Can be relative to working directory or an absolute path.
; Example: ControllingModsTxt = ../MyMods/mods.txt
; Default: Empty (parse mods.txt from all mod directories)
ControllingModsTxt =

[General]
; The key that will trigger a reload of all mods.
; The CTRL key is always required.
; Valid values (case-insensitive): Anything from Mods/Keybinds/Scripts/main.lua
; Default: R
HotReloadKey = R

[EngineVersionOverride]
; True if the game is built as Debug, Development, or Test.
; Default: false
DebugBuild =

[ObjectDumper]
; Whether to display the offset from the main executable for functions instead of the function pointer
; Default: 0
UseModuleOffsets = 0

[Debug]
RenderMode = ExternalThread

[Hooks]
HookLoadMap = 1
HookAActorTick = 1
HookEngineTick = 1
HookGameViewportClientTick = 1
HookUObjectProcessEvent = 1
HookProcessConsoleExec = 1
HookUStructLink = 1

Removed

[Debug]
LiveViewObjectsPerGroup = 32768

[ExperimentalFeatures]
GUIUFunctionCaller