Reusable feature modules built on NexusKit.
This repo holds the opt-in feature modules that sit on top of NexusKit. Each module is published as its own NuGet package so consumers pull only what they need. The modules cover the recurring high-level needs of a player-tracking-style FFXIV Dalamud plugin: tracking the local session, enriching player info via external sources, and bridging to other plugins via IPC.
Two architectural rules from the framework carry over here:
InternalDataandExternalDatado not reference each other. Their bridge lives inPlayerEnrichment.External/*modules are standalone bricks: a typed HttpClient (FfxivCollect), a Lodestone scraper (Lodestone), and a generic foreign-plugin-IPC adapter (PluginBridge). They have no Dalamud or InternalData dependencies and could be used by any consumer.
| Package | What it provides |
|---|---|
NexusKit.Modules.InternalData |
Tracks the local player's session — player watcher, encounter tracker, history — using Dalamud framework events. |
NexusKit.Modules.ExternalData |
Aggregates Lodestone + FFXIVCollect external data into a unified read model with shared cache and refresh queue contracts. |
NexusKit.Modules.PlayerEnrichment |
Bridges InternalData and ExternalData via Lodestone-id resolution, the refresh queue, and shared UI hooks. |
NexusKit.Modules.FfxivCollect |
Typed HttpClient for the public FFXIVCollect API with response caching. |
NexusKit.Modules.Lodestone |
NetStone-based scraper for Lodestone character pages, with anti-throttling and DB-backed cache. |
NexusKit.Modules.PluginBridge |
Adapters that consume foreign Dalamud plugin IPCs (Visibility, PriceCheck, etc.) so consumers stay loosely coupled. |
Modules depend on the corresponding NexusKit.* framework packages, so configure both feeds. Create a nuget.config next to your .sln:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="github-nexusffxiv" value="https://nuget.pkg.github.com/NexusFFXIV/index.json" />
</packageSources>
<packageSourceCredentials>
<github-nexusffxiv>
<add key="Username" value="<your-github-login>" />
<add key="ClearTextPassword" value="%GITHUB_PACKAGES_PAT%" />
</github-nexusffxiv>
</packageSourceCredentials>
</configuration>Create a classic PAT with scope read:packages, store it as GITHUB_PACKAGES_PAT, then:
dotnet add package NexusKit.Modules.PlayerEnrichment
# pulls all needed dependencies (Internal/ExternalData, Lodestone, FfxivCollect)using Microsoft.Extensions.DependencyInjection;
using NexusKit.Modules.PlayerEnrichment;
services
.AddNexusKitCore()
.AddNexusKitPersistence()
.AddNexusKitHosting()
.AddNexusKitUi()
.AddNexusKitGameData()
.AddNexusKitPlayerEnrichment(); // pulls InternalData + ExternalData transitivelygit clone https://github.com/NexusFFXIV/NexusKit.Modules.git
cd NexusKit.Modules
# Restore needs your GITHUB_PACKAGES_PAT env var set; see Install section
dotnet build NexusKit.Modules.sln -c ReleaseThe Dalamud-tied modules (InternalData, PlayerEnrichment) need a local Dalamud install. CI installs it from https://goatcorp.github.io/dalamud-distrib/latest.zip; locally, having XIVLauncher's dev hook at %APPDATA%\XIVLauncher\addon\Hooks\dev\ is sufficient.
PRs welcome. Contributions are accepted under AGPL-3.0-only.
AGPL-3.0-only. NetStone (transitively depended on by Lodestone) is also AGPL — your derivative work must stay open under the same license.