Compare changes takes two project states and shows what was added, removed or changed. Changed screen pages appear as before/after thumbnails side by side, tags and device connections as field-level tables, and scripts line by line.
Comparing modifies nothing. It only collects the current state and reads saved copies or files. Saving and opening are always done with the buttons on the Projects page.
2. Where to open it
Place
Compares
Projects page header … menu › Compare changes
The saved copy of the running project ↔ the current state (pick one yourself if none is saved)
Save current state dialog › What changed?
The saved copy under the name you are about to overwrite ↔ the current state — check before saving (only when that name exists)
After opening a file, sample or saved project › Compare changes
The current state ↔ the opened project — preview what opening it would change
3. What you can compare
Current state — screens, tags, scripts … currently loaded on the gateway, collected exactly as "Save current state" would store them.
Saved on gateway — projects stored on this gateway. Restore points (auto-…) are listed too, so you can compare against the state before the last open.
File (.acproj) — a project file you downloaded or received from another gateway.
Pick two and press Compare. The middle button swaps before and after.
4. Reading the result
Summary — counts of added, removed and changed items. Each section (screens, tags, device connections, gateway properties, scripts, alarms, queries, schedules, vision …) folds open.
Screens — before/after thumbnails for every changed page, with outlines on changed elements: green = added · red = removed · yellow = changed · grey = only the stacking order changed. Below come element ids and types with changed properties (before → after), bindings (element · property → tag), document settings (translation table, theme, size) and images/media.
Tags and device connections — tags are matched by id, connections by protocol + instance number. A changed order alone is not a change.
Scripts — changed lines with three lines of context and before/after line numbers. Fields such as name or enabled appear in a separate table.
Vision recipes — compared by recipe id (the hash of the body), not the body itself. A new body means a new id, shown as one removed and one added.
5. What is not compared
Save timestamps — when and where it was saved, screen revisions and modification times. Two saves without edits report "No changes".
Masked secrets — connection passwords are stored as ********, so only "(masked)" can be shown. Database passwords and user accounts are never part of a project.
Vision for operators — recipe bodies are administrator-only. If one side lacks the vision section on an operator screen, vision is skipped and the dialog says so.
6. Project files and Git
A project file (.acproj) is a ZIP of the gateway's project folder. Unpacked, it is byte-identical to that folder, so it can be kept in Git on a development PC.
File
Contents
project.json
Table of contents — where screens and scripts are, and section counts
Content — written with sorted keys, one-space indent and a final newline. The same content always gives the same bytes
.meta.json
Save timestamps — listed in .gitignore, so they never reach Git
vision.json · vision/recipes/<hash>.vrp
Vision recipe and calibration bodies live in files named by their content hash; vision.json keeps only the reference (dataFile). The large body folders are in .gitignore, so Git keeps only the hash reference — a folder cloned from Git may lack the bodies
.gitignore · .gitattributes
Defaults are included (metadata, large bodies, runtime state and secret sidecars are ignored; screen and tag files pick one side instead of a text merge)
To load a project from Git onto a gateway, use Import from file → Open. That way the license limits, HACCP locks and vision rules still apply. Do not swap files inside the gateway's project folder directly.