Nexus Addon API Reference
Updated 21 October, 2026
This is a complete reference of the Nexus addon API, revision 6, as defined in Nexus.h from RCGG-lib-nexus-api. Every function is a member of the AddonAPI_t table your addon receives in its load function. The guides linked in each section explain the concepts and show complete examples.
Identifiers passed as const char* are copied by Nexus, so they do not need to outlive the call, unless stated otherwise. Strings are null-terminated UTF-8.
Contents
- Addon definition
- Renderer
- User interface
- Updater
- Logging
- Paths
- MinHook
- Events
- Window procedure
- Keybinds
- Game keybinds
- Shared resources
- Textures
- Quick Access
- Localization
- Fonts
- Constants
- Types and enumerations
Addon definition
extern "C" __declspec(dllexport) AddonDefinition_t* GetAddonDef();
| Field | Type | Description |
|---|---|---|
Signature |
uint32_t |
Unique addon ID. Must not be 0. |
APIVersion |
uint32_t |
NEXUS_API_VERSION, or 0 to receive no API. |
Name |
const char* |
Display name. |
Version |
AddonVersion_t |
Major, minor, build and revision. |
Author |
const char* |
Author name. |
Description |
const char* |
Short description. |
Load |
void (*)(AddonAPI_t*) |
Called when the addon is loaded. |
Unload |
void (*)() |
Called before the addon is unloaded. Optional only with AF_DisableHotloading. |
Flags |
EAddonFlags |
Behavior flags. |
Provider |
EUpdateProvider |
Update source. Optional. |
UpdateLink |
const char* |
Update location for the provider. Optional. |
See The Addon Definition and API Versioning.
Renderer
| Member | Description |
|---|---|
void* SwapChain |
The game's IDXGISwapChain*. |
void* ImguiContext |
The shared ImGuiContext*. Pass to ImGui::SetCurrentContext. |
void* ImguiMalloc, void* ImguiFree |
ImGui allocator functions. Pass to ImGui::SetAllocatorFunctions. |
void GUI_Register(ERenderType aRenderType, GUI_RENDER aRenderCallback) |
Registers a render callback of the given type. |
void GUI_Deregister(GUI_RENDER aRenderCallback) |
Removes a render callback, for all types it was registered with. |
GUI_RENDER is void (*)(). See Rendering and Dear ImGui Integration.
User interface
| Member | Description |
|---|---|
void GUI_SendAlert(const char* aMessage) |
Shows a short notification on screen. |
void GUI_RegisterCloseOnEscape(const char* aWindowName, bool* aIsVisible) |
Sets *aIsVisible to false when Escape is pressed while the window with that ImGui name is open. The pointer must stay valid until deregistered. |
void GUI_DeregisterCloseOnEscape(const char* aWindowName) |
Stops closing the window on Escape. |
Updater
| Member | Description |
|---|---|
void RequestUpdate(uint32_t aSignature, const char* aUpdateURL) |
Downloads the DLL at aUpdateURL and installs it as an update for the addon with that signature, without a version check. Only works for addons with the provider UP_Self. |
See Update provider.
Logging
| Member | Description |
|---|---|
void Log(ELogLevel aLogLevel, const char* aChannel, const char* aStr) |
Writes a message to the Nexus log under the given channel. The message is not a format string. |
See Logging.
Paths
The returned strings are owned by Nexus and stay valid until the game closes.
| Member | Returns |
|---|---|
const char* Paths_GetGameDirectory() |
The game folder. |
const char* Paths_GetAddonDirectory(const char* aName) |
\addons, or \addons\ if a name is passed. The folder is not created. |
const char* Paths_GetCommonDirectory() |
\addons\common, a folder shared by all addons, for example for cached API data. |
MinHook
Nexus initializes MinHook once for all addons and exposes it, so addons do not ship and initialize their own copy. The functions behave like the MinHook functions of the same name and return an EMHStatus.
| Member | MinHook equivalent |
|---|---|
EMHStatus MinHook_Create(LPVOID pTarget, LPVOID pDetour, LPVOID* ppOriginal) |
MH_CreateHook |
EMHStatus MinHook_Remove(LPVOID pTarget) |
MH_RemoveHook |
EMHStatus MinHook_Enable(LPVOID pTarget) |
MH_EnableHook |
EMHStatus MinHook_Disable(LPVOID pTarget) |
MH_DisableHook |
Disable and remove every hook in your unload function. Hooking game functions makes your addon volatile, so set AF_IsVolatile, and it counts as accessing game memory under the Addon Policy.
Events
| Member | Description |
|---|---|
void Events_Subscribe(const char* aIdentifier, EVENT_CONSUME aConsumeEventCallback) |
Subscribes a handler to an event. |
void Events_Unsubscribe(const char* aIdentifier, EVENT_CONSUME aConsumeEventCallback) |
Removes a handler from an event. |
void Events_Raise(const char* aIdentifier, void* aEventData) |
Calls all handlers of the event with the payload, synchronously. |
void Events_RaiseNotification(const char* aIdentifier) |
Same as Events_Raise with a nullptr payload. |
void Events_RaiseTargeted(uint32_t aSignature, const char* aIdentifier, void* aEventData) |
Raises the event only for the addon with the given signature. |
void Events_RaiseNotificationTargeted(uint32_t aSignature, const char* aIdentifier) |
Targeted event without payload. |
EVENT_CONSUME is void (*)(void* aEventArgs). See Event Handling and Communication Between Addons.
Window procedure
| Member | Description |
|---|---|
void WndProc_Register(WNDPROC_CALLBACK aWndProcCallback) |
Receives every window message before the game. Return 0 to consume it, or the message to pass it on. |
void WndProc_Deregister(WNDPROC_CALLBACK aWndProcCallback) |
Removes the callback. |
LRESULT WndProc_SendToGameOnly(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) |
Sends a message to the game, bypassing Nexus and all addons. |
WNDPROC_CALLBACK is UINT (*)(HWND, UINT, WPARAM, LPARAM). See Processing window messages.
Keybinds
| Member | Description |
|---|---|
void InputBinds_RegisterWithString(const char* aIdentifier, INPUTBINDS_PROCESS aKeybindHandler, const char* aKeybind) |
Registers a keybind. aKeybind is the default, for example "ALT+SHIFT+T", or "(null)" for none. |
void InputBinds_RegisterWithStruct(const char* aIdentifier, INPUTBINDS_PROCESS aKeybindHandler, Keybind_t aKeybind) |
Same, with the default as a struct. Key is a scan code. |
void InputBinds_Deregister(const char* aIdentifier) |
Removes the handler. The user's key combination is kept. |
void InputBinds_Invoke(const char* aIdentifier, bool aIsRelease) |
Calls the handler of a keybind as if it had been pressed or released. |
INPUTBINDS_PROCESS is void (*)(const char* aIdentifier, bool aIsRelease). Handlers run on their own thread. See Registering and Managing Keybindings.
Game keybinds
| Member | Description |
|---|---|
void GameBinds_PressAsync(EGameBinds aGameBind) |
Presses the keys bound to the game action, without blocking. |
void GameBinds_ReleaseAsync(EGameBinds aGameBind) |
Releases them, without blocking. |
void GameBinds_InvokeAsync(EGameBinds aGameBind, int32_t aDuration) |
Presses the keys and releases them after aDuration milliseconds, without blocking. |
void GameBinds_Press(EGameBinds aGameBind) |
Presses the keys. |
void GameBinds_Release(EGameBinds aGameBind) |
Releases the keys. |
bool GameBinds_IsBound(EGameBinds aGameBind) |
Whether the user has keys set for the action. |
See Pressing game keys.
Shared resources
| Member | Description |
|---|---|
void* DataLink_Get(const char* aIdentifier) |
Returns the resource, or nullptr if it does not exist. |
void* DataLink_Share(const char* aIdentifier, uint64_t aResourceSize) |
Allocates a zeroed resource and returns it. Returns the existing resource if one with the same size exists, or nullptr if one with a different size exists. |
Resources live until the game closes. See Sharing Resources Between Addons.
Textures
| Member | Description |
|---|---|
Texture_t* Textures_Get(const char* aIdentifier) |
Returns the texture, or nullptr. |
Texture_t* Textures_GetOrCreateFromFile(const char* aIdentifier, const char* aFilename) |
Returns the texture if it exists. Otherwise starts loading it and returns nullptr. |
Texture_t* Textures_GetOrCreateFromResource(const char* aIdentifier, uint32_t aResourceID, HMODULE aModule) |
|
Texture_t* Textures_GetOrCreateFromURL(const char* aIdentifier, const char* aRemote, const char* aEndpoint) |
|
Texture_t* Textures_GetOrCreateFromMemory(const char* aIdentifier, void* aData, uint64_t aSize) |
|
void Textures_LoadFromFile(const char* aIdentifier, const char* aFilename, TEXTURES_RECEIVECALLBACK aCallback) |
Loads the texture, also if the identifier exists, and calls aCallback when it is ready, or with nullptr on failure. aCallback may be nullptr. |
void Textures_LoadFromResource(const char* aIdentifier, uint32_t aResourceID, HMODULE aModule, TEXTURES_RECEIVECALLBACK aCallback) |
|
void Textures_LoadFromURL(const char* aIdentifier, const char* aRemote, const char* aEndpoint, TEXTURES_RECEIVECALLBACK aCallback) |
|
void Textures_LoadFromMemory(const char* aIdentifier, void* aData, uint64_t aSize, TEXTURES_RECEIVECALLBACK aCallback) |
TEXTURES_RECEIVECALLBACK is void (*)(const char* aIdentifier, Texture_t* aTexture). Resources must have the type PNG. See Working with Textures in Nexus.
Quick Access
| Member | Description |
|---|---|
void QuickAccess_Add(const char* aIdentifier, const char* aTextureIdentifier, const char* aTextureHoverIdentifier, const char* aKeybindIdentifier, const char* aTooltipText) |
Adds a shortcut icon that invokes the keybind when clicked. |
void QuickAccess_Remove(const char* aIdentifier) |
Removes the shortcut. |
void QuickAccess_Notify(const char* aIdentifier) |
Shows a notification badge on the shortcut. |
void QuickAccess_AddContextMenu(const char* aIdentifier, const char* aTargetShortcutIdentifier, GUI_RENDER aShortcutRenderCallback) |
Adds a section to the right-click menu of the target shortcut, or of the Nexus icon if the target is nullptr. The callback draws ImGui widgets. |
void QuickAccess_RemoveContextMenu(const char* aIdentifier) |
Removes the context menu section. |
Localization
| Member | Description |
|---|---|
const char* Localization_Translate(const char* aIdentifier) |
Returns the text in the active language, falling back to English, then to the identifier. Do not keep the pointer. |
const char* Localization_TranslateTo(const char* aIdentifier, const char* aLanguageIdentifier) |
Same, for a specific language such as "de". |
void Localization_Set(const char* aIdentifier, const char* aLanguageIdentifier, const char* aString) |
Adds or replaces a text. Takes effect from the next frame. |
Fonts
| Member | Description |
|---|---|
void Fonts_Get(const char* aIdentifier, FONTS_RECEIVECALLBACK aCallback) |
Subscribes to an existing font and calls the receiver immediately. If the font does not exist, the receiver is called with nullptr and not subscribed. |
void Fonts_Release(const char* aIdentifier, FONTS_RECEIVECALLBACK aCallback) |
Unsubscribes. The font is removed once it has no subscribers left. |
void Fonts_AddFromFile(const char* aIdentifier, float aFontSize, const char* aFilename, FONTS_RECEIVECALLBACK aCallback, void* aConfig) |
Adds a font and subscribes the receiver. If the identifier exists, only subscribes. aConfig is an optional ImFontConfig*. |
void Fonts_AddFromResource(const char* aIdentifier, float aFontSize, uint32_t aResourceID, HMODULE aModule, FONTS_RECEIVECALLBACK aCallback, void* aConfig) |
|
void Fonts_AddFromMemory(const char* aIdentifier, float aFontSize, void* aData, uint64_t aSize, FONTS_RECEIVECALLBACK aCallback, void* aConfig) |
|
void Fonts_Resize(const char* aIdentifier, float aFontSize) |
Changes the size of a font and notifies its subscribers. |
FONTS_RECEIVECALLBACK is void (*)(const char* aIdentifier, void* aFont), where aFont is an ImFont*. Resources must have the type FONT. See Working with Fonts in Nexus.
Constants
| Constant | Description |
|---|---|
NEXUS_API_VERSION |
The API revision the header describes, currently 6. |
DL_NEXUS_LINK |
Shared resource of type NexusLinkData_t. |
DL_MUMBLE_LINK |
Shared resource of type Mumble::Data. |
DL_MUMBLE_LINK_IDENTITY |
Shared resource of type Mumble::Identity. |
EV_WINDOW_RESIZED |
Event without payload, raised when the game resizes its buffers. |
EV_MUMBLE_IDENTITY_UPDATED |
Event with a Mumble::Identity* payload. |
EV_ADDON_LOADED, EV_ADDON_UNLOADED |
Events with a uint32_t* signature payload. |
More events, including the ArcDPS events, are listed in Event Handling.
Types and enumerations
NexusLinkData_t
typedef struct NexusLinkData_t
{
uint32_t Width; /* Game window width in pixels. */
uint32_t Height; /* Game window height in pixels. */
float Scaling; /* Game interface scaling factor. */
bool IsMoving; /* The character is moving. */
bool IsCameraMoving; /* The camera is moving. */
bool IsGameplay; /* Not in a loading screen or character select. */
void* Font; /* ImFont*, game font. */
void* FontBig; /* ImFont*, large game font. */
void* FontUI; /* ImFont*, game interface font. */
} NexusLinkData_t;
AddonVersion_t, Keybind_t, Texture_t
typedef struct AddonVersion_t
{
uint16_t Major;
uint16_t Minor;
uint16_t Build;
uint16_t Revision;
} AddonVersion_t;
typedef struct Keybind_t
{
uint16_t Key; /* Scan code, with 0xE0 prefix for extended keys. */
bool Alt;
bool Ctrl;
bool Shift;
} Keybind_t;
typedef struct Texture_t
{
uint32_t Width;
uint32_t Height;
void* Resource; /* ID3D11ShaderResourceView* */
} Texture_t;
Enumerations
| Enumeration | Values |
|---|---|
ERenderType |
RT_PreRender, RT_Render, RT_PostRender, RT_OptionsRender |
ELogLevel |
LOGL_CRITICAL (1), LOGL_WARNING (2), LOGL_INFO (3), LOGL_DEBUG (4), LOGL_TRACE (5) |
EAddonFlags |
AF_None, AF_IsVolatile, AF_DisableHotloading, AF_LaunchOnly |
EUpdateProvider |
UP_None, UP_Raidcore, UP_GitHub, UP_Direct, UP_Self |
EMHStatus |
MinHook status codes, MH_OK (0) on success. |
EGameBinds |
Every bindable game action, grouped into movement, skills, targeting, interface, camera, screenshots, map, mounts, spectator, squad markers, mastery skills, miscellaneous, novelties, build templates and equipment templates. See Nexus.h for the full list. |