Two long-standing upstream bugs surfaced in our distribution as red error rows on every plugin load. Neither is caused by the fork's own code, but both happen under our plugin name in the log so they had to go before the plugin gets handed to anyone. EmoteCache.LoadData fed BetterTTV's API responses straight into Dictionary.TryAdd. The Top100 endpoint occasionally returns rows with a null Code field, which tripped ArgumentNullException and killed the entire emote load. Filter null/empty codes out explicitly before insertion so a single bad row no longer breaks the cache for everyone else. FontManager.BuildFonts called fontId.AddToBuildToolkit without guarding for the case where the configured SystemFontId points at a font that isn't installed (e.g. "Crimson Text" on a Linux box, or a font the user uninstalled after picking it). The atlas build then crashed and dumped a Dalamud DelegateFontHandle error every single load. Wrap the call in AddFontWithFallback: if the font isn't found, log a warning, fall back to the bundled NotoSansCjkRegular asset and continue. Applied to both the regular and italic font handles.
Hellion Chat
A GDPR-compliant, Linux-aware fork of Chat 2 for FINAL FANTASY XIV / Dalamud.
Same chat replacement you know from upstream, with extra controls for what actually gets stored:
- Channel whitelist for database persistence (GDPR Art. 25 — privacy by default). Out-of-the-box only your own conversations are kept: Tells, Party, Free Company, Linkshells, Cross-World Linkshells, Alliance, ExtraChat. Public chat from strangers (Say/Shout/Yell), Novice Network, NPC dialogue, system spam and battle messages stay outside the database unless you opt them in.
- Per-channel retention with a 24-hour idempotent background sweep. Tells default to 365 days, own-conversation channels to 90, the global default to 30. Off until you switch it on — the plugin never deletes history without your explicit consent.
- Retroactive cleanup with a Ctrl+Shift confirm. Apply the current whitelist to an existing 800-MB+ database, watch it shrink to MBs, all on a background thread.
- Export to Markdown, JSON or CSV (GDPR Art. 15 right of access). Filter by channel, date range or sender substring; written via Dalamud's file dialog without blocking the UI.
- First-run wizard with three profiles (Privacy-First / Casual / Full History) that maps to concrete configuration sets. Reopenable from the Privacy tab any time.
- Independent plugin state. Config and database live under
pluginConfigs/HellionChat/, completely separate from upstream Chat 2 — you can run both side by side, or migrate from Chat 2 once and keep going. - Migration recovery. Heals databases left in a half-applied Migrate3
state (columns added,
user_versionnever bumped) without needing the backup file upstream creates. - Localized UI (EN + DE). All Hellion-specific surfaces follow Dalamud's
language override and switch live. Translations live in
Resources/HellionStrings.<lang>.resx.
Status
Bootstrap (v0.1.x). Used in production on a single user's setup. Not (yet) submitted to the official Dalamud plugin repository — distributed as a custom-repo / dev-plugin while the architecture stabilises.
Why a fork
The upstream maintainer has left filtering-related issues open since 2024 (#84, #173, #174). The original design treats the database as an unlimited searchable archive of everything the chat window sees, which is fine in the US-/JP-shaped privacy mindset but hard to reconcile with EU GDPR data minimization rules when the archive contains messages from third parties.
Forking under EUPL-1.2 is explicitly permitted, the upstream stays
authoritative for the chat-replacement engine, and we cherry-pick relevant
upstream bugfixes from Infiziert90/ChatTwo periodically.
Build
# Linux with XIVLauncher Core
cp .env.example .env
# adjust DALAMUD_HOME if your hooks live somewhere else
set -a; source .env; set +a
dotnet build ChatTwo/ChatTwo.csproj
The output assembly is ChatTwo/bin/Debug/HellionChat.dll. Add the parent
directory as a Dev Plugin Location in Dalamud's experimental settings.
Branding assets
ChatTwo/images/icon.png is the upstream Chat 2 icon and stays in place
until a hand-drawn Hellion logo replaces it. No AI-generated artwork —
ever.
License
EUPL-1.2 (same as upstream Chat 2). See LICENCE.
Acknowledgments
- Infi & Anna (ascclemens) — original Chat 2 engine, filtering, IPC, all the heavy lifting before this fork existed.
- Dalamud team — the plugin framework underneath everything.
- JonKazama-Hellion — fork maintenance, privacy/retention/export features, German localization.
AI assistance disclosure
See AI_DISCLOSURE.md.