v1.0 · Unity 2021.3+

DataForge

Edit every ScriptableObject in your project like a spreadsheet. Bulk edit, formulas, validation, conditional formatting, and Google Sheets sync — all inside the Unity Editor.

Unity 2021.3+ Spreadsheet Editing Formulas & Validation Editor-Only

🏠 Overview

All your game data assets, in one editable grid.

DataForge is a Unity Editor extension that turns your ScriptableObject assets into an editable spreadsheet. Pick a type — WeaponData, EnemyData, ItemData, anything — and every asset of that type becomes a row, every serialized field a column. Edit values inline, fill cells with formulas, catch bad data with validation rules, colour-code with conditional formatting, and round-trip the whole table through CSV, JSON, or Google Sheets.

💡
No more clicking asset-by-asset. Balancing 80 weapons or 200 items in the Inspector means 80–200 selections. DataForge shows them all at once — sort, compare, multi-select, and edit a whole column in a single action.

What you can do

📊 Spreadsheet editing

Every asset of a type as a row, every field as a column. Edit inline with the real Unity property drawers.

🔁 Bulk edit

Select many cells and set them all at once — one value, or an incrementing series.

Σ Formulas

Compute numeric cells from other fields in the same row, with a spreadsheet-style = syntax.

✅ Validation

Per-field rules — Range, Required, Unique, Regex, Not-Null — surfaced live in the grid.

🎨 Conditional formatting

Colour cells by value so outliers and balance problems jump out at a glance.

📁 Sheets & files

Import/export CSV, TSV and JSON, or two-way sync a type with Google Sheets.

Typical Workflow

📑 Pick a type ✏️ Edit in the grid 🔁 Bulk-edit & formulas ✅ Validate 💾 Export / Sync
Editor-only. DataForge is a Unity Editor tool. Its scripts live in an Editor/ folder and are never compiled into your game build — zero runtime footprint. It edits the same .asset files you already ship.

Quick Start

From import to your first bulk edit in under two minutes.

Import the package
Import DataForge from the Asset Store. All files live under Assets/DataForge/. If prompted, install the Newtonsoft.Json dependency — see Installation.
Open the window
Go to Window → DataForge → Open DataForge (shortcut Ctrl+Alt+Shift+D). A welcome popup greets you on first open.
Pick a type
Click the type dropdown at the top-left of the toolbar and choose any of your ScriptableObject types. Every asset of that type loads as a row.
Edit a cell
Click a cell and type. The change is written straight to the asset — just like editing in the Inspector, with full Undo support.
Try a bulk edit
Drag-select a column of cells, then enter one value to set them all — or an incrementing range. See Bulk / Multi-Edit.
💡
No assets showing? DataForge lists every concrete ScriptableObject type that has at least one asset in the project. If the dropdown is empty, create a ScriptableObject asset first, or use + Create to batch-create some.

📦 Installation

One dependency — DataForge installs it for you.

DataForge depends on Newtonsoft.Json (com.unity.nuget.newtonsoft-json), an official Unity package. It is used for JSON import/export, the change-history store, and Google Sheets sync.

Automatic setup

When DataForge loads in a project that doesn't have Newtonsoft.Json yet, it opens a Setup Required popup. Click Install Newtonsoft.Json and DataForge adds the package through the Unity Package Manager — no manifest editing required. Unity recompiles, and DataForge is ready.

Import DataForge from the Asset Store.
If Newtonsoft.Json is missing, the Setup Required window appears automatically.
Click Install Newtonsoft.Json and confirm. Unity downloads the package and recompiles.
Done — open Window → DataForge → Open DataForge.
Already have it? Many projects ship Newtonsoft.Json already (it is a dependency of several Unity packages). If so, the setup popup never appears. You can re-check any time via Window → DataForge → Check Newtonsoft.Json Dependency.
⚠️
Prefer to install it manually? Open Window → Package Manager, switch to Unity Registry, search for Newtonsoft Json, and click Install. DataForge picks it up on the next recompile.

