chore: bootstrap Anvil repo skeleton

First commit on feature/v0.1.0 establishes the Hellion Forge plugin
scaffold:

- .gitattributes: Linux-first LF defaults, Windows-script CRLF exceptions,
  binary markers for fonts / images / archives. Pre-empts the
  Forgeimizer pre-push hook crash that was caused by Asriels CRLF default.
- .editorconfig: Hellion Forge .NET conventions
  (private fields _camelCase, Allman braces, var-preferred).
- .gitignore: VisualStudio baseline + secrets bucket + Anvil.Tests
  excluded (build-suite lives in the local Hellion Build test repo).
- LICENSE: MIT, Hellion Online Media 2026.
- NOTICE.md: goodwill attribution to Craftimizer and clean-room
  anonymisation note.
- PRIVACY.md: zero-telemetry statement matching 00-Anvil-Scope.
- README.md: v0.1.0 status + planned-feature outline + custom-repo URL.
- Anvil.sln + Anvil/Anvil.csproj: Dalamud.NET.Sdk/15.0.0, x64 platform
  pinned (forge-wide rule), Microsoft.Extensions.Hosting stack closed-range
  pin to 10.0.7 matching HellionChat v1.5.0. No DalamudPackager.targets
  override - SDK 15 default packager handles images / icon / image_urls.
- Anvil/Anvil.yaml: plugin manifest with explicit icon_url / image_urls
  (top-level fields required for SDK 15 default packager) and a v0.1.0
  changelog entry that names RecipeData as the first module.
