uloop verify-project
Check the project's files the way Unity reads them on its next import, without starting Unity.
When Unity opens a project with these problems, it silently gives assets new GUIDs and deletes
orphaned .meta files, which breaks references in ways that cannot be undone. Run this first and
fix what it finds while the old GUIDs still exist.
When to use
- After adding, moving, renaming, copying, or deleting assets, especially from a script or another branch
- After a merge or rebase that touched
Assets/,Packages/, orProjectSettings/ - Before committing
- Before opening the project in Unity
Usage
bashuloop verify-project uloop verify-project --project-path <path>
Exit codes:
0: nothing found1: problems found (the report is still printed on stdout), or the check could not run (an error envelope on stderr and nothing on stdout)
Checks
| Check | Meaning | How to fix |
|---|---|---|
CONFLICT_MARKER | A merge conflict block (<<<<<<<, =======, >>>>>>>) is left in a file | Resolve the conflict and remove the markers; Unity cannot load or compile a file that contains them |
MANIFEST_INVALID | Packages/manifest.json is missing, is not a valid JSON object, has a malformed dependencies object, or has a file: dependency that does not point to a package folder | Restore the manifest from version control, or fix or remove the dependency the message names |
GUID_DUPLICATE | Two or more .meta files declare the same GUID | Keep the .meta file of the original asset and delete the copies' .meta files so Unity assigns them new GUIDs |
GUID_INVALID | A .meta file has no valid guid: line (32 hexadecimal characters, not all zero) | Restore the .meta file from version control; otherwise Unity assigns a new GUID, which breaks references to the asset |
META_MISSING | An asset has no .meta file next to it | Bring its .meta file along from the branch or folder it came from; if you just created the asset, let Unity import it (for example with uloop compile) and commit the generated .meta file |
META_ORPHAN | A .meta file has no matching asset | If the asset was moved or renamed, move the .meta file with it to keep the GUID; if the asset was deleted, delete the .meta file too |
What is checked
.metafiles underAssets/, under every embedded package (a folder directly underPackages/with apackage.jsonfile), and under every local package the manifest lists asfile:(a relative path is resolved fromPackages/). A folder inside another of these is checked once.- Names Unity hides are skipped and need no
.metafile: names starting with., names ending with~,cvsin any case, and files with a.tmpextension in any case. - Plugin folders ending in
.bundle,.framework,.xcframework,.plugin, or.androidlib(any case) need their own.metafile, but nothing inside them is checked: Unity imports such a folder as one plugin, so the files inside are not checked whether they have.metafiles or not. - Symbolic links need a
.metafile but are never followed. - A
.metafile pairs with its asset by exact name, letter case included, so the result is the same on every OS. An orphaned.metafile is not checked further, because Unity deletes it. - Conflict markers are searched in every file of those folders (
.metafiles included), every file underProjectSettings/, andPackages/manifest.jsonandPackages/packages-lock.json. Only the first block of each file is reported. A file with a NUL byte in its first 8000 bytes is treated as binary and skipped.
Output
JSON on stdout:
Success:truewhen nothing was foundProjectRoot: the checked projectFindingCount: every problem found, including those left out ofFindingsCountsByCheck: the count for each of the six checks, always all sixFindings: each withCheck,Path, andMessage, plusLineforCONFLICT_MARKERandGUIDandRelatedPathsforGUID_DUPLICATE.Pathis/-separated and relative to the project, or absolute for a local package outside it. Sorted in the order of the table above, then by path. At most 100 findings of each check are listed.Truncated:truewhen a check had more than 100 findingsScannedRoots: the folders whose.metafiles were checkedMetaFileCount: how many.metafiles were checkedMessage: one-line summary
Notes
- A file you just created has no .meta file until Unity imports it. Run
uloop compilefirst, or treat META_MISSING on brand-new files as expected. - After a fresh clone, an empty folder that git does not track leaves its folder .meta file as META_ORPHAN. Delete that .meta file, or add a file to the folder so git tracks it.
- Run it while Unity is idle. Files Unity is writing at that moment can be reported, and a file Unity deletes during the check makes the command fail; run it again once Unity is idle.
- Not checked: GUID collisions with packages in Library/PackageCache, folders hidden only by the Windows hidden attribute (they are reported as META_MISSING), and package folders under Packages/ that are symbolic links.
- It only reads files and works whether Unity is open or closed.
- If uloop answers that verify-project is an unknown command, or that it "is handled by the global uloop dispatcher", the installed uloop is older than this command: run
uloop update.