🖼 The DataForge Window

A toolbar on top, your data grid below.

Open it via Window → DataForge → Open DataForge. The window is dockable and resizable, and has two areas:

AreaDescription
ToolbarType selector, search, column visibility, create/import/export, Google Sheets controls, validation, history and settings. See Toolbar Reference.
Data gridThe spreadsheet itself — one row per asset, one column per serialized field, with a frozen header and pagination.

The data grid

💡
State is remembered. DataForge restores your last selected type, search filter, page, scroll position and active cell when you reopen the window.

Search & filter

The search box in the toolbar filters rows live as you type — matching against the asset name and cell values. Clear it to show every row again.

Column visibility

Click Columns in the toolbar to toggle individual columns on or off, or choose Show All Columns. Hiding columns you aren't editing keeps wide tables readable.

🧰 Toolbar Reference

Every control across the top of the window.

ControlWhat it does
Type dropdownSelects which ScriptableObject type to edit. Types are grouped by namespace, with a Recent section for your last five.
SearchLive row filter by asset name or cell content.
ColumnsShow/hide individual columns, or show them all.
+ CreateOpens the Batch Create dialog to generate many new assets at once.
ExportDrop-down: export the current table to CSV, TSV, or JSON.
ImportImport values into the table from a CSV/TSV/JSON file.
Push / PullSend the table to, or pull it from, the bound Google Sheet. See Google Sheets Sync.
Google status / BindShows the connection and bound-spreadsheet state; Bind picks the project spreadsheet via Google Picker.
Validate ViewValidates all loaded rows now. (Hidden as a manual action when Auto Validate is on.)
Issue countAppears when validation finds problems — click to filter the grid to only the rows with issues.
HistoryOpens the Change History window.
Settings gearOpens DataForge Settings and Google Sheets configuration.
Responsive layout. On a narrow window the toolbar automatically splits into two rows so no control is clipped.

Editing Cells

It writes to the real asset — with full Undo.

Editing a cell in DataForge is editing the asset. Every change goes through Unity's serialization and is registered with the editor Undo system, so Ctrl+Z works exactly as it does in the Inspector. Object-reference, colour, enum, curve and gradient cells open the same property drawers Unity uses.

Keyboard & mouse

ActionResult
Click a cellSelects it and makes it the active cell.
Arrow keys / Tab / EnterMoves the active cell around the grid.
Click + drag, or Shift+clickSelects a rectangular range of cells.
Ctrl+click rowsAdds rows to a multi-row selection.
Ctrl+C / Ctrl+VCopy and paste cell values — within DataForge or to/from a real spreadsheet.
Type into a selected rangeTriggers a bulk edit across the whole selection.
💡
Smart paste. Paste a block of tab-separated values copied straight from Excel or Google Sheets and DataForge maps it onto the grid starting at the active cell.

📑 Supported Field Types

DataForge renders an appropriate editor for each serialized field.

Each column is rendered with a type-aware cell editor. The following field types are supported as first-class columns:

CategoryField types
Numbersint, float — also valid as formula targets
Text & flagsstring, bool, enum, LayerMask
VectorsVector2, Vector3, Vector4
VisualColor, Gradient, AnimationCurve
ReferencesAny UnityEngine.Object reference (assets, prefabs, sprites…)
Unsupported fields. Fields that don't map cleanly to a grid cell (deeply nested custom structs, some generic collections) are shown as read-only placeholder cells so the column still lines up — edit those in the Inspector. DataForge never alters data it can't represent.

🔁 Bulk / Multi-Edit

Change dozens of assets in a single action.

Select a range of cells — a column, a block, or a multi-row selection — and edit them all at once. This is the core reason DataForge exists: balancing data means changing many values together.

