A downloadable tool

Buy Now$14.99 USD or more

Re-importing a CSV should not destroy the work you did in the editor

Unreal's DataTable re-import is a total overwrite. Every edit made in the editor since the last export is gone — no warning, no diff, no list of what changed. And if two people touched the same table, the second import simply wins.

The standard advice is to give up: pick one side, or partition your data so nobody ever collides.

DataTable Merge treats a re-import the way source control treats a pull. It reconciles three things — the CSV as it was at the last import, the incoming CSV, and the asset as it stands now — applies every change that only one side made, and stops only where both sides genuinely collided.

Comparison is per cell, not per row

This is the whole point. The spreadsheet owner rebalanced Damage. A designer retuned Cost on the same row. Today one of those is destroyed. With DataTable Merge both land, and the report shows you exactly that happening.

It previews first, and the preview is the write

-Execute is read at exactly one place: the statement before the asset is written. Everything above it — matching rows, comparing fields, deciding winners, classifying conflicts — runs identically in both modes. The dry run is not a simulation of the write. It is the write, stopped one statement short.

Every run leaves a self-contained HTML sheet: every row that changed, the last-imported, incoming and current value for each field, which one won, and why. Conflicts sit at the top, because they are why you opened the file.

Conflicts are refused, not guessed

The default is to change nothing and exit 4. A conflict is a decision, and a tool that quietly picks a winner is the problem this product exists to fix. -OnConflict=theirs|ours exists for CI, and the report always names what it overrode.

Every merge can be undone

The JSON journal is written before the package is saved, so a run that dies mid-save is still reversible. One command restores the table exactly. The journal is plain JSON — a technical director can read it, diff it, and check it in beside the CSV.

Exit codes are a CI gate

0 nothing to merge · 1 changes found or made · 2 failed · 3 bad arguments · 4 conflicts left for a human.

A preview run that must exit 0 is a "nobody has drifted from the sheet" check on a pull request. Exit 4 fails a build instead of silently picking a winner.

Honest about what it cannot know

The first run on a table has no merge base. It says so — in the log and at the top of the report — and treats every difference as a conflict rather than guessing. Without a record of the last import it is genuinely impossible to tell an incoming edit from a local one. -EstablishBase fixes it in one run, and from then on every merge is a true three-way.

What it is not

  • It does not migrate row structs. This merges row data against a fixed struct.
  • It does not need a database, a service, or an account. It reads a CSV and an asset, and writes a CSV and an asset.

Details

  • Headless commandlet (-run=DataTableMerge). No editor panel — the screenshots are the HTML sheet it writes.
  • Full C++ source, readable and commented, with automation tests over the CSV layer, the merge rules, the report and the journal.
  • Unreal Engine 5.8, Windows, editor-only. That is the only engine this build has been compiled and run on, and the only version claimed.
  • Full documentation

Purchase

Buy Now$14.99 USD or more

In order to download this tool you must purchase it at or above the minimum price of $14.99 USD. You will get access to the following files:

datatable-merge-ue5-plugin.zip 50 kB
Version 1.0.0

Development log

Leave a comment

Log in with itch.io to leave a comment.