Import & Export
Use Import/Export to make supported database content readable in a spreadsheet, add a large set of records, or apply the same text-value change to many records. The default CSV Import Export Module transfers only part of an existing Inventory System Database; it does not create a database and is not a backup system.
Important: Import changes and saves the selected database, cannot be undone, and can replace supported values. Commit the database folder to version control or make a complete project backup before importing.
Before you begin
- Open Tools > Opsive > Ultimate Inventory System > Main Manager.
- Select the intended Inventory System Database in the Database field.
- Open Import/Export.
- Leave Default CSV Import Export Module assigned for the standard CSV layout.
To create a reusable project configuration, use Assets > Create > Ultimate Inventory System > Editor > Import Export > CSV Export Module and assign the new asset here. The asset stores the module’s table keys and transfer configuration; creating it does not export or import anything by itself.
5. If you need to change column keys or module settings, duplicate the module into a project-owned folder and assign the duplicate. The module is a Scriptable Object, so edits are saved to the asset; a package update can replace changes made to the supplied module.

For the safest first transfer, create a test database or work on a version-control branch. Import there, inspect the result, and only then repeat the same process with the project database.
What the CSV can transfer
The default module writes five tables into one .csv file:
| Table | Supported data |
|---|---|
| Item Category | ID, name, abstract/mutable/unique choices, parents, attribute declarations, and supported attribute values |
| Item Definition | ID, name, category, parent definition, and supported Definition and Default Item attribute values |
| Crafting Category | ID, name, abstract choice, parents, and recipe type |
| Crafting Recipe | ID, name, category, standard item/category/definition ingredient lists, and default outputs |
| Currency | ID, name, exchange rate, parent, and maximum amount. Overflow and fraction currencies are exported, but their import is defective in this Version 1 module; restore those relationships manually. |
The Currency importer assigns OVERFLOW CURRENCY and FRACTION CURRENCY values as the base parent instead of restoring their intended relationships. Remove those two columns from a test-import CSV, then manually set and verify Base Currency, Overflow Currency, Fraction Currency, and exchange rates in the Currency editor after import. Do not use the exported relationship columns as a reliable round trip until the importer is corrected.
Unity Object values, custom recipe data, and attribute values that cannot be converted to and from text are not reliable CSV transfers. Simple values such as int, float, and string are the best fit. Keep the real database and its related assets in the project backup even when the CSV appears complete.
Item Category table

Item Definition table

Crafting Category table

Crafting Recipe table

Currency table

Export the database
- Confirm the intended database and module in Import/Export.
- Select Export.
- Choose a location and save the
.csvfile. - Open the file in a spreadsheet editor and confirm that the required table sections and records are present before editing it.
Use the exported file as the template for an import. Keep each table’s first ID column and its NAME column. The importer recognizes tables from keys such as ITEM CATEGORY, ITEM DEFINITION, CRAFTING CATEGORY, CRAFTING RECIPE, and CURRENCY; those keys must match the assigned module. A new Item Definition or Crafting Recipe also needs its CATEGORY column so it can be created in the correct category.
When editing a CSV, preserve names unless you intend to create another object. Other supported columns can be omitted when updating existing objects, but leaving the exported structure intact makes missing dependencies and accidental column changes easier to spot.
Import into a test database
- Select the test database in the Main Manager.
- Open Import/Export and assign the same module configuration that produced the CSV.
- Select Import.
- Read the Importing Database info? warning. Confirm Yes only after checking the database and backup.
- Select the
.csvfile and wait for the import to finish. - Check the Console for Import Complete and for warnings about values, types, parents, categories, or other unresolved references.
- Manually restore and check Currency relationships as described above before testing denomination conversion.
Import first creates missing objects, then applies supported values and saves the database assets. It does not present a conflict picker.
Understand matching and conflicts
The importer matches each object by its type and NAME, not by ID alone:
| CSV situation | Import result |
|---|---|
| The same type and name already exist | The existing object receives the supported CSV values. If its ID differs, the importer uses the requested ID when that ID is available. |
| The name does not exist | A new object is created. Changing a name in the CSV therefore creates another object rather than renaming the original. |
| The requested ID is already in use | The importer assigns an available unique ID instead. |
| A database object is absent from the CSV | The existing object remains; import never deletes records. |
| A parent, category, ingredient, or other referenced name cannot be resolved | The relationship or entry may be ignored. Inspect the Console and the imported object rather than assuming the row was applied completely. |
Because an existing name is updated without a per-record prompt, review duplicate names, IDs, and relationship columns before confirming the import. Do not use CSV import as a merge tool for two independently edited production databases without testing the exact file first.
Verify the imported data
In the Main Manager, confirm that:
- expected records were created or updated, and no unintended near-duplicate names appeared;
- Item Categories retain their parent relationships and attribute declarations;
- Health Potion uses Consumable, while Iron Sword and Fire Wand use Weapon;
- imported attribute values show the intended type, variant, and source;
- Gold retains its intended parent and amount rules; and
- the sample recipe retains its Crafting Category, ingredients, amounts, and Health Potion output.
For data used at runtime, enter Play Mode and perform one focused check. For example, inspect Health Potion in the Bag, complete the sample recipe, or make a Gold shop transaction. Confirm that the runtime result uses the imported values; a clean CSV import message does not prove that every Unity reference or custom value survived.
Troubleshooting
- Import updates the wrong object: Check the object’s type and
NAME. Matching is name-based within each data type; restore the backup, correct the CSV, and import again. - A renamed row creates a duplicate: The importer treats the new name as a new object and does not delete the old one. Restore the backup or remove the unintended object in the appropriate editor after checking its relationships.
- A relationship is missing after import: Check that the referenced name is spelled exactly as it appears in the same database and that its table is included. Review the Console and correct the dependency. For Currency overflow/fraction relationships, exclude those defective columns and restore the relationships manually as described above; repeating the same import does not repair them.
- An attribute value is unchanged or logs a conversion warning: Check that the attribute exists in the expected collection and that its type can be converted from text. Apply Unity Object or unsupported custom values in the editor instead.
- The importer cannot find a table: Restore the exported header key, or assign the module whose configured keys match the CSV.
- The result is difficult to compare: Export the test database after import and compare its CSV with the intended file, then inspect the project asset changes in version control.
Related pages
- Main Manager and database editors
- Item Categories
- Item Definitions
- Attributes
- Currencies
- Crafting Categories
- Crafting Recipes
Extend the transfer format
For a transfer that the supplied CSV module cannot represent, create a project-owned Scriptable Object that inherits ImportExportModule. Implement both operations for the exact data you support, and keep the same backup-first and test-database workflow.
/// <summary>
/// The Import Export Module is a scriptable object used to import and export data from a database.
/// </summary>
public abstract class ImportExportModule : ScriptableObject
{
/// <summary>
/// Export the inventory system database.
/// </summary>
/// <param name="database">The database to export.</param>
public abstract void Export(InventorySystemDatabase database);
/// <summary>
/// Import the inventory system database.
/// </summary>
/// <param name="database">The database to import.</param>
public abstract void Import(InventorySystemDatabase database);
}
Use the released CsvImportExportModule as a reference for creating tables, resolving database objects, marking imported assets dirty, and saving the database.