Select the cells
Drag across a column, Shift+click a range, or Ctrl+click rows.
Enter a value
Type the value you want. It is applied to every selected cell of a compatible type.
Confirm
The change is applied as one batch — and can be reverted as one batch from History.
💡
Series fills. For numeric columns you can fill an incrementing series instead of a single repeated value — great for IDs, sort orders and tier numbers.
One undo step. A bulk edit is grouped — a single Ctrl+Z (or one Revert Batch in History) undoes the entire operation.

Σ Formulas

Compute numeric cells from other fields in the same row.

Any cell value that begins with = is treated as a formula. Formulas reference other fields of the same row by wrapping the field name in braces — {fieldName} — and are evaluated to a number that is written into the cell.

Examples

// double the base damage
={damage} * 2

// derive DPS from damage and attack speed
={damage} * {attackSpeed}

// clamp a computed price into a sensible band
=CLAMP({basePrice} * 1.15, 10, 999)

// round a value to a whole number
=ROUND({weight} * 0.45)

Operators

Standard arithmetic is supported: +, -, *, /, and parentheses for grouping.

Built-in functions

FunctionPurpose
ABS(x)Absolute value.
MIN(a, b, …) / MAX(a, b, …)Smallest / largest of the arguments.
CLAMP(x, lo, hi)Constrains x to the range [lo, hi].
ROUND(x) / FLOOR(x) / CEIL(x)Rounding to nearest / down / up.
LERP(a, b, t)Linear interpolation between a and b.
IF(cond, a, b)Returns a when the condition holds, otherwise b.
LEN(s)Length of a text value.
UPPER(s) / LOWER(s) / CONCAT(…)Text transforms.
⚠️
Formula columns are numeric. A formula can only be committed to an int or float column. If a referenced field is missing or a formula can't be parsed, DataForge reports the error instead of writing a bad value.

Validation

Catch bad data before it ships.

DataForge can check each field against rules and surface failures right in the grid. Rules are attached per field and stored in a per-type validation profile asset.

Rule types

RuleChecks that…
RequiredThe field has a value — not empty, not zero-default.
RangeA numeric value falls between a minimum and maximum.
UniqueNo two assets share the same value in this column (great for IDs and names).
RegexA text value matches a regular-expression pattern.
Not Null RefAn object-reference field is assigned — no missing references.

How it runs

Where profiles live. Validation profiles are saved as assets under Assets/Editor/DataForge/ValidationProfiles/, one per ScriptableObject type. Because they sit in an Editor/ folder they never enter your build.

🎨 Conditional Formatting

Let the data colour itself.

Conditional formatting paints a cell's background or text based on its value, so patterns and outliers are obvious without reading every number. Rules are defined per type and persist with your DataForge settings.

Typical uses

Each rule pairs a condition on a column with a format style (background colour, text colour, emphasis). Rules are evaluated as the grid draws, so formatting updates the instant a value changes.

💡
Formatting is cosmetic. Conditional formatting only changes how cells look in DataForge — it never modifies the asset or affects your build.

Batch Create

Generate many new assets in one dialog.

Click + Create in the toolbar to open the Batch Create window and stamp out a run of new assets of the selected type.

OptionDescription
CountHow many assets to create.
Prefix / SuffixText wrapped around the generated number, e.g. Weapon__v2.
Start IndexThe lowest number to use. Existing files numbered below this are ignored.
PaddingZero-pads the number — padding 3 gives 001, 002, …
NumberingAppend After Max continues past the highest existing number; Fill First Gap reuses the first missing number.
FolderThe destination folder under Assets/. Use the ... button to browse.

A live Preview shows the name of the first asset before you commit. Click Create and the new rows appear in the grid, ready to edit.

💾 Import & Export

Round-trip your data through standard file formats.

Export

The Export toolbar drop-down writes the current table to a file:

FormatBest for
CSVSpreadsheets, version control, sharing with non-Unity tooling.
TSVTab-separated — pastes cleanly into Excel and Google Sheets.
JSONStructured export for build pipelines and external scripts.

Import

The Import button reads a CSV, TSV or JSON file back into the current table, matching columns by header and updating the corresponding asset fields. After an import the grid refreshes so you can review and validate the new values.

