Skip to content

NexusFFXIV/NexusKit.Modules

NexusKit.Modules

Reusable feature modules built on NexusKit.

CI CodeQL Release .NET NexusKit License: AGPL v3

Overview

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:

  • InternalData and ExternalData do not reference each other. Their bridge lives in PlayerEnrichment.
  • 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.

Packages

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.

Install

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)

Quick start

using Microsoft.Extensions.DependencyInjection;
using NexusKit.Modules.PlayerEnrichment;

services
    .AddNexusKitCore()
    .AddNexusKitPersistence()
    .AddNexusKitHosting()
    .AddNexusKitUi()
    .AddNexusKitGameData()
    .AddNexusKitPlayerEnrichment();   // pulls InternalData + ExternalData transitively

Build from source

git 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 Release

The 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.

Contributing

PRs welcome. Contributions are accepted under AGPL-3.0-only.

License

AGPL-3.0-only. NetStone (transitively depended on by Lodestone) is also AGPL — your derivative work must stay open under the same license.

About

Reusable feature modules built on NexusKit

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages