DataLoom Pro 2.1

Edit every ScriptableObject of a type in one spreadsheet — with validation, formulas, bulk pipelines, snapshots, relational navigation, Google Sheets sync, an AI copilot and headless CI. Editor-only by default: the optional Loom Runtime module is the one part that can ship, and only if you use it.

What's new in 2.1

What's new in 2.0

Quick start

  1. Open the workbench: Tools ▸ DataLoom Pro ▸ Workbench (Ctrl+Shift+L).
  2. Pick a type in the toolbar dropdown. Every asset of that type becomes a row; every serialized field becomes a column, up to the Max Visible Columns limit in Settings (30 by default, adjustable to 100) — the Columns menu tells you when a type has more than that. Vector fields expand into per-axis columns (the whole-vector column stays available under Columns).
  3. Click a cell and type to edit. Enter commits and moves down, Tab moves right, Escape cancels, F2 edits, double-click edits. Rejected values turn red with the reason as a tooltip — nothing is silently coerced.
  4. Try the sample data: Tools ▸ DataLoom Pro ▸ Create Sample Data ships three themed types with deliberate outliers and broken rows so validation, formatting and anomaly scanning light up immediately.

The grid

Formulas = …

Any numeric cell accepts a formula: start with =. Reference other columns of the same row with square brackets — =[Base Damage] * [Attack Rate]. Functions: ABS MIN MAX CLAMP ROUND FLOOR CEIL LERP IF CONCAT LEN UPPER LOWER; aggregates over the whole column: SUM AVG MEDIAN COUNT MINOF MAXOF (e.g. =[Level] / SUM([Level]) * 100). Operators + - * / ^ and comparisons. Formulas are stored per cell (keyed by asset GUID, so renames are safe), recomputed when committed, and errors show an ERR badge with the message on hover.

Validation & Data Health

Right-click a column ▸ Validators… Rules: Required (text/reference), Range (independent min/max, seeded from [Range]/[Min] attributes or observed data), Unique (whole asset set), Regex (multiple allowed). Rules persist per type as a project asset your team can commit. Issues tint cells by severity, the toolbar chip counts them, and clicking it filters to @issues.

Data Health (toolbar ▸ Health) opens empty: press Scan Project to run it. The scan covers every type with the same rules plus referential integrity (broken references are always errors) and scores the project 0–100. Apply N Fixes (1 Undo) then applies every auto-fix as one undo, and Save Report… writes JSON, JUnit (.xml) or SARIF for CI, chosen by the extension you type.

Severity decides whether CI fails. Range and Regex rules are created as Warnings, and warnings never make the report unhealthy or change the CLI's exit code — the gate stays green. If a rule must block a build, set its severity to Error in the validator popup. Required and Unique default to Error already.

Bulk pipelines & Smart Fill

Toolbar ▸ Pipeline. Chain steps — Set, Add, Multiply, Clamp, Sequence, Random (deterministic), Find/Replace, Regex — over one column. By default the pipeline targets every row currently matching your search — the filter result, regardless of paging or how far you have scrolled — and the single Selected rows only checkbox narrows it to your selection instead. Preview Diff shows the exact red→green change list without writing anything; Apply commits as one undo with an automatic file backup. Smart Fill ↓ detects constant/linear/geometric/numbered-name series from your selected seed rows and fills downward, previewed first.

Snapshots & patch notes

Toolbar ▸ Snapshots ▸ Capture before a balance pass; later, Diff vs … shows every changed cell (plus added/removed assets) and exports PR-ready Markdown or CSV patch notes.

Snapshots last for the editor session only. They live in memory and are cleared by any domain reload — recompiling a script or entering play mode discards them — and the list shows only snapshots of the type you currently have open. Capture and diff within one sitting. For a comparison that has to survive a restart, or to compare against a shipped version, export the sheet to CSV and diff the files, or use the review window against two folder states.

Import / Export

Toolbar ▸ Data. CSV, TSV, JSON and XLSX (no external dependency) round-trip losslessly. Delimited exports carry two reserved lead columns: __id (the asset GUID — leave it alone in spreadsheets; it lets a renamed row still update the right asset) and __asset (the name). Rows with no match create new assets (confirmed first); ambiguous or duplicate rows are skipped, never guessed. Everything imports as one undoable batch.

Google Sheets sync

Settings ▸ Google Sheets. Bring your own Google Cloud credentials (see the bundled Sheets Setup guide); DataLoom requests only the per-file Drive scope. One spreadsheet per project, one tab per type; Push replaces the tab with the grid, Pull applies sheet edits back (identity-matched, confirmed, undoable).

AI copilot & assistant server

Toolbar ▸ AI. Describe an edit in plain language; the model can only emit a declarative plan that is validated against your real schema, previewed as a diff, and applied only when you click Apply (one undo + backup). Anthropic or any OpenAI-compatible endpoint (set a base URL for a fully local model). Keys live in the encrypted per-machine store, never in project files.

The assistant server (Tools ▸ DataLoom Pro ▸ Assistant Server) exposes the same read/preview/apply-with-confirmation tools over MCP at http://127.0.0.1:8471/ — loopback only.

Headless CI

Unity -batchmode -quit -projectPath <project> -executeMethod DataLoom.Editor.LoomCli.Run -- --mode validate --report health.json --junit health.xml --sarif health.sarif
  # exit 0 = clean, 2 = violations/failure, 3 = bad arguments