⚠️
Import writes to your assets. Importing updates real .asset files. The changes are undoable, but it's wise to have your project under version control before a large import.
Headers matter. Import maps columns by their header names. Export first to get a file with the exact headers DataForge expects, edit it, then import it back.

📋 Scratch Pad

A scratch area for moving tabular data into a table.

Open the Scratch Pad from Window → DataForge → Scratch Pad. It is a simple text area: paste a block of rows and columns copied from Excel, Google Sheets or a CSV, then send it straight into the active DataForge table with Paste to Table.

It's handy when you want to stage and eyeball external data before it lands in your assets — especially large blocks that you'd rather not paste cell-by-cell.

📁 Google Sheets Sync

Two-way sync between a ScriptableObject type and a Google Sheet.

DataForge can connect to Google Sheets so designers can balance data in a shared spreadsheet while the project stays the source of truth. Each type syncs with its own tab in a bound project spreadsheet.

🔑 Connect Google 📁 Bind a spreadsheet ⬆️ Push ⬇️ Pull

Controls

ControlDescription
Bind / RebindChoose the project spreadsheet through the Google Picker in your browser.
PushWrites the current DataForge table up to the bound sheet.
PullReads the bound sheet back down into the table (and refreshes the grid).
Google statusShows whether you're connected and which spreadsheet is bound. Click it to open settings.
⚠️
One-time OAuth setup. Google Sheets sync needs Google OAuth credentials. Follow the step-by-step guide in Assets/DataForge/Documentation/GoogleSheetsOAuthSetup.md before your first connection.
Optional feature. Google Sheets sync is entirely optional. DataForge's spreadsheet editing, formulas, validation and file import/export all work without ever connecting a Google account.

🕔 Change History

Every edit recorded — and revertible.

Click History in the toolbar to open the Change History window. It logs each value change with its asset, field, old → new value, timestamp and author.

ElementDescription
Single entryOne field change. Revert restores the old value.
Batch groupA bulk edit or import, grouped and collapsible. Revert Batch rolls back every change in the batch in one click.
Clear HistoryEmpties the current history list.
History persists. With Auto Sync History enabled, the change log is written to disk so it survives Unity restarts. Entries whose assets no longer exist are pruned automatically.

Settings

Tune DataForge to your project.

Open settings from the gear icon in the toolbar. Settings are stored per-project in UserSettings/DataForgeSettings.asset.

SettingDefaultDescription
Default Page Size50Rows shown per page in the grid.
Default Row Height20Height of each grid row, in pixels.
Show Asset PreviewOnShows a thumbnail preview for asset-reference cells.
Preview Size64Thumbnail size in pixels (16–128).
Default Header FormatFriendlyHow column headers are labelled — Friendly turns maxHitPoints into Max Hit Points.
Max Visible Columns30Upper limit on columns drawn for very wide types.
Auto Validate on EditOnRevalidate automatically after edits and on window focus.
Auto Sync HistoryOnPersist the change history to disk between sessions.
Lock Floating Window Min SizeOnKeeps an undocked window from shrinking below a usable size.

📁 File Structure

Everything DataForge ships lives under Assets/DataForge/.

Assets/
  DataForge/
    Editor/ — all editor code (excluded from builds)
      Core/ — the DataForge window & toolbar
      Features/ — formulas, validation, formatting, history, sync
      ImportExport/ — CSV / TSV / JSON handlers
      Rendering/   Table/   Properties/ — grid internals
      Setup/ — Newtonsoft.Json dependency check
    Documentation/
      Documentation.html — this file
      GoogleSheetsOAuthSetup.md — Google Sheets setup guide
    Samples/ — example ScriptableObject data & scripts
    package.json
  Editor/DataForge/ — created on demand: sync configs & validation profiles
UserSettings/
  DataForgeSettings.asset — your per-project settings
