Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.1.0] - 2026-10-18
Section titled “[1.1.0] - 2026-10-18”- SDK Version:
*.20.*
- Code Generation: Added the
json-gdtemplate, which generates GDScript config code. - Code Generation: Added the
godot-editor-gdtemplate, which generates a Godot editor plugin in GDScript. The plugin loads the configs in the editor, shows config ID properties as dropdowns, and reloads them from the Tool menu. - Code Generation: Added the
ARCHMAGE_GD_STRING_L10Nenvironment variable, which makesjson-gdkeepl10nfields asStringinstead of theL10ntype, to save memory. - Code Generation: Added the
ARCHMAGE_GD_FLOAT_DURATIONenvironment variable, which makesjson-gdgenerate durations as float seconds. - Project Initialization:
initnow accepts-l gd, which generates a Godot project.
Changed
Section titled “Changed”- Code Generation: The
godot-editortemplate is renamed togodot-editor-cs. - Type System: A
string,path, orl10nvalue in a spreadsheet that is the unquoted text<null>is now rejected. It was previously read as the literal text. Quote it to use"<null>"as text.
- Code Generation: The Inspector of the
godot-editor-csplugin now updates its property editors when the plugin is enabled or disabled, instead of keeping the old ones until the editor restarts. - XML: An element without attributes, text, or child elements is now exported as
nulland dropped. It was previously exported as an empty string.
[1.0.0] - 2026-10-13
Section titled “[1.0.0] - 2026-10-13”- SDK Version:
*.20.*
- Data Export:
--l10n-output-formatsnow acceptsxlsxand outputsl10n.xlsxwithKeyandTextcolumns. - Data Export: Added the
--csv-bomflag, which outputsl10n.csvwith a UTF-8 BOM so that Excel detects the encoding. - XML: A list whose parent has only one such element can now be declared as an array using the
__array__="true"attribute.
Changed
Section titled “Changed”- Localization: l10n keys are now delimited with
|, so that different values never share a key. - Naming: Typical names and variable names must now start with a letter. A leading underscore, such as
_hp, is rejected. - Spreadsheets: A cell that holds an Excel error value, such as
#N/Aor#DIV/0!, is now reported as an error. It was previously treated as a comment. - Spreadsheets: A lookback operator that points to the superheader column or to a column before it is now rejected.
- Type System: Integers with leading zeros, such as
010, are now read as decimal instead of octal. - Type System:
datetimevalues with fractional seconds are now rejected. - Type System:
whitelistandblacklistnow ignore letter case forbool,enum,ref, andrgbavalues. - Type System: Objects that share a
pubtypecan now declare their fields in any order. - Filtering: An empty environment variable in
env@VARis now treated as false. - YAML: Numbers now follow YAML 1.2. A YAML file with a tag, infinity, NaN, more than one document, or a non-UTF-8 encoding is now rejected.
- Data Export:
exportnow fails before writing anything if an output file would overwrite or delete an input file. - Error Messages: JSON syntax errors now report the line and column.
- YAML: A file that uses a merge key (
<<) no longer converts to JSON with duplicate keys. - Enum: The name and shorthand of an enum item excluded by
xflagscan no longer be used in data. - Enum: A
bitflagsenum item without an explicit value now takes the bit above the highest bit used so far, so it no longer overlaps flags after a combined value such asread | write. - Type System: A compact vector with the
scaleoption no longer causes a panic. - Code Generation: With
--float-bit-size 32and--int-bit-size 32,cs-unity-vectorandcs-godot-vectornow also mapfloatandintvectors to engine vectors. - Code Generation:
structnow removes theversion.jsonof an earlier run when it runs without--semverand--vcs. - Data Export: With
--crlf, line breaks inside the fields ofl10n.csvare no longer converted to CRLF.
[0.20.0] - 2026-10-11
Section titled “[0.20.0] - 2026-10-11”- SDK Version:
*.20.*
- Type System: Added the
maxCharsoption, which limits the number of characters (Unicode code points) instringandl10nvalues. - Type System: Added the
asL10noption for tree objects, which treats every value in the object’s subtree that is inferred asstringasl10n. - Type System: The
scaleoption now accepts a fraction of positive integers, such asscale=1/1000. - Type System:
datetimevalues in spreadsheets can now be quoted, such asdatetime="08:00:00". - Type System:
l10ncan now be the item type of a weighted pool (wtpool). - Code Generation: Added the
--manifestflag to theenumandstructsubcommands. The flag records generated files in a manifest; the next run deletes any files listed in the manifest but not generated during that run. Pass--keep-staleto keep them.
Changed
Section titled “Changed”- Weighted Pool (
wtpool): A non-emptyl10nvalue anywhere in a weighted pool, including the fields of object items, must now be a reference to a shared l10n string. - Localization: In a property sheet, the l10n key of a value in a named value column now has the column name in brackets, such as
game[hard].titleinstead ofgame.hard.title. - Data Export:
exportnow deletes the data files and.schemafiles listed in the previousatlas.jsonbut not generated by the current run. - Code Generation:
CodeVersionis now always generated and returnsnilif no version information is available.
- Type System: An object in a regular table or property sheet that holds a
placeholderfield is no longer removed from exported data and generated code. - Code Generation: With
ARCHMAGE_ALL_PUBLIC, the Go type of a nested object now keeps the underscore after its base name. - Data Export:
--dry-runno longer deletes orphaned output files. - Data Export: A value that is a string in a data file and a number or bool in its demo file, or the reverse, is now rejected.
- Data Export: An XML element that contains both text and child elements is now rejected.
- Format Conversion Utility:
convnow rejects input files with the same name, which overwrote each other’s output.
[0.19.0] - 2026-10-09
Section titled “[0.19.0] - 2026-10-09”- SDK Version:
*.20.*
- Type System: Added the
scaleoption, which multipliesfloat,float32, andfloat64values by a factor during data export. - Type System: Added the
diroption, which requirespathvalues to refer to directories.
Changed
Section titled “Changed”- Type System:
switch|enumvalues andcaselabels are now matched by enum value, so an enum item name, its shorthand, and any letter case of either match the same label. - Type System: Numeric
switch|enumvalues, including0, are now rejected.
- Code Generation: Discarded fields are no longer compared when Archmage checks that objects sharing a
pubtypehave the same structure.
[0.18.0] - 2026-10-07
Section titled “[0.18.0] - 2026-10-07”- Type System: Added the
addPrefixoption, which prepends a relative directory topathvalues. - Data Export: Added the
ARCHMAGE_SKIP_PATH_CHECKenvironment variable, which skips the checks ofpathvalues. - Virtual Tables: Added the
schema-identicalflag, which requires every partition of a virtual table to have the same structure. - Weighted Pool (
wtpool): The element objects ofwtpool|>>objectcan now declare apubtype. - Code Generation: Added the
--suffix-entryand--suffix-propsflags to thestructsubcommand. - Code Generation: Added the
ARCHMAGE_ALL_PUBLICenvironment variable, which makes all generated types public or exported.
Changed
Section titled “Changed”- Type System: The
rootoption ofpathnow accepts onlyroot=env@<VarName>. Apathfield withoutrootusesARCHMAGE_PATH_ROOT, or the working directory if that variable is not set. - Type System:
pathvalues are now checked by default. They must refer to existing files with matching letter case, and must not contain... - Type System: Objects that share a
pubtypemust have the same spelling and structure. Apubtypeon the config entry of a regular table or on a top-level property of a property sheet is now rejected. - Type System: A fixed-size multi-column array (
[N]T) with a default export value now fills blank cells with the element default. - Weighted Pool (
wtpool): Options can now apply to the item. - Virtual Tables: The default
originvalue is now the export name. Partitions that share anoriginvalue must have the same structure, and a virtual table can have at most oneoriginfield. - Code Generation: Objects with the same structure in the same file no longer share the same type.
- Code Generation: Top-level
{}types now use--suffix-propsinstead of--suffix. - Code Generation: The root map key of a tree-backed regular table is now inferred as
int64, matching its config ID.
- Virtual Tables: A field discarded in one partition is no longer removed from the generated type when another partition exports it.
- Type System:
##on a**[N]={}{}subtable array now exports the same zero-valued objects as a blank block. - Type System: A tree-backed regular table is no longer rejected for two anchor fields when brace flags or xflags remove one of them.
- Data Export: Errors in condition columns, tree files and anchor fields are now reported before later checks can stop the export with a misleading error.
[0.17.0] - 2026-10-01
Section titled “[0.17.0] - 2026-10-01”- Code Generation: Added the
cs-godot-vectortemplate override for Godot vector types. - Code Generation: Added the
godot-editortemplate, which generates a Godot editor plugin that loads the configs in the editor and shows config ID properties as searchable dropdowns in the Inspector. It also generates theCfgIdPropHintandCfgIdPropTypeconstants for exporting config IDs from game code. - Code Generation: The
unity-editortemplate now registers a dropdown for every table that has a config ID, with the ID as its display name. - Code Generation: Added the
ARCHMAGE_JAVA_OUTER_CLASS_NAME_SUFFIXandARCHMAGE_GD_CLASS_NAME_SUFFIXenvironment variables for the enum code templates.
Changed
Section titled “Changed”- Code Generation: The Java outer class name and the GDScript
class_namenow end withEnumby default. - Code Generation: The generated C#
ConfigAtlasregisters the type converter of eachCfgIdtype in a static constructor. - Code Generation: The C# JSON templates mark generated files with
<auto-generated />.
[0.16.0] - 2026-09-24
Section titled “[0.16.0] - 2026-09-24”- Type System: Added
switch|enum@<enumType>to hold enum items inswitchcolumns. Data export (including--human-enum) and code generation treat the values asenum@<enumType>.
Changed
Section titled “Changed”- C# Code Generation: String config IDs now treat
nullas an empty ID in equality, hashing, conversion, and JSON output, and absentreffields no longer serialize asnull.
- Code Generation:
reffields that target a virtual table now generate reference types instead of plain value types. - Code Generation: The generated
L10ntext accessors now return an empty string for blankl10nfields instead of failing.
[0.13.0] - 2026-09-23
Section titled “[0.13.0] - 2026-09-23”- Installation: Added a Windows installer for Windows 10 or later.
[0.10.0] - 2026-09-07
Section titled “[0.10.0] - 2026-09-07”- Type System: Added the
ref@++mark to designate preferred reference candidates when multiplerefvalues point to the same target entry, determining back-reference eligibility. - Type System: Added support for empty
rgbacolor values, corresponding to implicit tree-node defaults. - Version Info: Added the
--semverflag to specify the semantic version for the build, embedding it into the exported output (atlas.json/version.json).
Changed
Section titled “Changed”- Google Drive Integration: Wildcard pattern matching for Drive files now supports standard path matching semantics anywhere in the pattern.
[0.9.0] - 2026-08-05
Section titled “[0.9.0] - 2026-08-05”- Google Drive Pull Command: Added a major new
archmage drivecommand suite (login,logout,list,download) to pull and sync spreadsheets from Google Drive to a local directory. - Data Export: Added the
--omit-zeroflag to automatically drop zero-valued object fields from the exported data payloads. - Logging: Added the
--verbose/-vflag to raise selected debug logs to the info level.
Changed
Section titled “Changed”- Type System: The
minmaxdata type now natively supportsdurationas a valid element type. - Type System: Added validation support for
backrefandbackref-nfields.
[0.8.0] - 2026-07-01
Section titled “[0.8.0] - 2026-07-01”- Schema Generation: Added the
--schemaflag to generate.schemasidecar files that describe the exact types and structures of the parsed data. - Type System: Added support for using enum types as map keys.
- Data Traversal: Introduced
--jqand--jq-codeflags to render jq-compatible node paths for easier downstream data traversal.
[0.7.0] - 2026-06-02
Section titled “[0.7.0] - 2026-06-02”- Weighted Pool (
wtpool): Added support for using tree object ({}) and compact object (>>object) as item types within weighted pools. - Weighted Pool (
wtpool): Added support for thesynclenvalidation option. - Type System: Added the
keyOnlyoption for both compact (>>map[K]V) and multi-column (map[K]V) map types. - Data Export: Added the
--readableflag to emit human-friendly data formats during export. - Data Export: Added
--human-wtpoolto export weighted pools in an intuitive key-value structure instead of raw arrays. - Data Export: Added the
--human-refflag to output readable reference and back-reference values. - Data Export: Added the
--human-durationand--human-enumflags for human-friendly output of durations and enumerations. - Data Export: Added the
--emit-anchorsflag to export configuration anchors as string literals. - Data Export: Added the
--l10n-literalflag to disable l10n aggregation. - Data Export: Added the
--path-as-isflag to preserve exact path values during export. - Data Export: Added
--tree-float-typeand--tree-int-typeflags to explicitly control the type of numeric values in tree data structures. - Data Export: Added
yamlas a natively supported output format for localization (l10n) data exports. - Data Export: Added support for configuring the JSON export indentation style via environment variables.
- Logging: Added the
--flush-on-progressflag to flush logs upon progress updates.
[0.6.0] - 2026-05-01
Section titled “[0.6.0] - 2026-05-01”- Minmax Type: Added support for the
minmaxdata type across compact, multi-column, and tree structures, including full code generation support for C# and Go. - Spreadsheet Conventions: Added lookback operators (
<1,<2,<3) in the header region to reuse values from preceding columns. - Data Constraints: The
nonzerovalidation option is now fully supported for compact vectors and multi-column tuples/vectors. - Data Constraints: Added the
synclenoption to enforce equal-length containers.
[0.5.0] - 2026-04-06
Section titled “[0.5.0] - 2026-04-06”- Type System: Added the
anchortype to enable named config-id lookups within reference fields. - Type System: Added support for hex color
rgbavalues (e.g.,#RRGGBB/#RRGGBBAA). - L10n Key Access: Added built-in
L10nKey()/GetL10nKey()accessor methods to the generated enum code across all supported languages. - C# Code Generation: Added
ConfigAtlas.Instancefor global atlas singleton access. - C# Code Generation: Enabled direct configuration lookup using strongly-typed Config ID structs (e.g.,
id.Cfg). - C# Code Generation: Added support for mapping to external C# vector types and enabled nullable reference types.
- Code Generation: Added the
--unityflag to support mapping to Unity’s built-in vector types. - Data Bundling: Added the
--add-metaflag to thebundlesubcommand to inject__meta__root nodes into the final output.
[0.4.0] - 2026-03-03
Section titled “[0.4.0] - 2026-03-03”- Virtual Tables: Added extensive support for virtual tables, including conflict checking and cross-file reference/backref resolution.
- Data Export: Added the
--no-atlasflag to the export subcommand to skipatlas.jsongeneration.
Changed
Section titled “Changed”- Export Capabilities: The
--l10n-output-formatsoption now accepts multiple comma-separated formats, generating them simultaneously in a single pass.
[0.3.0] - 2026-02-03
Section titled “[0.3.0] - 2026-02-03”- Format Conversion Utility: Added the
convsubcommand to explicitly convert tree-structured config files to JSON. - Type System: Added the
switchbehavior type as a multi-branch selector to determine active fields in conjunction with the Case header. - Type System: Added the
discardoption to drop fields from the output while keeping them available for validation. - External Enums: Added code generation support for mapping external enum types across all language templates.
- Version Info: Introduced the
--vcsflag, automatically bundling Git branch, commit ID, and author metadata directly into the output.
[0.2.0] - 2026-01-01
Section titled “[0.2.0] - 2026-01-01”- Data Bundling Utility: Added the
bundlesubcommand to merge multiple tree-structured data files into a single JSON file.
[0.1.0] - 2025-12-05
Section titled “[0.1.0] - 2025-12-05”- Initial release.