--mode export   --type MonsterProfile --out monsters.xlsx
--mode import   --type MonsterProfile --in monsters.csv [--apply] [--create]
--mode pipeline --spec buff.json [--apply]   # dry-run by default
--mode pipeline --name "Tier Buff"  [--apply]   # a pipeline saved in the editor, by its name
--mode codegen                                 # regenerate the typed accessors
--mode codegen  --check                        # CI drift check: exit 2 if generated code is stale
  # --apply/--create/--check read their VALUE: bare means true, and "--apply false" means false

Pipeline spec format:

{ "type": "MonsterProfile", "column": "health",
  "filter": { "column": "tier", "op": "==", "value": "Dire" },
  "steps": [ { "op": "multiply", "factor": 1.15 }, { "op": "clamp", "min": 0, "max": 999 } ] }

Smaller things worth knowing

Features that exist but are easy to miss — a traceability audit found these shipping with no documentation at all.

Safety model

One thing undo cannot do. Every value change is a single undo step with a backup. But Unity's undo system cannot delete a file it created on disk, so if an import creates assets, Ctrl+Z takes back the value changes and the new asset files remain. DataLoom therefore asks straight after such an import whether to remove them, and takes a backup before it does. Nothing is ever removed silently.

Extending DataLoom

Google Sheets setup

DataLoom ships no Google keys — you create a free Google Cloud project once and your whole team shares it (the four identifiers are committed with the project; secrets stay per machine). Sync only ever requests the per-file Drive scope, so it can touch only spreadsheets you explicitly pick.

1 · Create the Cloud project & enable APIs

  1. Go to console.cloud.google.com ▸ create a project (any name).
  2. APIs & Services ▸ Library: enable Google Sheets API, Google Drive API and Google Picker API.

2 · Consent screen

  1. APIs & Services ▸ OAuth consent screen ▸ External ▸ fill the two required fields.
  2. Testing mode is enough — add each teammate's Google account under Test users.

3 · Create the two OAuth clients + API key

  1. Credentials ▸ Create credentials ▸ OAuth client ID ▸ Desktop app → this is the Desktop OAuth Client ID (used by Connect). If Google shows a client secret, keep it — some desktop clients need it: paste it into DataLoom's Desktop OAuth Client Secret field on each machine (it is stored encrypted, per machine, never committed).
  2. Create credentials ▸ OAuth client ID ▸ Web application → this is the Picker Web Client ID. Under Authorized JavaScript origins add exactly: http://localhost:8472
  3. Create credentials ▸ API key → the Browser Picker API Key. Restrict it to the Google Picker API.
  4. The Picker App ID is your Cloud project's project number (Dashboard ▸ Project info — the numeric one, not the project id).

4 · In Unity

  1. Tools ▸ DataLoom Pro ▸ Settings ▸ Google Sheets: paste the four values (they save to ProjectSettings/DataLoomSheets.json — commit it).
  2. Connect — a browser opens; sign in with a test-user account. The refresh token is stored encrypted on this machine only.
  3. Bind Spreadsheet — a local page (http://localhost:8472) opens the Google Picker; pick (or first create in Drive) one spreadsheet for the project.
  4. Open a type in the workbench ▸ Data ▸ Google Sheets ▸ Push. Each type syncs to its own tab (auto-created). Designers edit in Sheets; Pull applies their edits back — matched by the hidden __id column, confirmed, undoable.

Common errors

Instructions for AI assistants

This section is also what to paste into Project Settings ▸ Assistant Preferences ▸ Custom Instructions so Unity AI (or any coding agent) drives DataLoom correctly.

Assign this file in Project Settings ▸ Assistant Preferences ▸ Custom Instructions so Unity AI (and any agent reading it) knows how to drive DataLoom correctly. It is also the fastest orientation for a coding agent working in a project that has DataLoom installed.

What DataLoom is

An editor tool that presents every ScriptableObject of a type — and every MonoBehaviour on prefabs — as one editable spreadsheet. The assets stay plain .asset / .prefab files; DataLoom never moves data into a database of its own.

The rule that matters most

Every write goes through the Transactor. Do not call SerializedObject.ApplyModifiedProperties on data assets directly when a DataLoom path exists. Going through the Transactor is what gives the user one undo step, an automatic file backup, and a revertible history entry. A write that bypasses it is invisible to all three.

Preferred entry points

TaskUse
Bulk-edit a columnPipelineRunner.RunSpec(specJson, apply) — always preview with apply:false first
Read a sheetnew LoomTable() + Load(type), then GetCell / GetCellExport
Values for export or comparisonGetCellExport — full precision and stable reference identity
Values shown to a personGetCell — the display form
ValidateValidationState.ValidateAll(table) or DataHealth.Scan()
Check data in CIthe CLI: -executeMethod DataLoom.Editor.LoomCli.Run --mode validate (exit 2 = issues)

Working with the assistant server

DataLoom exposes a loopback MCP server (Tools ▸ DataLoom Pro ▸ Assistant Server ▸ Start). It prints a config block containing a per-session bearer token — requests without it are rejected, as are requests carrying an Origin header. Write tools require confirm: true; that gate exists so a model cannot mutate a project's data without the user's explicit step. Do not attempt to work around it, and do not ask the user to disable it.

Things that will bite you

Suggesting data changes

Prefer proposing a pipeline spec the user can preview as a diff over editing assets one by one. If you are unsure whether a change is safe, run it through the What-If Sandbox (Tools ▸ DataLoom Pro ▸ What-If Sandbox), which applies the pipeline to a shadow copy and proves the real assets were untouched.

Support: szekipapa77@gmail.com · DataLoom Pro is editor-only and adds nothing to your builds.