Editor-only by design. All DataForge code sits in Editor/ folders, so it is stripped from player builds automatically. Validation profiles and sync configs are stored under Assets/Editor/DataForge/ for the same reason.

💡 Troubleshooting

Common issues and how to fix them.

📦 A "Setup Required" window keeps appearing

That popup means Newtonsoft.Json isn't installed. Click Install Newtonsoft.Json and let Unity finish recompiling. If you installed it manually, use the re-check button. You can dismiss it for the project, or reopen it from Window → DataForge → Check Newtonsoft.Json Dependency.

📑 The type dropdown is empty or missing a type
  • DataForge lists concrete ScriptableObject types that have at least one asset in the project. Create an asset of the type first.
  • Abstract base types and types with no assets are not listed.
  • After adding new script types, wait for Unity to finish compiling, then reopen the dropdown.
⚠ A formula won't commit
  • Formula cells must target an int or float column.
  • Check field references — the name inside { } must match a field on the same type.
  • DataForge shows the parse or evaluation error; fix the expression and re-enter it.
📁 Google Sheets Push / Pull fails
  • Confirm you completed the OAuth setup in GoogleSheetsOAuthSetup.md.
  • Make sure a spreadsheet is bound — the toolbar should show its name, not "Sheet: Not bound".
  • Check your internet connection and that the Google account has access to the spreadsheet.
♻ Imported data looks wrong
  • Import matches columns by header name — export the table first to get a file with the exact headers.
  • Use Ctrl+Z to undo an import, or revert the batch from the History window.
  • Check that numeric columns in the file don't contain stray text.
🖼 The window is too small or controls are clipped

The toolbar switches to a two-row layout on narrow windows. If a floating window is awkwardly small, the Lock Floating Window Min Size setting keeps it usable — or just dock the window.

FAQ

Frequently asked questions.

Does DataForge affect my game's build size or runtime performance?

No. All DataForge scripts live in Editor/ folders and are excluded from player builds automatically. It has zero runtime footprint — it only edits the .asset files you were already shipping.

Will it change my assets in a way I can't undo?

Every edit goes through Unity's Undo system, so Ctrl+Z works as normal. Bulk edits and imports are grouped and can be rolled back as a batch from the History window. As always, version control is recommended for large changes.

Which types can I edit?

Any concrete ScriptableObject type that has at least one asset in your project — your own data types and ScriptableObjects from other packages alike.

Do I need Newtonsoft.Json?

Yes — it powers JSON import/export, the history store and Google Sheets sync. DataForge installs it for you through a one-click setup popup if it isn't already present. See Installation.

Is Google Sheets sync required?

No. It is an optional feature. Spreadsheet editing, bulk edit, formulas, validation, formatting and file import/export all work without connecting any Google account.

Can I use it on multiple machines?

Yes. DataForge has no machine-specific binding. Settings and validation profiles live in your project, so they travel with it through version control.

What Unity version do I need?

Unity 2021.3 LTS or newer.

Does editing here behave the same as the Inspector?

Yes — DataForge edits assets through the same serialization path as the Inspector and uses Unity's own property drawers for complex fields, so values, validation and Undo all behave identically.

📬 Support

Need help? We're here for you.

📧

Get in Touch

If you run into any issues, have feature requests, or need help integrating DataForge into your project, don't hesitate to reach out.

✉ ragendom@gmail.com

We typically respond within 24 hours.

💬 Before Contacting
  • Check the Troubleshooting section
  • Check the FAQ section
  • Confirm you are on Unity 2021.3 LTS or newer
  • Confirm Newtonsoft.Json is installed
📋 Helpful Info to Include
  • Unity version
  • DataForge version (currently v1.0)
  • Console messages (lines starting with [DataForge])
  • Steps to reproduce the issue
Enjoying DataForge? A review on the Unity Asset Store helps other developers discover the tool and helps us keep improving it. Thank you!

DataForge v1.0 · ScriptableObject Spreadsheet Editor for Unity

Support: ragendom@gmail.com

© 2026 DataForge — All rights reserved.