This commit is contained in:
2026-05-27 19:16:36 +02:00
commit 96553a849a
10 changed files with 855 additions and 0 deletions
+182
View File
@@ -0,0 +1,182 @@
# ##############################################################
# #
# # .editorconfig Hellion Forge / Anvil
# #
# # Überarbeitet: Mai 2026
# #
# # Strategie:
# # - Standard-.NET-Conventions (private Fields = _camelCase)
# # - CSharpier übernimmt die meiste Formatierung
# # - Hier: Naming, IDE-Hints, Backup-Format-Regeln
# #
# # ##############################################################
root = true
# =====================================================
# Defaults (alle Files)
# =====================================================
[*]
indent_style = space
tab_width = 4
indent_size = 4
charset = utf-8
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
# =====================================================
# Markdown: Trailing Spaces erlaubt (2 Spaces = <br>)
# =====================================================
[*.md]
trim_trailing_whitespace = false
# =====================================================
# JSON / YAML: 2-Space-Indent
# =====================================================
[*.{yaml,yml}]
indent_size = 2
[*.{json,jsonc}]
indent_size = 2
# =====================================================
# .NET / Resources: 4-Space-Indent
# =====================================================
[*.{cs,csx}]
indent_size = 4
[*.{xml,xsd,resx,resw,nuspec,config}]
indent_size = 4
# ##############################################################
# #
# # C# Sektion: Style, Naming, Format
# #
# ##############################################################
[*.{cs,csx}]
# =====================================================
# C# Style var-Präferenz
# =====================================================
csharp_style_var_for_built_in_types = true:suggestion
csharp_style_var_when_type_is_apparent = true:suggestion
csharp_style_var_elsewhere = true:suggestion
# =====================================================
# C# Style Sonstiges
# =====================================================
csharp_style_prefer_utf8_string_literals = true:suggestion
csharp_preferred_modifier_order = public, private, protected, internal, file, new, static, abstract, virtual, sealed, readonly, override, extern, unsafe, volatile, async, required:suggestion
csharp_new_line_before_members_in_object_initializers = false
# =====================================================
# C# Format Braces (Allman)
# =====================================================
csharp_new_line_before_open_brace = all
csharp_new_line_before_else = true
csharp_new_line_before_catch = true
csharp_new_line_before_finally = true
# =====================================================
# C# Format Switch-Einrückung
# =====================================================
csharp_indent_case_contents = true
csharp_indent_switch_labels = true
# =====================================================
# .NET Style Qualification (kein "this." nötig)
# =====================================================
dotnet_style_qualification_for_field = false:suggestion
dotnet_style_qualification_for_property = false:suggestion
dotnet_style_qualification_for_method = false:suggestion
dotnet_style_qualification_for_event = false:suggestion
# =====================================================
# .NET Style Predefined Types (int statt Int32 etc.)
# =====================================================
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion
dotnet_style_predefined_type_for_member_access = true:suggestion
# =====================================================
# .NET Style Accessibility-Modifier erzwingen
# =====================================================
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion
# ##############################################################
# #
# # Naming Conventions (.NET-Standard)
# #
# # Private Instance Fields: _camelCase
# # Private Static Fields: _camelCase
# # Private Constants: PascalCase
# # Private Static Readonly: PascalCase
# #
# ##############################################################
dotnet_naming_style.underscore_camel_case_style.capitalization = camel_case
dotnet_naming_style.underscore_camel_case_style.required_prefix = _
dotnet_naming_style.pascal_case_style.capitalization = pascal_case
dotnet_naming_rule.private_instance_fields.severity = warning
dotnet_naming_rule.private_instance_fields.symbols = private_instance_fields_symbols
dotnet_naming_rule.private_instance_fields.style = underscore_camel_case_style
dotnet_naming_symbols.private_instance_fields_symbols.applicable_kinds = field
dotnet_naming_symbols.private_instance_fields_symbols.applicable_accessibilities = private
dotnet_naming_rule.private_static_fields.severity = warning
dotnet_naming_rule.private_static_fields.symbols = private_static_fields_symbols
dotnet_naming_rule.private_static_fields.style = underscore_camel_case_style
dotnet_naming_symbols.private_static_fields_symbols.applicable_kinds = field
dotnet_naming_symbols.private_static_fields_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_static_fields_symbols.required_modifiers = static
dotnet_naming_rule.private_constants.severity = warning
dotnet_naming_rule.private_constants.symbols = private_constants_symbols
dotnet_naming_rule.private_constants.style = pascal_case_style
dotnet_naming_symbols.private_constants_symbols.applicable_kinds = field
dotnet_naming_symbols.private_constants_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_constants_symbols.required_modifiers = const
dotnet_naming_rule.private_static_readonly.severity = warning
dotnet_naming_rule.private_static_readonly.symbols = private_static_readonly_symbols
dotnet_naming_rule.private_static_readonly.style = pascal_case_style
dotnet_naming_symbols.private_static_readonly_symbols.applicable_kinds = field
dotnet_naming_symbols.private_static_readonly_symbols.applicable_accessibilities = private
dotnet_naming_symbols.private_static_readonly_symbols.required_modifiers = static, readonly
+136
View File
@@ -0,0 +1,136 @@
##############################################################
##
## .gitattributes Hellion Forge / Anvil
##
## Setup: Linux-First Development
## (Hauptentwicklung auf Linux, Target = Dalamud/Windows)
## Überarbeitet: Mai 2026
##
## Strategie:
## - Default: Alles LF (Linux-Konvention)
## - Windows-Batch-Scripts: CRLF (technische Pflicht!)
## - PowerShell: CRLF (Sicherheit für Windows PS 5.1)
## - Binärdateien: explizit markiert (gegen Korruption)
##
##############################################################
# =====================================================
# Default: Auto-Detect, alles auf LF normalisieren
# =====================================================
* text=auto eol=lf
# =====================================================
# Source Code (LF)
# =====================================================
*.cs text eol=lf
*.csx text eol=lf
# =====================================================
# Configs & Daten (LF)
# =====================================================
*.json text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
*.xml text eol=lf
*.md text eol=lf
*.txt text eol=lf
*.config text eol=lf
*.editorconfig text eol=lf
.gitignore text eol=lf
.gitattributes text eol=lf
# =====================================================
# Visual Studio / MSBuild Project Files (LF)
# =====================================================
*.sln text eol=lf
*.csproj text eol=lf
*.props text eol=lf
*.targets text eol=lf
# =====================================================
# Resources & Lokalisierung (LF)
# =====================================================
*.resx text eol=lf
*.resw text eol=lf
# =====================================================
# Linux/Mac-Scripts (LF Pflicht)
# =====================================================
*.sh text eol=lf
*.bash text eol=lf
*.zsh text eol=lf
# =====================================================
# >>> AUSNAHMEN <<<
# Windows-Scripts brauchen ZWINGEND CRLF.
# =====================================================
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
*.psm1 text eol=crlf
*.psd1 text eol=crlf
# =====================================================
# Binäre Build-Artefakte
# =====================================================
*.dll binary
*.exe binary
*.pdb binary
*.so binary
*.dylib binary
*.nupkg binary
*.snupkg binary
# =====================================================
# Bilder (binary)
# =====================================================
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.bmp binary
*.tiff binary
*.webp binary
# SVG ist eigentlich XML als Text behandeln
*.svg text eol=lf
# =====================================================
# Fonts (binary)
# =====================================================
*.ttf binary
*.otf binary
*.woff binary
*.woff2 binary
# =====================================================
# Archive (binary)
# =====================================================
*.zip binary
*.7z binary
*.tar binary
*.gz binary
+247
View File
@@ -0,0 +1,247 @@
##############################################################
##
## .gitignore Hellion Forge / Anvil
##
## Basis: github/gitignore VisualStudio.gitignore
## Überarbeitet: Mai 2026
##
##############################################################
# =====================================================
# [!! KRITISCH !!] Secrets, Keys & Credentials
# =====================================================
.env
.env.*
.env.bak*
.envrc
!.env.example
!.env.sample
*.pem
*.key
*.p12
*.pfx
*.cer
*.crt
*.csr
*.gpg
*.asc
id_rsa
id_ed25519
id_ecdsa
known_hosts
auth.json
.npmrc
secrets.json
appsettings.*.local.json
appsettings.Local.json
local.settings.json
*.dmp
*.mdmp
crash.log
# =====================================================
# Projekt-spezifisch (Anvil)
# =====================================================
# Lokale Entwicklungsumgebung
.vscode/
scripts/setup-dev-env.sh
# Build-Suite lives in separate local repo (Hellion Build test/AnvilTests)
Anvil.Tests/
TestResults
# Packaging
pack/
# Claude Code lokales Setup (nicht committed)
/.claude/
/CLAUDE.md
# Cycle-Working-Notes (im Vault gepflegt)
/docs/cycle-notes/
# =====================================================
# OS-spezifische Files
# =====================================================
# macOS
.DS_Store
.AppleDouble
.LSOverride
._*
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
$RECYCLE.BIN/
# Linux
.directory
.Trash-*
# =====================================================
# Editor & IDE
# =====================================================
# JetBrains
.idea/
# Vim / Neovim
*.swp
*.swo
*.swn
# Sublime Text
*.sublime-workspace
*.sublime-project
# =====================================================
# IDE & Editor User-spezifische Files (VS)
# =====================================================
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
.vs/
# =====================================================
# Build Output
# =====================================================
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/
project.lock.json
project.fragment.lock.json
artifacts/
# =====================================================
# Build-Artefakte
# =====================================================
*.obj
*.pch
*.pdb
*.ipdb
*.rsp
*.tmp
*.tmp_proj
*.log
*.binlog
*.vspscc
*.vssscc
# =====================================================
# Test Results
# =====================================================
[Tt]est[Rr]esult*/
*.VisualState.xml
TestResult.xml
BenchmarkDotNet.Artifacts/
*.received.*
*.received.txt
# =====================================================
# Code Coverage
# =====================================================
coverage*.json
coverage*.xml
coverage*.info
*.coverage
*.coveragexml
# =====================================================
# Cache Files
# =====================================================
*.aps
*.opendb
*.cachefile
*.lscache
*.[Cc]ache
!?*.[Cc]ache/
# =====================================================
# NuGet & Dependencies
# =====================================================
*.nupkg
*.snupkg
**/[Pp]ackages/*
!**/[Pp]ackages/build/
*.nuget.props
*.nuget.targets
node_modules/
# =====================================================
# Publish & Deploy
# =====================================================
publish/
*.[Pp]ublish.xml
*.pubxml
*.publishproj
# =====================================================
# AI / LLM Tooling
# =====================================================
.cursor/
.cursorignore
.aider*
.continue/
.continuerc.json
.windsurf/
.cody/
prompts/local/
# =====================================================
# Misc / Temp / Backup
# =====================================================
~$*
*~
*.publishsettings
+21
View File
@@ -0,0 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Anvil", "Anvil\Anvil.csproj", "{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Debug|x64.ActiveCfg = Debug|x64
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Debug|x64.Build.0 = Debug|x64
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Release|x64.ActiveCfg = Release|x64
{4F8E3A2C-1B0D-4F1A-9C7E-A1B2C3D4E5F6}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
+72
View File
@@ -0,0 +1,72 @@
<Project Sdk="Dalamud.NET.Sdk/15.0.0">
<PropertyGroup>
<Version>0.1.0</Version>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<LangVersion>latest</LangVersion>
<!-- Forge-wide Platform pin: solution-build defaults respect this; the
Forgeimizer v0.1.0 cycle showed that omitting it lets CI silently
fall back to AnyCPU and writes outputs into the wrong subtree. -->
<Platforms>x64</Platforms>
<PlatformTarget>x64</PlatformTarget>
<!-- Lock package versions so a casual restore does not surprise-bump
transitive dependencies between cycles. -->
<RestorePackagesWithLockFile>true</RestorePackagesWithLockFile>
<AssemblyName>Anvil</AssemblyName>
<RootNamespace>Anvil</RootNamespace>
</PropertyGroup>
<ItemGroup>
<!-- Generic Host DI container, mirroring the HellionChat v1.5.0 pattern
(Lightless-Sync stack pin at 10.0.7). Closed ranges keep major
bumps from sneaking in through lock-file regeneration. -->
<PackageReference
Include="Microsoft.Extensions.DependencyInjection"
Version="[10.0.7, 11.0.0)"
/>
<PackageReference
Include="Microsoft.Extensions.Hosting"
Version="[10.0.7, 11.0.0)"
/>
<PackageReference
Include="Microsoft.Extensions.Logging"
Version="[10.0.7, 11.0.0)"
/>
<PackageReference
Include="Microsoft.Extensions.Options"
Version="[10.0.7, 11.0.0)"
/>
</ItemGroup>
<ItemGroup>
<!-- Build-suite (Anvil.Tests in the local Hellion Build test repo)
needs InternalsVisibleTo to reach the LuminaRecipeAdapter and
mechanic-table classes without making them public. -->
<InternalsVisibleTo Include="Anvil.Tests" />
</ItemGroup>
<ItemGroup>
<Compile Update="Localization\AnvilStrings.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>AnvilStrings.resx</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Localization\AnvilStrings.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>AnvilStrings.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<!-- Plugin icon + screenshots: SDK 15 default packager picks these up via
images/* and the icon_url / image_urls fields in Anvil.yaml. Do NOT
add a DalamudPackager.targets override - the SDK 15 default handles
icon + images correctly (lesson from HellionChat v0.5.2 burn). -->
<ItemGroup>
<None Include="images\**">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
+46
View File
@@ -0,0 +1,46 @@
name: Anvil
author: Jon Kazama (Hellion Forge)
punchline: A Hellion Forge plugin — privacy-focused FFXIV crafting helper with simulator, solver, and bookmarks.
description: |-
Anvil is a clean-room crafting plugin for FINAL FANTASY XIV. It provides
a state-machine crafting simulator, a wrapper for the Raphael Rust
solver, a recipe-note overlay, a synth-helper overlay, a macro editor,
recipe bookmarks, and an opt-in Auto-Craft hook.
Privacy:
- Zero telemetry, no network calls
- Bookmarks and settings stay on your machine
- Auto-Craft is OFF by default with an explicit warning modal
Status: v0.1.0 is the first release of the clean-room reimplementation.
The module surface is intentionally minimal; the simulator, solver
wrapper, macro engine, and full UI follow in v0.2.0+.
Cosmic Exploration support: planned for v0.2.0 (recipe-flag schema is
already in place, mission-flag resolution is deferred).
Inspired by Craftimizer by Asriel Camora (MIT). Anvil is an independent
re-implementation; no code was ported from Craftimizer.
repo_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/Anvil
accepts_feedback: true
icon_url: https://gitea.hellion-forge.cloud/JonKazama-Hellion/Anvil/raw/branch/main/Anvil/images/icon.png
image_urls: []
tags:
- Crafting
- Macros
- Solver
- UI
- Privacy
changelog: |-
**v0.1.0 — Initial Release (2026-05-27)**
First Hellion Forge release of Anvil. Module 01 (RecipeData) is in
place: catalogues every FFXIV crafting recipe, item, action, buff,
condition, and food/medicine from Lumina sheets, surfaces them
through a Dalamud-free read-only API, and verifies the load via the
`/xlperf` SelfTest step.
Note: This release is the foundation layer. UI windows, simulator,
solver, macros, hooks, and the IPC provider follow in v0.2.0+.
Inspired by Craftimizer by Asriel Camora (MIT).
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2026 Hellion Online Media
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+34
View File
@@ -0,0 +1,34 @@
# NOTICE
## Goodwill Attribution
Anvil is an independent Hellion Forge plugin for FFXIV, built as a clean-room
re-implementation. The plugin exists because the upstream Craftimizer plugin
went dormant when the Dalamud SDK moved from API level 14 to 15.
**Inspired by [Craftimizer](https://github.com/WorkingRobot/Craftimizer) by
Asriel Camora (MIT).**
This attribution is a goodwill marker, not a legal requirement. Anvil does not
contain Craftimizer source code or paraphrased code patterns. The clean-room
pipeline used official FFXIV game mechanics documentation, the
[Artisan](https://github.com/PunishXIV/Artisan) plugin (as a mechanics
reference for crafting domain values, with the "pattern and values may be
adapted, no 1:1 code port" rule), and direct Lumina sheet inspection as the
sole sources for the simulator and recipe data.
## Crafting Domain Patterns
Crafting mechanic constants (action CP/durability costs, condition multipliers,
buff durations) are FFXIV game data and belong to Square Enix. The values were
cross-checked against the publicly available datamining repository
(`xivapi/ffxiv-datamining`) and against the Artisan plugin's documented
constants. The Artisan plugin is GPL-3.0; Anvil does not port its code,
only consumes its documented mechanic values which are themselves the
underlying game's data.
## Anonymisation Policy
Anvil follows the Hellion Forge clean-room policy: no class names, method
names, or code structures were imported from any external plugin. Namespace
layout, type design, and threading model are independent.
+41
View File
@@ -0,0 +1,41 @@
# PRIVACY
Anvil is a zero-telemetry Dalamud plugin. It does not collect, transmit, or
log any data to external services.
## What Anvil reads
- FFXIV game data via Lumina sheets (recipes, items, actions, buffs,
conditions, food) — read-only, in-process.
- Plugin state from the local `pluginConfigs/Anvil/` directory (bookmarks,
user settings, theme JSON).
- Active crafting state via Dalamud's `IGameInteropProvider` hooks (`UseAction`,
`IsActionHighlighted`) — exclusively to power the in-game UI; nothing is
persisted from the hook data.
## What Anvil does NOT do
- No network calls (no analytics, no auto-update, no usage statistics).
- No telemetry, no error reporting to any external endpoint.
- No cloud-stored macros or bookmarks. Everything is local-first.
- No third-party tracking SDKs of any kind.
## Optional features that touch other plugins (local IPC only)
- Anvil exposes IPC channels (`Anvil.Theme.*`, `Anvil.Macros.*`,
`Anvil.Crafting.*`) so other Hellion Forge plugins can read theme state,
macro lists, and crafting status. Cross-plugin reads happen in-process via
Dalamud's `ICallGateProvider`; no data leaves the user's machine.
- MacroMate-IPC export, when triggered, sends macro text to the local
MacroMate plugin via Dalamud-internal IPC.
## Auto-Craft (opt-in)
The Auto-Craft feature is OFF by default. When enabled, it executes crafting
actions automatically via the `UseAction` hook. It does not send any
information about the actions back to the plugin or to any service.
## Contact
For privacy questions: open an issue at the Anvil repository or use the
Hellion Forge Discord support channel referenced in the plugin manifest.
+55
View File
@@ -0,0 +1,55 @@
# Anvil
An independent Hellion Forge plugin for FINAL FANTASY XIV crafting.
Anvil is a privacy-focused, zero-telemetry crafting helper for Dalamud
(API level 15+). It provides a crafting simulator, a solver wrapper,
recipe bookmarks, and an opt-in Auto-Craft hook.
> Status: **v0.1.0 — early development.** The crafting simulator, solver
> wrapper, macro engine, hooks, IPC provider, bookmark store, and UI
> layers are being built module-by-module under the Anvil clean-room
> pipeline. The Recipe Data layer (module 01) is the first ground-up
> piece.
## Features (planned)
- Crafting Simulator — state machine for FFXIV crafting steps, conditions,
buffs, and actions, with full Cosmic Exploration schema support.
- Solver Wrapper — bridge to the Raphael Rust solver (bundled binary).
- Recipe Note Overlay — anchors next to FFXIV's recipe-note addon.
- Synth Helper Overlay — live next-action hint during synthesis.
- Macro Editor — compose, replay, export to FFXIV macros and MacroMate.
- Recipe Bookmarks — local list with notes, tags, and quick-open.
- Auto-Craft (opt-in) — `UseAction` hook with explicit warning modal.
- IPC Provider — exposes theme, macros, and crafting status to other
Hellion Forge plugins.
- Bilingual EN/DE UI with Hellion Anvil-Boutique styling
(Forge-Bronze on dark surface).
## Privacy
Zero telemetry. No network calls. Everything stays on your machine. See
[PRIVACY.md](PRIVACY.md) for the full statement.
## Attribution
Anvil is a clean-room re-implementation, not a fork. The plugin is
inspired by [Craftimizer](https://github.com/WorkingRobot/Craftimizer)
by Asriel Camora (MIT) — see [NOTICE.md](NOTICE.md) for the goodwill
attribution.
## License
[MIT](LICENSE) — Copyright (c) 2026 Hellion Online Media.
## Install
The custom Dalamud repository URL for Anvil is:
```
https://gitea.hellion-forge.cloud/JonKazama-Hellion/Anvil/raw/branch/main/repo.json
```
Add this URL under Dalamud → Settings → Experimental → Custom Plugin
Repositories, then install **Anvil** from the plugin installer.