Removing BetterTTV took out the plugin's only outbound network call, and five documents were still describing it as present. PRIVACY.md led with "one outbound network call exists by design" -- the opposite of what shipped an hour ago, and the one claim in that file people actually check. PRIVACY.md now opens with none at all. The section that described the call is kept and marked as removed rather than deleted, so the claim can be read against what it replaced: the startup fetch meant BetterTTV saw an IP as soon as the plugin loaded, whether an emote ever appeared or not. Worth leaving visible. BetterTTV also comes out of the third-party table, which now lists only the two parties nobody using this plugin through Dalamud can avoid. SECURITY.md listed the EmoteCache HTTP client as in scope for reports. There is nothing there to report on. THIRD_PARTY_NOTICES.md named the call as current; both entries it has ever carried are now historical. README dropped the pointer to the outbound call and the switch for it, a stability bullet about a crash fix in code that no longer exists, and the line in the Chat 2 migration that moved an emote cache directory nothing reads. ROADMAP gained 2.0.1 and 2.0.2, and a section for what the 2.0.0 push left behind: 47 overlong comment blocks, channel names translated in only ten of the 25 languages, an orphaned EmoteCacheV1 directory on anyone who ran an older build, and the deprecated GlobalScaleSafe call that is the last compiler warning in the build.
512 lines
30 KiB
Markdown
512 lines
30 KiB
Markdown
# Hellion Chat
|
||
|
||
[](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/actions/workflows/build.yml)
|
||
[](LICENSE)
|
||
[](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/releases/latest)
|
||
[](https://github.com/goatcorp/Dalamud)
|
||
[](https://dotnet.microsoft.com/)
|
||
[](https://www.finalfantasyxiv.com/)
|
||
|
||
<p align="center">
|
||
<img src="docs/images/hellion-forge.png" alt="Hellion Forge" width="180" />
|
||
</p>
|
||
|
||
**Version 2.0.2** — Privacy-first chat plugin for FINAL FANTASY XIV / Dalamud, originally
|
||
forked from [Chat 2](https://github.com/Infiziert90/ChatTwo) (EUPL-1.2).
|
||
|
||
Hellion Chat is a privacy-first chat plugin that began as a fork of Chat 2. The core it grew from
|
||
is still recognisable — the message store, the channel logic, the hook system — and most keyboard
|
||
shortcuts work the way you would expect. Everything above that has been rebuilt: as of v2.0.0 every
|
||
window is drawn by the plugin rather than by ImGui defaults.
|
||
|
||
What sets it apart from upstream: stricter privacy defaults out of the box, a first-run wizard that
|
||
asks what may be stored before anything is, a theme engine with ten built-in palettes, 25 UI
|
||
languages, and no web interface. Slash commands live under `/hellion`.
|
||
|
||
The data-handling focus is on GDPR/EU, US, and JP regulations, as far as practically applicable for
|
||
a chat plugin: per-channel retention periods, granular filters, and self-service data export. A full
|
||
breakdown is available in [`PRIVACY.md`](PRIVACY.md).
|
||
|
||
This is a standalone repository, licensed under EUPL-1.2. With v1.0.0 the standalone cut is
|
||
complete: own namespace `HellionChat.*`, own IPC channels, own source tree structure. Distribution
|
||
via custom repo. Active upstream sync ended with the v1.4.x cycle: Chat 2 is undergoing a
|
||
fundamental rework and cherry-picks are no longer portable. From here, Hellion Chat continues as an
|
||
independent codebase — background and attribution in
|
||
[`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md).
|
||
|
||
> **A note on plugins.** Third-party plugins are a grey area in Final Fantasy XIV: Square Enix's
|
||
> terms of service do not cover them, and Naoki Yoshida has publicly asked that people not advertise
|
||
> them. Keep the subject out of Say, Yell, Shout and every other public channel in game.
|
||
|
||
## Acknowledgements
|
||
|
||
Hellion Chat is built on [Chat 2](https://github.com/Infiziert90/ChatTwo) by
|
||
**[Infiziert90 (Infi)](https://github.com/Infiziert90)** and
|
||
**[Anna](https://github.com/anna-is-cute)**, who maintained the plugin for years before I ever saw
|
||
the source code. The entire core architecture, the message store, the channel logic, the hook
|
||
system, and much more all come from them. If Hellion Chat helps you, the credit for that belongs in
|
||
large part to Infi and Anna. A full acknowledgement is in [NOTICE.md](NOTICE.md).
|
||
|
||
Hellion Chat is developed under **Hellion Forge**, the specialized modding and plugin branch of
|
||
[Hellion Online Media](https://hellion-media.de).
|
||
|
||
---
|
||
|
||
## Tech Stack
|
||
|
||
| Category | Technology |
|
||
| ------------ | --------------------------------------------------- |
|
||
| Platform | Dalamud Plugin (API Level 15) |
|
||
| Language | C# 13 / .NET 10 (`net10.0-windows`) |
|
||
| Build | Dalamud.NET.Sdk 15.0.0, DalamudPackager 15.0.0 |
|
||
| UI | Dear ImGui (Dalamud bindings) |
|
||
| Database | SQLite (Microsoft.Data.Sqlite, MessagePack storage) |
|
||
| Localization | ResX (HellionStrings.resx, .de.resx; PR-based) |
|
||
| Font | Inter Light (SIL Open Font License 1.1, bundled) |
|
||
| Toolchain | dotnet 10 SDK, VS Code with C# Dev Kit |
|
||
| Deployment | GitHub Releases + custom repo (`repo.json`) |
|
||
|
||
---
|
||
|
||
## Features
|
||
|
||
### Privacy / Compliance
|
||
|
||
- **Channel whitelist** for database persistence with privacy-first defaults. Out of the box, only
|
||
your own conversations are stored (tells, party, FC, linkshells, cross-world linkshells, alliance,
|
||
ExtraChat). Public chat, NPC dialogue, system spam, and battle logs are discarded at the storage
|
||
layer.
|
||
- **Per-channel retention periods** with a daily background cleanup. Tells: 365 days, own
|
||
conversation channels: 90 days, global default: 30 days. The default is OFF — the plugin deletes
|
||
nothing without explicit consent.
|
||
- **Retroactive cleanup** with preview and Ctrl+Shift confirmation. Applies the current whitelist to
|
||
an existing database, runs in the background, and calls VACUUM afterward.
|
||
- **Export** to Markdown, JSON, or CSV via the Dalamud file dialog (GDPR Art. 15 right of access).
|
||
Narrow it by channel group, by age in days, or by a substring of the sender's name.
|
||
- **Full privacy overview** in [`PRIVACY.md`](PRIVACY.md) and third-party components in
|
||
[`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md): what is stored, an explicit
|
||
no-telemetry statement, and the mapping of GDPR rights (Art. 15/17/18/20/21) to concrete plugin
|
||
functions. As of v2.0.2 the plugin makes no outbound network requests at all.
|
||
|
||
### Onboarding
|
||
|
||
- **First-run wizard** with three profiles (Privacy-First, Relaxed, Full History) and a GDPR notice
|
||
for the "Full History" option.
|
||
- **Configuration migration** seeds privacy defaults for existing users and shows a notification on
|
||
the first plugin start after an update. With v1.0.0, users on config version 12 or older also
|
||
receive a one-time tab layout reset; the old tab configuration is backed up as
|
||
`pluginConfigs/HellionChat.json.pre-v13-backup`.
|
||
- **Layout migration from Chat 2** moves configuration and database to `pluginConfigs/HellionChat/`
|
||
without data loss. Handles locked files gracefully (warns the user if Chat 2 is still loaded).
|
||
- **Migrate3 recovery** heals partially migrated databases from old Chat 2 installations.
|
||
|
||
### Look & Feel
|
||
|
||
- **Bilingual UI** (English and German) with live language switching. Hellion-specific strings are
|
||
in `HellionStrings.<lang>.resx`.
|
||
- **Hellion HUD theme** with cyan-teal accents, slate-violet tabs, and amber highlights for active
|
||
states.
|
||
- **Chat color presets** (v0.6.0) with seven built-in bundles in Settings → Appearance → Colours:
|
||
Classic (Chat 2 default), High Contrast, Pastel, Dark Mode Tuned, Hellion (brand), plus
|
||
bonus moods Night Blue and Indigo Violet. One-click apply, battle channels remain untouched.
|
||
- **Window opacity slider** for combat-friendly transparency.
|
||
- **Bundled UI font** (Inter Light, OFL-1.1) as an optional default instead of the system font.
|
||
- **Hellion logo** bundled in the plugin and displayed in the Dalamud plugin list.
|
||
|
||
#### Custom Themes (v1.1.0)
|
||
|
||
HellionChat ships a theme engine with ten built-in themes (Hellion Arctic, Hellion Spectrum, Chat 2
|
||
Classic, Event Horizon, Crystal Nocturne, Mint Grove, Night Blue, Indigo Violet, Forge Merchantman,
|
||
Synthwave Sunset) and a JSON-based authoring format for custom themes. Schema and step-by-step guide
|
||
in [`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md). Hellion Spectrum is
|
||
Deuteranopia/Protanopia-safe (red-green color blindness) based on the Wong/Okabe-Ito palette.
|
||
|
||
#### Plugin Integrations (v1.3.0)
|
||
|
||
- **Honorific custom titles in the chat header.** When the Honorific plugin is active and a custom
|
||
title is set, it is displayed in the chat header above the message log. Auto-detect with silent
|
||
fallback: without Honorific the slot is invisible. Toggle in Settings → About → Integrations.
|
||
First cycle of a multi-stage plugin integration roadmap (context menu, NotificationMaster, RP
|
||
status, ExtraChat, and XIVIM to follow).
|
||
|
||
### Pop-Out Convenience (v0.6.0)
|
||
|
||
- **Input bar in pop-out windows.** Every pop-out has a compact input at the bottom with a
|
||
channel-colored icon button and text field. No more switching back to the main window for a quick
|
||
reply. It is always on: the `PopOutInputEnabled` switch this once described has no reader and no
|
||
control, and is scheduled for removal.
|
||
- **Per-pop-out independent text buffer and history cursor.** Changing channels in a pop-out works
|
||
globally like in the main window (FFXIV channel API), but half-typed input doesn't collide between
|
||
the main window and pop-outs.
|
||
- **Shared input history** across all windows via singleton service. Up/Down arrow keys navigate the
|
||
same list of the last 30 entries everywhere.
|
||
|
||
### Stability
|
||
|
||
- Font atlas build fallback for missing system fonts.
|
||
- Defensive wrapping of all migration operations.
|
||
|
||
### What's missing compared to Chat 2
|
||
|
||
The web interface was removed in Hellion Chat 0.2.0. It serves a different use case than the focus
|
||
of this fork — remote access to chat from a second device — which conflicts directly with the
|
||
privacy-first premise: a chat plugin that starts a local HTTP server is too large an attack surface
|
||
for my threat model. So it's gone.
|
||
|
||
If you want the full Chat 2 feature set, the upstream plugin serves you better. Hellion Chat is
|
||
deliberately the slimmer fork.
|
||
|
||
---
|
||
|
||
## Architecture
|
||
|
||
```text
|
||
HellionChat/
|
||
├── Privacy/
|
||
│ └── PrivacyDefaults.cs # Whitelist sets, per-channel retention table
|
||
├── Export/
|
||
│ └── MessageExporter.cs # Markdown / JSON / CSV serializer
|
||
├── Resources/
|
||
│ ├── HellionStrings.resx # Hellion-specific UI strings (EN)
|
||
│ ├── HellionStrings.de.resx # German translation
|
||
│ ├── HellionStrings.Designer.cs # Hand-maintained accessor
|
||
│ ├── ChatColourPresets.cs # Seven built-in color presets (v0.6.0)
|
||
│ ├── Inter-Light.ttf # Inter Light static font (bundled UI font)
|
||
│ ├── Inter-OFL.txt # OFL-1.1 license text (bundled with font)
|
||
│ └── Language*.resx # Upstream localization (Crowdin)
|
||
├── Ui/
|
||
│ ├── FirstRunWizard.cs # Four-step, four-profile onboarding
|
||
│ ├── StyleEngine/ # Tokens, widgets and the theme push
|
||
│ ├── Windows/ # Main, settings, popouts, DB viewer
|
||
│ └── Components/Settings/Tabs/
|
||
│ └── DataPrivacyTab.cs # Data & Privacy tab (filters, retention, cleanup, export)
|
||
├── Ipc/ # IPC channels, migrated to HellionChat.* in v1.0.0
|
||
├── ChatTwoConflictDetector.cs # Blocks plugin load if upstream Chat 2 is active
|
||
├── images/
|
||
│ └── icon.png # Hellion logo (256×256)
|
||
├── HellionChat.csproj # SDK Dalamud.NET.Sdk/15.0.0
|
||
└── HellionChat.yaml # Plugin manifest (DalamudPackager source)
|
||
```
|
||
|
||
### Rules
|
||
|
||
- **Code namespace is `HellionChat.*`.** Fully consolidated onto the plugin name since v1.0.0 — no
|
||
remaining `ChatTwo.*` anywhere in the source tree.
|
||
- **AssemblyName is `HellionChat`.** Own slot in `pluginConfigs/`, own file manifest, no shared
|
||
state with Chat 2. Parallel-loading upstream Chat 2 is actively blocked on startup (bilingual
|
||
conflict message).
|
||
- **IPC channels are `HellionChat.*`.** Six channels for third-party plugin integration (`Register`,
|
||
`Available`, `Unregister`, `Invoke`, `GetChatInputState`, `ChatInputStateChanged`). Details in
|
||
[`docs/IPC.md`](docs/IPC.md).
|
||
- **Hellion-specific strings in `HellionStrings.*.resx`**, strings carried over from Chat 2 in
|
||
`Language.*.resx`. The original `Language.*.resx` structure is preserved because the existing
|
||
translations from the upstream Crowdin community remain valuable.
|
||
- **No direct access to `Plugin.Interface.UiBuilder.FontAtlas`** outside of `FontManager`. Font
|
||
fallback and the Hellion font are managed centrally.
|
||
|
||
---
|
||
|
||
## Database
|
||
|
||
SQLite, schema inherited from upstream Chat 2 (migration level v3). Hellion extensions live in
|
||
`Configuration` as fields, not in the DB schema:
|
||
|
||
| Column | Type | Description |
|
||
| ---------------- | ------- | ---------------------------- |
|
||
| Id | BLOB | Guid |
|
||
| Receiver | INTEGER | Receiver ContentId |
|
||
| ContentId | INTEGER | Sender ContentId |
|
||
| Date | INTEGER | Unix timestamp (ms) |
|
||
| ChatType | INTEGER | XivChatType / LogKind |
|
||
| SourceKind | INTEGER | Player / NPC / Server / etc. |
|
||
| TargetKind | INTEGER | Player / NPC / Server / etc. |
|
||
| Sender | BLOB | MessagePack `List<Chunk>` |
|
||
| Content | BLOB | MessagePack `List<Chunk>` |
|
||
| SenderSource | BLOB | MessagePack `SeString` |
|
||
| ContentSource | BLOB | MessagePack `SeString` |
|
||
| ExtraChatChannel | BLOB | Guid |
|
||
| Deleted | BOOLEAN | Soft-delete marker |
|
||
|
||
Path: `pluginConfigs/HellionChat/chat-sqlite.db`. WAL mode, Synchronous=NORMAL.
|
||
|
||
---
|
||
|
||
## Installation
|
||
|
||
Hellion Chat is distributed via a Dalamud **custom repository**.
|
||
|
||
### Fresh install (no prior Chat 2)
|
||
|
||
1. Open Dalamud Settings (`/xlsettings`) → **Experimental**.
|
||
2. Add a new entry under **Custom Plugin Repositories**:
|
||
|
||
```text
|
||
https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/raw/branch/main/repo.json
|
||
```
|
||
|
||
3. **Save**, then go to `/xlplugins` → **All Plugins** → Refresh.
|
||
4. Hellion Chat appears in the list — install it like any other plugin.
|
||
|
||
### Migration from Chat 2 (with existing history)
|
||
|
||
Chat 2 and Hellion Chat share the database file until Hellion Chat moves it to its own path on first
|
||
start. Order matters:
|
||
|
||
1. **Disable Chat 2** in `/xlplugins` (do not uninstall, just disable).
|
||
2. **Fully close FFXIV** so SQLite releases the file lock. A plugin reload alone is not enough.
|
||
3. Restart the game.
|
||
4. Add the custom repo as described above.
|
||
5. Install Hellion Chat. On first start, the configuration file and the entire database directory
|
||
are moved into the HellionChat layout.
|
||
6. **Verify** under Settings → Data & Privacy → Cleanup → Refresh preview that the message count looks plausible.
|
||
|
||
### Troubleshooting
|
||
|
||
**Hellion Chat shows 0 messages, even though Chat 2 was active before:**
|
||
|
||
Migration was blocked by a locked file. Close the game and move the files manually:
|
||
|
||
Linux / XIVLauncher Core:
|
||
|
||
```bash
|
||
mv ~/.xlcore/pluginConfigs/ChatTwo/chat-sqlite.db \
|
||
~/.xlcore/pluginConfigs/HellionChat/chat-sqlite.db
|
||
```
|
||
|
||
Windows / XIVLauncher:
|
||
|
||
```powershell
|
||
Move-Item "$env:AppData\XIVLauncher\pluginConfigs\ChatTwo\chat-sqlite.db" `
|
||
"$env:AppData\XIVLauncher\pluginConfigs\HellionChat\chat-sqlite.db" -Force
|
||
```
|
||
|
||
Start the game, enable Hellion Chat, and your history is back.
|
||
|
||
### Updates
|
||
|
||
Updates appear automatically in the plugin list once a new `vX.Y.Z` tag with a GitHub Release is
|
||
published. No reinstall needed.
|
||
|
||
---
|
||
|
||
## Distribution
|
||
|
||
Hellion Chat is distributed via its own Dalamud custom repository (`repo.json` in the repo root).
|
||
Pushing a `vX.Y.Z` tag triggers the [`release.yml`](.github/workflows/release.yml) workflow, which
|
||
attaches the build output (`HellionChat/bin/Release/HellionChat/latest.zip`) along with the matching
|
||
changelog block from `HellionChat.yaml` to the GitHub Release. Manual recovery path if the
|
||
auto-trigger is missed: `gh workflow run release.yml -f tag=vX.Y.Z`.
|
||
|
||
An optional submission to the Dalamud main plugin repo (in addition to the custom repo) is on the
|
||
[roadmap](docs/ROADMAP.md).
|
||
|
||
---
|
||
|
||
## Project Status
|
||
|
||
**Version 2.0.0** — Rebuilt, Repaired, Reset. Nine development cycles replaced every
|
||
window in the plugin: the sidebar, tab strip and status bar, the settings window, the
|
||
message list, the input row and the first-run wizard are drawn by the plugin rather than
|
||
by ImGui defaults, and share one visual language. Typography carries structure, anything
|
||
you can press gets a surface, and colours are measured against what sits behind them.
|
||
**This update resets your settings** — nine cycles of window rebuilds left saved values
|
||
pointing at surfaces that no longer exist. The message database is untouched and the old
|
||
config is kept alongside it as `HellionChat.json.pre-2.0.0.bak`.
|
||
|
||
**Version 1.5.6** — Settings Overhaul + Filter & Notification Polish. The Settings window
|
||
has been reorganised from ten tabs to seven (General, Appearance, Chat, Window, Channels,
|
||
Data & Privacy, About). Each tab now uses collapsible sections grouped by control type;
|
||
sections start collapsed every time you enter a tab. New sender-name display options in
|
||
Chat → Messages let you control when the home world is appended and whether to show the
|
||
full name, first name only, or initials. A pre-send warning fires when a message contains
|
||
plugin-only symbols other players may see as empty boxes. The chat window now has a
|
||
separate opacity for when it is not focused. The three bundled custom notification sounds
|
||
gained a volume slider in Settings → General. All 24 locale files updated.
|
||
|
||
---
|
||
|
||
### Project status (pre-v1.5.4, kept for context)
|
||
|
||
**Version 1.5.3** — Localisation Wave + Bundled-Font Overhaul. Twenty-four selectable UI languages
|
||
(Catalan, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Italian,
|
||
Japanese, Korean, Norsk bokmål, Polish, Portuguese (Brazil), Portuguese (Portugal), Romanian,
|
||
Russian, Spanish, Swedish, Turkish, Ukrainian, Simplified Chinese, Traditional Chinese); dropdown
|
||
sorts alphabetically by endonym, "None" pinned first. Non-native translations are AI-assisted and
|
||
flagged for community native-speaker review. The bundled UI font swaps from Exo 2 to **Inter
|
||
Light** (SIL OFL 1.1, 343 KB) for wider Latin Extended-A/B, Greek polytonic and Cyrillic Supplement
|
||
coverage. **NotoSansCjkRegular** joins as a third merge layer so Hangul and Simplified-Chinese
|
||
glyphs the FFXIV Japanese game font does not ship now render correctly. First-frame HITCH dropped
|
||
from ~74 ms (v1.5.2 baseline that held since v1.4.x) to a median of ~20 ms (5-reload sample
|
||
17.9-23.6 ms, Linux/Wine) as a side effect: the bundled-font path was silently falling back to the
|
||
FFXIV Axis game font for the entire v1.5.x series because of an early-return in `Plugin.cs:937`.
|
||
The fix routes `RegularFont` through draw whenever either `FontsEnabled` or `UseHellionFont` is on,
|
||
and lands the defer-pattern win v1.5.1 was reaching for. `ExtraGlyphRanges` auto-activates the
|
||
matching flag on language change; two new flags (`LatinExtended`, `Greek`) join the existing set.
|
||
A WarningText under the language dropdown notes that FFXIV's own chat input only fully supports
|
||
EN/DE/FR/JA — other languages may garble when typed in-game. Migration v17 stays.
|
||
|
||
---
|
||
|
||
**Version 1.5.2** — First-Run Wizard Rework. The single-page wizard becomes a four-step
|
||
staged-commit flow (Welcome → Privacy → Power Settings → Done). The privacy picker becomes a 2×2
|
||
grid with a fourth profile "Roleplay" that extends Privacy-First with `Say` and both emote types
|
||
under a 30-/90-day retention window. A power-settings stage surfaces six previously-hidden
|
||
`Configuration` defaults in one place without introducing any new settings. The wizard window
|
||
shrinks to 720×480 default (was 900×560, MinimumSize 600×400) after smoke feedback and Step 1
|
||
keeps the fox banner in a folded TreeNode so the onboarding copy stays primary. Existing v1.5.1
|
||
users see the new flow once on first v1.5.2 boot via a new `WizardLastShownVersion` config marker.
|
||
Under the hood: a `WizardStateSmokeStep` joins `/xlperf`, the Build Suite gains twelve pure-helper
|
||
xUnit Facts pinning all four privacy profile sets and the new Roleplay retention overrides.
|
||
Migration v17 stays — `Configuration` only grows one optional string field.
|
||
|
||
---
|
||
|
||
### Project status (pre-v1.5.2, kept for context)
|
||
|
||
**Version 1.5.1** — FontAtlas Refactor and Hellion Forge Signature. The FontManager moves from the
|
||
inherited Chat 2 anti-pattern (null! fields + a separate BuildFonts method) to a hybrid model where
|
||
the game fonts and FontAwesome are init-only handles and only the user-configurable delegate fonts
|
||
stay mutable. All five handles register inside a single `IFontAtlas.SuppressAutoRebuild` block in
|
||
the ctor, so the font atlas builds once per plugin load instead of four to five times. FontAwesome
|
||
itself is now Dalamud's `UiBuilder.IconFontFixedWidthHandle` rather than a custom delegate slot.
|
||
Live font-setting changes go through `RebuildDelegateFonts()` and no longer require a plugin reload.
|
||
Plus an embedded Hellion Forge signature (drawn by Julia Moon) appears as a fox-head silhouette in
|
||
the `/xllog` bootstrap banner and a full fox in the First-Run Wizard and Settings → Information tab.
|
||
|
||
The Honorific full-gradient port that was originally scheduled for v1.5.1 was dropped: Honorific 3.2
|
||
exposes no IPC for the rendered gradient frame, and an in-plugin port of the colour palette was
|
||
declined. The integration stays at the v1.4.7 glow-only shape.
|
||
|
||
The 10× HITCH cut targeted from the v1.5.0 cross-plugin baseline (Lightless / XIVInstantMessenger
|
||
defer their font-atlas build to land at ~7 ms; Chat 2 + HellionChat were ~75 ms) did not land — the
|
||
cost lives in the UiBuilder first-frame render path, not in the atlas build. A first-frame render
|
||
investigation is reserved for a later cycle.
|
||
|
||
**Version 1.5.0** — DI Foundation and Service Refactor. Major architecture cycle: the plugin
|
||
bootstrap moves to a generic-host DI container (`Microsoft.Extensions.Hosting` +
|
||
`IServiceCollection`) modelled on Lightless Sync. All 18 instance-class services migrate from a
|
||
static `Plugin.LogProxy` locator to `Microsoft.Extensions.Logging.ILogger<T>` via constructor
|
||
injection, with a custom `DalamudLogger` bridging the framework over to Dalamud's `IPluginLog`. The
|
||
proxy stays for the eight buckets ctor-injection cannot reach (static helpers like `EmoteCache`,
|
||
Dalamud-reflected `Configuration`, the `Message` data class, and static methods inside `FontManager`
|
||
/ `GameFunctions`). Plugin.cs finishes the cycle at 1012 lines — virtually identical to the
|
||
pre-cycle 1013 — because the new Phase-1 host build and Plugin.X bridge wiring trade out exactly the
|
||
service and window allocations that left `LoadAsync`. Cross-plugin baseline confirms no performance
|
||
penalty vs Chat 2: HellionChat first-frame HITCH 77 ms median, Chat 2 74 ms. Lightless and
|
||
XIVInstantMessenger sit around 7 ms by deferring their font-atlas build past `Finished loading` —
|
||
that pattern is the v1.5.1 follow-up item. One user-visible fix bundled in from upstream: pasting a
|
||
slash command into the chat input (Friend List "/tell" action, plugin-driven inserts) now replaces
|
||
the existing input instead of concatenating onto whatever the user was typing. Migration v17 stays
|
||
(no schema bump).
|
||
|
||
Hellion Chat is a standalone plugin, no longer a fork in the repository sense. Fully completed:
|
||
|
||
- Privacy filters (whitelist, retention, retroactive cleanup, export)
|
||
- First-run wizard with three profiles
|
||
- Plugin identity: own `HellionChat` slot, layout migration from Chat 2, Migrate3 recovery
|
||
- Bilingual UI (EN and DE) with live language switching
|
||
- Hellion theme, Hellion logo, bundled Inter Light font
|
||
- Custom repo pipeline with automated GitHub Release distribution
|
||
- Slash commands consolidated to the `/hellionchat` family
|
||
- Web interface removed (v0.2.0)
|
||
- Audit hardening (path traversal, retention race, DbViewer consistency)
|
||
- About tab in Hellion branding, localized EN and DE, with license and disclaimer
|
||
- AI disclosure documented (see [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md))
|
||
- Standalone cut: namespace `HellionChat.*`, IPC channels `HellionChat.*`, source tree restructure,
|
||
conflict detection against upstream Chat 2, SQLite CVE hardening (3.50.3)
|
||
- Theme engine with ten built-in themes plus JSON authoring format (engine v1.1.0, catalog extended
|
||
in v1.2.3, including CVD-safe Hellion Spectrum; Synthwave Sunset in v1.4.1)
|
||
- ABGR cache on theme records: `HellionStyle.PushGlobal` reads pre-computed ABGR instead of
|
||
converting RGBA→ABGR per slot per frame (v1.4.1, ~13% render-time recovery)
|
||
|
||
In progress: incremental modernization of UI look and feel beyond the theme engine. What's planned
|
||
next and what's on the long-term list is in [`docs/ROADMAP.md`](docs/ROADMAP.md). Concrete scheduled
|
||
items are also tracked in the
|
||
[Gitea issue tracker](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/issues) under
|
||
the `roadmap` label.
|
||
|
||
### On Release Cadence
|
||
|
||
Anyone looking at the repo for the first time will notice a lot of releases and a high commit count
|
||
in a short time. Both are deliberate. The full reasoning — four factors behind it — is in
|
||
[`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md), section "How I release this fast".
|
||
|
||
---
|
||
|
||
## Community & Support
|
||
|
||
- **Hellion Forge Discord** (community for HellionChat and other Hellion Online Media plugins and
|
||
tools): [discord.gg/X9V7Kcv5gR](https://discord.gg/X9V7Kcv5gR)
|
||
- Bug reports and feature requests:
|
||
[Gitea Issues](https://gitea.hellion-forge.cloud/JonKazama-Hellion/HellionChat/issues)
|
||
- Discord DM: `@j.j_kazama`
|
||
- Further contact options (security, privacy, quick questions): see [SUPPORT.md](SUPPORT.md)
|
||
|
||
---
|
||
|
||
## License
|
||
|
||
EUPL-1.2 (same license as upstream Chat 2). Full text in [LICENSE](LICENSE), copyright notes with
|
||
dual-holder block in [COPYRIGHT](COPYRIGHT), personal acknowledgement to the upstream authors in
|
||
[NOTICE.md](NOTICE.md).
|
||
|
||
© 2023–2026 the Chat 2 authors ([Infi](https://github.com/Infiziert90),
|
||
[Anna](https://github.com/anna-is-cute), and upstream contributors) for the engine, IPC, and storage
|
||
layer. © 2026 Hellion Online Media for the Hellion Chat extensions.
|
||
|
||
### Acknowledgments
|
||
|
||
- **[Infi](https://github.com/Infiziert90) and [Anna](https://github.com/anna-is-cute)
|
||
(ascclemens)** for the Chat 2 engine, without which this fork would not exist.
|
||
- **Dalamud team** for the plugin framework.
|
||
- **Chat 2 Crowdin community** for the upstream string translations. The About tab credits the
|
||
upstream project; the per-translator list lives here rather than in the client.
|
||
|
||
### FFXIV Disclaimer
|
||
|
||
FINAL FANTASY XIV © SQUARE ENIX CO., LTD. All rights reserved. Hellion Chat is an unofficial,
|
||
fan-made plugin and is not affiliated with, supported by, sponsored by, or approved by Square Enix.
|
||
|
||
### AI Assistance
|
||
|
||
See [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) for the pair-level disclosure.
|
||
|
||
---
|
||
|
||
## Project Documents
|
||
|
||
Standard repository documents live in the repo root; deeper documentation lives under
|
||
[`docs/`](docs/).
|
||
|
||
### Repo Root
|
||
|
||
| Document | Contents |
|
||
| ------------------------------------------ | ------------------------------------------------------------------------------------------------------------ |
|
||
| [`PRIVACY.md`](PRIVACY.md) | Privacy overview: local storage, outbound calls, telemetry status, GDPR rights and their plugin equivalents. |
|
||
| [`SECURITY.md`](SECURITY.md) | Vulnerability reporting via private advisory, scope, and disclosure window. |
|
||
| [`SUPPORT.md`](SUPPORT.md) | Guide for bugs, security, privacy, and quick questions. |
|
||
| [`CONTRIBUTING.md`](CONTRIBUTING.md) | What I accept and decline, workflow, EUPL-1.2 confirmation. |
|
||
| [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) | Behavioral expectations and reporting path. |
|
||
| [`NOTICE.md`](NOTICE.md) | Attribution to upstream maintainers and component credits. |
|
||
| [`COPYRIGHT`](COPYRIGHT) | Copyright notes with dual-holder block. |
|
||
| [`LICENSE`](LICENSE) | EUPL-1.2 full text. |
|
||
|
||
### `docs/`
|
||
|
||
| Document | Contents |
|
||
| ------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------- |
|
||
| [`docs/ROADMAP.md`](docs/ROADMAP.md) | Planned cycles, mid-term and long-term topics. |
|
||
| [`docs/CHANGELOG.md`](docs/CHANGELOG.md) | Curated version overview with references to GitHub release pages. |
|
||
| [`docs/CONTRIBUTORS.md`](docs/CONTRIBUTORS.md) | Testers, translators, and code contributors on the Hellion side. |
|
||
| [`docs/LEARNING-JOURNEY.md`](docs/LEARNING-JOURNEY.md) | Development history: from web stack to C# / Dalamud, lessons learned from the fork. |
|
||
| [`docs/IPC.md`](docs/IPC.md) | IPC channel reference, tuple payload fields, migration diff for third-party plugins. |
|
||
| [`docs/THEME-AUTHORING.md`](docs/THEME-AUTHORING.md) | Theme engine authoring guide (EN): JSON schema, color and layout slots, channel identity rules, validation. |
|
||
| [`docs/UPSTREAM_SYNC.md`](docs/UPSTREAM_SYNC.md) | Upstream sync status: cherry-pick pipeline closed since v1.4.x, attribution intact. |
|
||
| [`docs/THIRD_PARTY_NOTICES.md`](docs/THIRD_PARTY_NOTICES.md) | NuGet dependencies with licenses, bundled assets, network status per component. |
|
||
| [`docs/AI_DISCLOSURE.md`](docs/AI_DISCLOSURE.md) | Disclosure of AI assistance in the development process. |
|
||
|
||
---
|
||
|
||
Developed under **Hellion Forge**, the modding and plugin branch of **Hellion Online Media** | Bad
|
||
Harzburg | [hellion-media.de](https://hellion-media.de)
|