Move from a local color stack inside Hellion-only surfaces to a
single push wrapping Plugin.Draw, so chat log, settings,
viewers, the file dialog and the wizard all render under the same
palette. The local Push() helper stays for explicit use, but the
two existing call sites (Privacy tab, FirstRunWizard) now drop
their local pushes — the global stack already covers them and
double-pushing would shift colors on every frame.
Palette grew from a single cyan accent into a three-tone HUD set:
Primary cyan-teal (#00B8D4) → buttons, checkboxes, slider grabs,
separator hover/active.
Secondary industrial amber → scrollbar grab and resize-grip
(#FFB300) hover/active highlights.
Tertiary slate violet → active title bars and active tabs
(#7B61FF) so identity beats out the cyan
accent without competing with it on
action controls.
Surfaces are deep slate (#0E1A20 windows, #102027 children, #162831
frames) with steel borders (#37474F). Style variables flatten the
default Dalamud rounding into something more geometric: 4 px window
rounding, 2 px frame/grab/tab/scrollbar, 1 px borders.
A new Configuration.HellionThemeEnabled (default true) and a
matching Appearance section at the top of the Privacy tab let users
turn the whole thing off and fall back to the Dalamud default look.
The flag is checked once per frame in Plugin.Draw — `using
IDisposable? _ = ... ? PushGlobal() : null` — so disabling has zero
overhead beyond a bool check.
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.