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.
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.
What you can do
Every asset of a type as a row, every field as a column. Edit inline with the real Unity property drawers.
Select many cells and set them all at once — one value, or an incrementing series.
Compute numeric cells from other fields in the same row, with a spreadsheet-style = syntax.
Per-field rules — Range, Required, Unique, Regex, Not-Null — surfaced live in the grid.
Colour cells by value so outliers and balance problems jump out at a glance.
Import/export CSV, TSV and JSON, or two-way sync a type with Google Sheets.
Typical Workflow
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 DataForge from the Asset Store. All files live under
Assets/DataForge/. If prompted, install the Newtonsoft.Json dependency — see Installation.Go to
Window → DataForge → Open DataForge (shortcut Ctrl+Alt+Shift+D). A welcome popup greets you on first open.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.Click a cell and type. The change is written straight to the asset — just like editing in the Inspector, with full Undo support.
Drag-select a column of cells, then enter one value to set them all — or an incrementing range. See Bulk / Multi-Edit.
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.
Window → DataForge → Open DataForge.Window → DataForge → Check Newtonsoft.Json Dependency.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:
| Area | Description |
|---|---|
| Toolbar | Type selector, search, column visibility, create/import/export, Google Sheets controls, validation, history and settings. See Toolbar Reference. |
| Data grid | The spreadsheet itself — one row per asset, one column per serialized field, with a frozen header and pagination. |
The data grid
- Rows are the assets of the selected type. Columns are their serialized fields.
- Click a cell to select it; click + drag or Shift+click to select a range; Ctrl+click rows to multi-select.
- Arrow keys,
TabandEntermove the active cell, just like a spreadsheet. - The header row stays frozen while you scroll. Column headers can be shown in Friendly or raw form (see Settings).
- Large tables are paginated — the page size is configurable in Settings.
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.
| Control | What it does |
|---|---|
| Type dropdown | Selects which ScriptableObject type to edit. Types are grouped by namespace, with a Recent section for your last five. |
| Search | Live row filter by asset name or cell content. |
| Columns | Show/hide individual columns, or show them all. |
| + Create | Opens the Batch Create dialog to generate many new assets at once. |
| Export | Drop-down: export the current table to CSV, TSV, or JSON. |
| Import | Import values into the table from a CSV/TSV/JSON file. |
| Push / Pull | Send the table to, or pull it from, the bound Google Sheet. See Google Sheets Sync. |
| Google status / Bind | Shows the connection and bound-spreadsheet state; Bind picks the project spreadsheet via Google Picker. |
| Validate View | Validates all loaded rows now. (Hidden as a manual action when Auto Validate is on.) |
| Issue count | Appears when validation finds problems — click to filter the grid to only the rows with issues. |
| History | Opens the Change History window. |
| Settings gear | Opens DataForge Settings and Google Sheets configuration. |
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
| Action | Result |
|---|---|
| Click a cell | Selects it and makes it the active cell. |
Arrow keys / Tab / Enter | Moves the active cell around the grid. |
Click + drag, or Shift+click | Selects a rectangular range of cells. |
Ctrl+click rows | Adds rows to a multi-row selection. |
Ctrl+C / Ctrl+V | Copy and paste cell values — within DataForge or to/from a real spreadsheet. |
| Type into a selected range | Triggers a bulk edit across the whole selection. |
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:
| Category | Field types |
|---|---|
| Numbers | int, float — also valid as formula targets |
| Text & flags | string, bool, enum, LayerMask |
| Vectors | Vector2, Vector3, Vector4 |
| Visual | Color, Gradient, AnimationCurve |
| References | Any UnityEngine.Object reference (assets, prefabs, sprites…) |
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.
Drag across a column,
Shift+click a range, or Ctrl+click rows.Type the value you want. It is applied to every selected cell of a compatible type.
The change is applied as one batch — and can be reverted as one batch from History.
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
| Function | Purpose |
|---|---|
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. |
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
| Rule | Checks that… |
|---|---|
| Required | The field has a value — not empty, not zero-default. |
| Range | A numeric value falls between a minimum and maximum. |
| Unique | No two assets share the same value in this column (great for IDs and names). |
| Regex | A text value matches a regular-expression pattern. |
| Not Null Ref | An object-reference field is assigned — no missing references. |
How it runs
- With Auto Validate on Edit enabled (the default), DataForge revalidates after every edit and when the window regains focus.
- Otherwise, click Validate View in the toolbar to run validation on demand.
- When issues are found, an issue count appears in the toolbar — red for errors, amber for warnings. Click it to filter the grid down to just the offending rows.
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
- Highlight a
damagevalue that is far above the rest of the table. - Tint a whole rarity column by tier — common, rare, legendary.
- Flag a
priceof0red so unfinished economy data stands out. - Mark booleans — e.g.
isEnabled— green when true.
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.
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.
| Option | Description |
|---|---|
| Count | How many assets to create. |
| Prefix / Suffix | Text wrapped around the generated number, e.g. Weapon_ … _v2. |
| Start Index | The lowest number to use. Existing files numbered below this are ignored. |
| Padding | Zero-pads the number — padding 3 gives 001, 002, … |
| Numbering | Append After Max continues past the highest existing number; Fill First Gap reuses the first missing number. |
| Folder | The 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:
| Format | Best for |
|---|---|
| CSV | Spreadsheets, version control, sharing with non-Unity tooling. |
| TSV | Tab-separated — pastes cleanly into Excel and Google Sheets. |
| JSON | Structured 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.
.asset files. The changes are undoable, but it's wise to have your project under version control before a large import.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.
Controls
| Control | Description |
|---|---|
| Bind / Rebind | Choose the project spreadsheet through the Google Picker in your browser. |
| Push | Writes the current DataForge table up to the bound sheet. |
| Pull | Reads the bound sheet back down into the table (and refreshes the grid). |
| Google status | Shows whether you're connected and which spreadsheet is bound. Click it to open settings. |
Assets/DataForge/Documentation/GoogleSheetsOAuthSetup.md before your first connection.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.
| Element | Description |
|---|---|
| Single entry | One field change. Revert restores the old value. |
| Batch group | A bulk edit or import, grouped and collapsible. Revert Batch rolls back every change in the batch in one click. |
| Clear History | Empties the current history list. |
Settings
Tune DataForge to your project.
Open settings from the gear icon in the toolbar. Settings are stored per-project in UserSettings/DataForgeSettings.asset.
| Setting | Default | Description |
|---|---|---|
| Default Page Size | 50 | Rows shown per page in the grid. |
| Default Row Height | 20 | Height of each grid row, in pixels. |
| Show Asset Preview | On | Shows a thumbnail preview for asset-reference cells. |
| Preview Size | 64 | Thumbnail size in pixels (16–128). |
| Default Header Format | Friendly | How column headers are labelled — Friendly turns maxHitPoints into Max Hit Points. |
| Max Visible Columns | 30 | Upper limit on columns drawn for very wide types. |
| Auto Validate on Edit | On | Revalidate automatically after edits and on window focus. |
| Auto Sync History | On | Persist the change history to disk between sessions. |
| Lock Floating Window Min Size | On | Keeps an undocked window from shrinking below a usable size. |
File Structure
Everything DataForge ships lives under Assets/DataForge/.
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/ 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
ScriptableObjecttypes 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
intorfloatcolumn. - 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+Zto 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.comWe typically respond within 24 hours.
- Check the Troubleshooting section
- Check the FAQ section
- Confirm you are on Unity 2021.3 LTS or newer
- Confirm Newtonsoft.Json is installed
- Unity version
- DataForge version (currently v1.0)
- Console messages (lines starting with
[DataForge]) - Steps to reproduce the issue
DataForge v1.0 · ScriptableObject Spreadsheet Editor for Unity
Support: ragendom@gmail.com
© 2026 DataForge — All rights reserved.