User Guide
13.3 · Import / Export

JSON Project Backup

JSON export produces a full, round-trippable backup of a single project. It preserves every field, formula, custom column, note, and relationship. Use JSON for backups, project migration between installations, and diff-friendly version control.

Exporting

  • To memoryExportProjectToJsonAsync(projectId, options) returns a byte[].
  • To diskExportProjectToJsonFileAsync(projectId, path, options) streams to file (safer for very large projects).

ProjectExportOptions

OptionPurpose
DirectCostsInclude item schedule.
OverheadsInclude overheads.
ResourcesInclude project resources.
CarbonEmissionsInclude emissions.
ProjectSettingsInclude markup, currency, tax.
CodeSetsInclude code sets and allocations.
GlobalDefinesInclude parametrics.
CustomColumnsInclude custom column definitions and values.
NotesInclude notes and images.
TemplatesInclude project-scope templates.
DocumentsInclude attachments.
ProjectStructureSections, folders, tags.
ClientInclude linked client record.
CompressOutputgzip the JSON.
StoreImagesAsSeparateFilesExtract note images to sibling files instead of embedding base64.

Importing

ImportProjectFromJsonAsync(bytes, options) recreates the project.

ProjectImportOptions

OptionPurpose
NewProjectName / NumberRename on import.
ConflictResolutionSkip / Overwrite / Rename / Fail for name conflicts.
ImportAsTemplateMark the imported project as a template.
RegenerateIdsGenerate new GUIDs — prevents any collision.
TargetFolderIdDrop the imported project into a specific folder.

Round-Trip Fidelity

A JSON export → import should produce a byte-identical project except for:

  • New IDs if RegenerateIds = true.
  • New timestamps (CreatedAt unchanged; ModifiedAt updated to import time).
  • User attribution updated to the importing user if the original user doesn't exist in the target install.

Version Control Tips

  • Pretty-print option makes JSON diff-able in Git.
  • Export with StoreImagesAsSeparateFiles so images don't bloat the JSON blob.
  • Don't check in CompressOutput files — gzip doesn't diff.

Typical Uses

ScenarioApproach
Daily backupJSON gz to a network drive.
Sharing with partner using TX1JSON file (or .tx1).
Manual review of changesPretty-printed JSON with git diff.
Migrating a project to a new installJSON with RegenerateIds = true.

Image Handling

Notes often include images. When StoreImagesAsSeparateFiles = true, TX1 writes:

  • project.json — the main data.
  • images/ — a folder of binary image files referenced by ID.

Import pulls the images back in automatically.

Limitations

  • JSON is a single-project artefact. For organisation-wide backup, use the underlying SQLite file.
  • Master library references are preserved by name, not ID — if the import target doesn't have the same master resources, links become unlinked.