UE 5.6 / 5.7 Editor Plugin View on Fab

Introduction

SyncShield is a layered save-safety system for UE 5.6+: source control awareness, local pre-save history, shadow auto-save, validation hooks, team presence, and save profiles all sit behind the same lightweight entry point.

The operating principle is simple: make risky save conditions visible, create recoverable copies before destructive writes, and give teams better editor-time awareness without forcing a separate workflow outside Unreal.

Manual Scope

This manual reflects the upgraded SyncShield build as of March 16, 2026. It covers both the long-standing source control toolbar and the five new save-centric subsystems.

System Map

The upgraded plugin is one toolbar surface backed by six coordinated safety services.

SyncShield Toolbar + Menu + Tooltip Summary SCM Status Git / Plastic state Save History Pre-save snapshots Shadow Auto-Save Incremental background copies Validation Rule checks before SyncShield actions Presence Profiles
5

New save subsystems

History, smart auto-save, validation, presence, and save profiles now sit alongside the source control layer.

3

Recovery paths

Local history snapshots, shadow auto-save copies, and source control remain distinct paths back from a bad save.

1

Core promise

A bad Blueprint save should no longer mean "hope you committed".

Feature Atlas

SyncShield is easiest to understand as six cooperating modules: one status surface and five save-centric services.

Existing

Source Control Status

Branch/workspace, ahead/behind, conflicts, login state, unsaved work, and teammate lock warnings stay visible in the Level Editor toolbar.

New

Local Save History

Before SyncShield-driven writes land, the on-disk package is copied into a per-asset history store under Saved/SyncShield/History.

New

Smart Auto-Save

Dirty packages are shadow-saved one at a time into a non-destructive backup tree instead of forcing a large editor hitching wave.

New

Pre-Save Validation

Blueprint health, UObject data validation, naming rules, and texture size guidance are checked before SyncShield save actions proceed.

New

Team Presence

Editor sessions publish a lightweight JSON heartbeat with open assets and recent saves so the tooltip can summarize teammate activity.

New

Save Profiles

Save All is no longer the only useful operation. Save Blueprints, Save Current Level, and Save Recent Assets are first-class commands.

New

Conflict Sentinel

Preemptively detects if remote changes will cause a merge conflict with your currently unsaved assets and alerts you instantly.

New

Safe Branch Shifter

Crash-free Git branch switching directly inside Unreal. Automatically handles dirty assets and securely closes editors before checking out.

What each subsystem actually does

Subsystem Primary trigger Writes data to Main user-facing action Current surface
Source Control Status Polling + asset-open events None Fetch / Pull / Push / Update / Submit Toolbar label, icon, tooltip, menu
Local Save History Pre-save package hook Saved/SyncShield/History Restore Latest Snapshot Menu + tooltip summary
Smart Auto-Save Background ticker Saved/SyncShield/ShadowAutoSaves Automatic shadow snapshots Tooltip summary
Pre-Save Validation SyncShield save actions + pre-save warnings None Validate Dirty Assets Menu, toasts, tooltip summary
Team Presence Heartbeat ticker + asset open/close + saves .syncshield/presence Shared editor awareness Tooltip summary
Save Profiles User menu commands None directly Save Blueprints / Current Level / Recent Assets Menu + validation-aware save pipeline
Conflict Sentinel Background remote diffs None Instant collision warnings High-visibility Editor Toast
Safe Branch Shifter User menu command None directly Safe Switch Branch Toolbar Git Menu

Quick Start

Install and first launch

  1. Place the plugin inside your project at Plugins/SyncShield.
  2. Launch the project in Unreal Engine 5.7.
  3. Connect Source Control if you use Git or Plastic SCM.
  4. Open Editor Preferences -> Plugins -> SyncShield.
  5. Leave the new subsystems enabled for the default experience, then tune intervals and retention counts to fit your project size.
YourProject/
|- Plugins/
|  \- SyncShield/
|     |- SyncShield.uplugin
|     \- Source/
\- Saved/

Recommended shared ignore rule

Team Presence writes JSON heartbeats into a repo-root sidecar folder. That folder should usually be ignored in source control.

# SyncShield shared presence heartbeat files
.syncshield/presence/

First 10 Minutes

Minute 1

Verify the toolbar appears in the Level Editor top bar.

Minute 3

Open the SyncShield menu and confirm the new actions are present: Save Blueprints, Save Current Level, Save Recent Assets, Validate Dirty Assets, Restore Latest Snapshot.

Minute 6

Open Editor Preferences and set retention counts appropriate for your disk budget.

Minute 10

Make a small asset edit, use SyncShield to save it, and confirm history files appear under Saved/SyncShield/History.

Important

SyncShield's strongest validation blocking currently applies to SyncShield-driven save actions. Native Unreal save paths such as editor-specific Ctrl+S still receive warnings, but not a universal hard cancel, because Unreal does not expose a clean global save-veto hook for every editor save entry point here.

Toolbar and Menu

The toolbar still behaves like a compact status surface, but the menu now fronts a broader save pipeline.

UE5.7 / LevelEditor / Toolbar
main | Unsaved 3

Status label remains concise. The richer subsystem state is added in the tooltip and status details summary.

Save Blueprints
Save Current Level
Validate Dirty Assets
Restore Latest Snapshot
Illustrated menu expansion: the label stays compact while save commands grow more specialized.

Menu action reference

Action What it does New or existing Notes
Save All Runs the SyncShield save pipeline against all dirty packages. Existing, upgraded Now routes through validation and shared save-profile logic.
Save Blueprints Saves only dirty Blueprint asset packages. New Useful for rapid Blueprint iteration without touching the whole project.
Save Current Level Saves the current world package and dirty external world packages tied to it. New Best when iterating on one map or world partition area.
Save Recent Assets Saves only packages touched inside the configured recent window. New Window is configurable in settings.
Validate Dirty Assets Runs SyncShield validation across all dirty packages and reports the result. New Use this before a large save or before submitting.
Restore Latest Snapshot Replaces the active asset's on-disk package with the most recent SyncShield history snapshot and reloads it. New Currently restores the latest snapshot, not an arbitrary timeline pick.
Safe Switch Branch Closes all asset editors and securely checks out a different local Git branch. New Prevents editor crashes during file swaps.
Submit Content Opens Unreal's source control submit window. Releases LFS locks after a successful check-in if any were held. Existing, upgraded Auto-unlock after submit prevents orphaned LFS locks.
Quick Commit Stages all changes (including untracked files) and commits with a user-provided message. New The dialog clearly warns that all changes will be staged. Use for rapid local checkpoints.
Unlock LFS Files Lists all locally-held Git LFS file locks and releases them after confirmation. New Only enabled when Git LFS is detected and locks are held. See Git LFS Locks.
Git Stash / Stash Pop Stash uncommitted changes or restore them from the stash stack. New Useful before branch switching or pulling when you have local work in progress.
Merge Abort / Rebase Abort Aborts a failed merge or rebase operation to return to a clean state. New Only visible in the Conflict Resolution submenu when Git conflicts are detected.
Fetch / Pull / Push / Update Workspace Provider-specific source control actions gated by workspace safety. Push now auto-releases LFS locks on success. Existing, upgraded See Source Control for the exact gating rules.

Tooltip expansion

The tooltip is now more than an SCM diagnostic. When the new services are enabled, it also appends subsystem summaries such as:

  • History: 4 snapshots this session, last /Game/Blueprints/BP_Door
  • Auto-Save: 9 shadow saves, last /Game/Maps/MainHub
  • Validation: 1 errors, 2 warnings
  • Presence: 2 teammates online, 5 remote assets open
  • Profiles: SyncShield processed 3 package(s) for dirty Blueprints.
  • LFS Locked Files: 2 followed by the locked file paths when Git LFS locks are held.
  • Locked by Others: 1 and Checkout Required: 3 when the provider reports lock or checkout state.

Status Model

The toolbar label remains intentionally narrow. It reports source control and unsaved-work state directly, while the new save subsystems contribute detail in the tooltip and menu.

Healthy

  • main | Clean
  • main | Ahead 1
  • main | Behind 2

Work in progress

  • main | Unsaved 3
  • main | Changes
  • main | Checkout Req (2)

Risk / degraded

  • main | Locked (1)
  • main | Diverged
  • main | Status Error
  • Login Required | Unsaved 2
  • No SCM Repo | Unsaved 3

Risk ladder

SyncShield intentionally keeps the label short, but the color and wording escalate from neutral to intervention-worthy states.

Clean Unsaved / Changes Behind / Sync Locked / Diverged Status Error / Login Required

Local Save History

Local Save History is the biggest unlock in the upgrade. Before a SyncShield-observed manual package save overwrites the package file, SyncShield copies the current on-disk package into a per-asset history folder.

What it captures

  • The package file as it existed on disk immediately before the new save.
  • A JSON sidecar with timestamp, package name, source path, snapshot path, and file hash.
  • Per-asset history folders inside Saved/SyncShield/History.

What the current UI exposes

  • Restore Latest Snapshot in the toolbar menu.
  • Tooltip session summary showing how many snapshots were captured.
  • Automatic reload attempt after restore.
Important

The history store already contains a real per-asset timeline on disk. The current menu exposes a one-click latest snapshot restore. A dedicated timeline browser can be built later on top of the same stored snapshots.

Recovery timeline

Edit asset Blueprint becomes dirty Pre-save snapshot Disk package copied to history Save New version written Restore Latest snapshot only Bad save? Restore the last known package.

Folder example

Saved/
\- SyncShield/
   \- History/
      \- Game/
         \- Blueprints/
            \- BP_Door/
               |- 20260311-194222-113.uasset
               |- 20260311-194222-113.json
               |- 20260311-201745-087.uasset
               \- 20260311-201745-087.json

Behavior notes

  • History capture skips procedural saves and auto-save writes.
  • Retention is bounded by Max Snapshots Per Asset.
  • Restore operates on the active asset known from the last opened asset editor.
  • If the package reload fails after restore, the on-disk file is still restored and SyncShield reports that fact explicitly.

Smart Auto-Save

Unreal's stock auto-save tends to batch work. Smart Auto-Save spreads that work out by shadow-saving one dirty package at a time into a dedicated backup directory while keeping the original package dirty.

How it differs from stock UE auto-save

Behavior Stock UE auto-save SyncShield Smart Auto-Save
Write target UE autosave structure Saved/SyncShield/ShadowAutoSaves
Work scheduling Broad timed autosave pass One dirty package per interval tick
Dirty state Engine-controlled Uses SAVE_KeepDirty so the original package still reads as dirty
Scope control Project/editor settings Separate SyncShield toggles for maps and content assets
Retention Engine-managed Per-asset capped by Max Shadow Snapshots Per Asset

Scheduling model

  • Runs from a lightweight ticker.
  • Does not run during PIE or Simulate in Editor.
  • Sorts dirty packages by least-recently shadow-saved first.
  • Saves a single eligible package per interval.

Incremental queue

Dirty queue Pick one Shadow save Keep dirty Result: backup exists, editor intent is preserved, save hitch is distributed.

Pre-Save Validation

Pre-Save Validation turns SyncShield into a gatekeeper, not just a monitor. Before a SyncShield save action writes packages, the validation service scans each candidate package for broken states and policy violations.

The current build checks native UObject validation, common Blueprint failure modes, naming policy, and oversized textures. The result is summarized in the toolbar flow and, when configured, blocking issues prevent SyncShield save profiles from writing those packages at all.

What Gets Blocked

Blocking applies to SyncShield-driven save actions such as Save All, Save Blueprints, Save Current Level, and Save Recent Assets. Passive warnings can still appear during observed native save activity.

Validation stack

Choose save profile All / BP / Level / Recent Collect packages Dirty packages only Run validation rules UObject IsDataValid Blueprint parent / compile checks Naming regex + texture size Blocking errors SyncShield action stops here Validation passes Continue to snapshot + save

Rule sources

Rule source What SyncShield checks Severity Typical use
UObject::IsDataValid Project-defined validation implemented directly on the asset type. Error or warning, depending on the returned issues. Missing references, invalid configuration, project-specific quality rules.
Blueprint parent-class check Blueprints with a missing ParentClass. Error Broken inheritance chains after refactors or deleted native classes.
Blueprint compile status BS_Error Blueprints. Error Compile failures and common broken-reference cases.
Asset name regex Name match against Asset Name Pattern. Warning Enforcing project naming conventions before assets spread.
Texture size guideline Largest dimension above Max Recommended Texture Dimension. Warning Spotting oversized textures before content bloat gets normalized.

Example output

Validation: 2 errors, 1 warning
- /Game/Blueprints/BP_Door :: Blueprint has compile errors or broken references.
- /Game/Blueprints/BP_Door :: Blueprint is missing its parent class.
- /Game/Textures/T_MasterWall :: Texture exceeds the SyncShield size guideline (8192 > 4096).
Important Engine Limitation

Unreal exposes observation hooks for package pre-save events, but SyncShield does not currently own a universal hard-cancel path for every native editor save route. In practice: SyncShield actions can block on validation errors; native Unreal save paths still surface warnings, not guaranteed vetoes.

Team Presence

Team Presence adds lightweight collaboration awareness without a server. Each active editor writes a JSON heartbeat that lists currently open assets and a short recent-save trail. Other editors read those heartbeat files and summarize the team state in the SyncShield tooltip.

The design goal is deliberately minimal: enough context to avoid stepping on each other, without turning the plugin into a separate collaboration platform.

  • Heartbeat files are written to a shared sidecar folder.
  • Expired sessions are ignored based on the presence timeout.
  • The current UI surface is summary-oriented: teammate count, remote open asset count, and latest remote save note.

Presence topology

Editor A Open: BP_Door Saved: BP_Lever .syncshield/presence alice_ws-01_GUID.json bob_ws-07_GUID.json Writers update heartbeats Readers summarize live sessions Editor B Open: MAP_Main Saved: MAT_Trim

Folder example

RepoRoot/
|- .git/
|- .syncshield/
|  \- presence/
|     |- alice_ws01_76F4B1....json
|     \- bob_ws07_C30A5E....json
\- SyncShieldDev/

Heartbeat example

{
  "sessionId": "76f4b10f2f6841f981ca3b2f14b7b1d0",
  "userName": "alice",
  "machineName": "WS-01",
  "projectName": "SyncShieldDev",
  "heartbeatUtc": "2026-03-11T20:22:18Z",
  "openAssets": [
    "/Game/Blueprints/BP_Door",
    "/Game/UI/WBP_PauseMenu"
  ],
  "recentSaves": [
    {
      "packageName": "/Game/Blueprints/BP_Lever",
      "savedAtUtc": "2026-03-11T20:21:46Z"
    }
  ]
}
Current UI Surface

Presence is currently exposed as tooltip and status-summary text, not as in-editor avatars, per-asset badges, or a dockable teammate browser. The sidecar format is already in place for those later UI layers.

Save Profiles

Unreal normally pushes developers toward an awkward binary choice: save everything or work through a raw package list. SyncShield introduces named save profiles so common save intent becomes a single menu action.

Each profile still flows through the same safety pipeline: collect eligible packages, validate them, snapshot their current on-disk state, then save what remains allowed.

Profile matrix

Profile What it targets Best use case Notes
Save All All dirty packages collected by the editor. Full checkpoint before submit or engine restart. Most comprehensive, highest chance of hitting validation or checkout friction.
Save Blueprints Dirty content packages whose root asset is a UBlueprint. Gameplay scripting passes, Blueprint compile cleanup. Skips maps and non-Blueprint content assets.
Save Current Level The active world package plus dirty external packages attached to that world. Level-editing sessions, lighting or layout passes. Keeps unrelated content churn out of the save.
Save Recent Assets Dirty packages touched inside the configurable recent window. Fast “checkpoint what I just changed” habit. Driven by package dirty/save timestamps tracked by SyncShield.

Blueprint sprint

You are iterating on gameplay classes and widget logic.

Use: Save Blueprints. This avoids unrelated map or texture churn while still running validation and history capture on the exact packages you care about.

Map polish pass

You are adjusting actors, level scripts, and world-partition sidecars.

Use: Save Current Level. This keeps the save scoped to the world you are actively editing.

Short checkpoint

You made a burst of edits and want a quick recoverable save without paying for a broad save pass.

Use: Save Recent Assets. The recent window defaults to 15 minutes and is adjustable.

Selective save breaks the binary workflow

Stock Unreal model Save all or manually pick from a package list SyncShield model Save All Save Blueprints Save Current Level Save Recent Assets intent-aware menu actions

Conflict Sentinel

Merge conflicts on Blueprints are notoriously painful. Conflict Sentinel runs a continuous background check to catch these collisions before you even save.

When you have an asset open and dirtied, SyncShield silently polls the remote Git tracking branch. If a teammate pushes a modification to that exact asset, you receive an immediate, high-priority warning toast.

Collision Avoidance

When the Sentinel fires, it means your local changes will conflict if you commit them. You should immediately coordinate with your teammate or stash your changes to review theirs.

Detection Flow

Local Editor Dirty: BP_Player Working... SyncShield Core diff HEAD..@{u} Matches dirty assets? YES -> Trigger Alert Remote Repo Pushed: BP_Player (By teammate)

Safe Branch Shifter

Switching Git branches while the Unreal Editor is open frequently causes memory corruption, ghost references, or outright crashes because the files change on disk beneath the engine.

The Safe Switch Branch menu handles the transition flawlessly. It protects your unsaved data, forcefully closes all vulnerable asset editors, performs a clean checkout, and lets the Asset Registry hot-reload safely.

  • Dirty Protection: Intercepts you if you have unsaved assets before switching.
  • Editor Lockdown: Triggers CloseAllAssetEditors() to purge active memory locks.
  • Dynamic Menu: Automatically populates with your current local Git branches.

Crash-Free Checkout

1. Intent

Select a target branch from the SyncShield Git toolbar menu.

2. Intercept

If dirty assets exist, you are prompted to Save or Discard via the Strict File Locking pipeline.

3. Lockdown

All floating Blueprint and Asset Editor windows are forcefully closed, removing memory locks on the .uasset files.

4. Checkout

SyncShield executes a clean headless Git checkout. The Unreal Asset Registry hot-reloads the changes safely.

Source Control

The original SyncShield source-control layer is still intact. The plugin still probes Git and Plastic SCM directly, still surfaces degraded states in the toolbar, and still gates risky sync commands when the project is dirty or the repository state is unsafe.

The major upgrade adds save-safety systems around that core rather than replacing it. In practice, SyncShield now answers two different questions at once: “is my repository state healthy?” and “is this specific save safe to perform?”

Provider support

Setup Detected by Toolbar behavior What remains available
Git git rev-parse and git status --porcelain=v2 -b Shows branch, ahead/behind, conflicts, unsaved assets, and Git actions. Fetch, Auto Fetch, Pull (Rebase), Push, Submit Content, save profiles, history, validation.
Plastic SCM cm getworkspacefrompath, workspaceinfo, and status Shows workspace branch context, login-required state, pending changes, and update action. Update Workspace, Submit Content, save profiles, history, validation, presence.
No provider or no repo No CLI found, or no repo/workspace root discovered. Toolbar degrades to SCM Missing or No SCM Repo while still keeping unsaved-asset visibility. Save profiles, history, Smart Auto-Save, validation, and presence still work locally.

Checkout and locking behavior

Setup Checkout model What SyncShield does before saving Result
Git without locking No meaningful checkout operation. If files are read-only but the provider cannot checkout them, SyncShield clears the read-only flag and bypasses the checkout prompt. Avoids the Unreal “Check Out Selected” dead-end on plain Git workflows.
Git with lock-aware provider Checkout / lock support available. SyncShield requests checkout for eligible packages and blocks packages reported as checked out by someone else. Preserves lock-aware team workflows.
Plastic SCM Native checkout model supported. SyncShield lets the provider handle checkout and blocks packages locked by other users. Consistent with centralized lock workflows.
No source control None SyncShield saves locally without a provider preflight. Recovery features still protect against bad saves even in solo local projects.

Command gating

Git actions

  • Fetch requires Git active, client available, repo found, and no status-command failure.
  • Pull (Rebase) additionally requires upstream configured, Behind > 0, a clean working tree, and no unsaved assets.
  • Push additionally requires upstream configured, Ahead > 0, Behind == 0, a clean working tree, and no unsaved assets. On success, locally-held LFS locks are released automatically.

Plastic action

  • Update Workspace requires Plastic active, client available, workspace found, valid authentication, clean workspace, and no unsaved assets.
  • If the provider is in Login Required or Status Error, update remains blocked.
  • Submit Content opens Unreal's native source-control check-in window. On Git with LFS, locally-held locks are released automatically after a successful check-in.
  • Unlock LFS Files is enabled when Git LFS is detected and local locks are held. It releases all locks after a confirmation dialog.

Git LFS Locks

Git LFS file locking prevents two developers from editing the same binary asset simultaneously. SyncShield 0.6 adds first-class lock management so you never have to leave the editor to release orphaned locks.

How LFS locking works

When lockable is set in .gitattributes, LFS-tracked files are made read-only on disk. A developer must explicitly git lfs lock a file before editing it, and git lfs unlock when done. Locks are server-side and enforced globally, not per-branch.

Prerequisite

LFS locking requires a Git LFS server that supports the locking API (GitHub, GitLab, Gitea, Bitbucket, etc.) and the lockable attribute in your .gitattributes. SyncShield ships with lockable already set for *.uasset and *.umap.

What SyncShield does with LFS locks

Feature Trigger What happens
Lock detection Every SCM status poll SyncShield runs git lfs locks --local to discover locally-held locks and displays the count and file list in the toolbar tooltip.
Auto-unlock after Push Successful git push After a push completes, SyncShield queries local locks and runs git lfs unlock for each one. Success and failure counts are reported via toast.
Auto-unlock after Submit Submit Content (check-in) completes If LFS locks were held before the check-in, SyncShield releases them automatically afterward.
Manual Unlock LFS Files User clicks the menu action Shows a confirmation dialog listing all locked files, then releases each lock individually. Enabled only when Git is active, LFS is detected, and locks exist.

The orphaned lock problem

A common misconception is that git push automatically releases LFS locks. It does not. Without SyncShield, locks acquired during editing persist on the server indefinitely until someone manually runs git lfs unlock from the command line. This blocks teammates from editing those files even after you have pushed your changes.

SyncShield solves this by automatically releasing locks after push and check-in, and by providing a manual unlock action as a safety net.

Force Unlock

SyncShield only unlocks locks held by the local user. It does not force-unlock locks held by other developers. If you need to override a teammate's lock, use git lfs unlock --force <path> from the command line.

Cross-Branch Locking

A common question is whether SyncShield only protects developers on the same branch, or whether it can prevent two developers on different branches from modifying the same asset simultaneously. The answer depends on the source control provider.

How SyncShield detects locks

SyncShield does not implement its own locking mechanism. It delegates entirely to Unreal Engine's ISourceControlProvider API, specifically the IsCheckedOutOther() and CanCheckout() methods on each package's cached state. What SyncShield sees depends on what the underlying provider reports.

Provider comparison

Provider Lock scope Cross-branch protection What SyncShield does
Git + LFS Locking Server-side, branch-agnostic Yes When Developer A locks Hero.uasset on feature-A, Developer B on feature-B sees it as locked. SyncShield shows Locked (N) in the toolbar, fires the "LOCKED by Teammate" toast on asset open, and blocks the file from SyncShield-driven saves.
Plastic SCM Workspace-global, not branch-scoped Yes Plastic's cm lock is visible across workspaces regardless of branch. UE's Plastic plugin reports IsCheckedOutOther() correctly. Same protections apply as Git + LFS.
Plain Git (no LFS locking) No file-level locks exist No Without LFS locking, Git has no concept of file-level locks. IsCheckedOutOther() always returns false. SyncShield cannot detect concurrent edits. Conflicts are only discovered at merge time.
No source control N/A N/A No provider to query. SyncShield's local features (history, validation, save profiles) still work, but there is no lock awareness.

What this means for teams

With LFS locking or Plastic SCM

SyncShield provides full cross-branch asset protection. Developers working on different branches will see lock warnings, get toast alerts when opening locked assets, and have locked files blocked from saves. The lock is enforced server-side, so it works regardless of which branch each developer is on.

Without file-level locking

SyncShield still provides all of its local safety features (history snapshots, validation, save profiles, conflict sentinel, branch shifting) but cannot warn about concurrent edits from other developers. If cross-branch asset protection is important to your team, enable Git LFS locking.

Enabling Git LFS locking

If your repository uses Git LFS but does not yet have locking enabled, add the lockable attribute to your .gitattributes:

*.uasset filter=lfs diff=lfs merge=lfs -text lockable
*.umap filter=lfs diff=lfs merge=lfs -text lockable

SyncShield 0.6 ships with this configuration by default. After adding lockable, tracked files become read-only on disk until explicitly locked with git lfs lock <file>. UE's built-in Git plugin and SyncShield will then surface lock state through the standard checkout and lock UI paths.

Key Insight

Git LFS locks and Plastic SCM locks are branch-agnostic by design. A lock on feature-A blocks edits on feature-B, main, or any other branch. This is the correct behavior for binary assets like .uasset files, which cannot be merged.

Storage Layout

The upgrade introduces three important storage areas. Two live under the project's Saved directory and stay local by default. The presence sidecar lives near the repository root so multiple editors can see it.

Directory map

RepoRoot/
|- .git/ or .plastic/
|- .syncshield/
|  \- presence/
|     \- user_machine_session.json
\- Project/
   \- Saved/
      \- SyncShield/
         |- History/
         |  \- Game/...
         \- ShadowAutoSaves/
            \- Game/...
Location Purpose Retention model Source-control guidance
.syncshield/presence Per-session JSON heartbeat files for live editor presence. Transient by session expiration and editor shutdown. Add it to ignore rules if the repository is shared. It is collaboration metadata, not content.
Saved/SyncShield/History Pre-save snapshots and metadata for local restore history. Per-asset pruning based on Max Snapshots Per Asset. Already covered by the common Unreal practice of ignoring Saved/.
Saved/SyncShield/ShadowAutoSaves Incremental shadow auto-save copies. Per-asset pruning based on Max Shadow Snapshots Per Asset. Keep local only. These are operational backups, not authoritative content.
Ignore Recommendation

If your repository does not already ignore it, add .syncshield/presence/ to source control. The project already ignores Saved/, which is usually sufficient for the history and shadow-save folders.

Settings

SyncShield settings live under Editor Preferences -> Plugins -> SyncShield. The plugin uses editor-per-project user settings, which means the values are intended to be tuned per project and per workstation rather than shipped as gameplay data.

Setting Default Category What it controls
Dirty Check Interval Seconds5.0StatusHow often SyncShield re-checks dirty asset count.
Status Poll Interval15.0Source ControlHow often Git/Plastic status is refreshed.
Auto FetchfalseSource ControlEnables periodic Git fetch in the background.
Auto Fetch Interval120.0Source ControlSeconds between automatic Git fetch operations.
Toast On Status ChangetrueNotificationsShows status transition toasts in the editor.
Status Toast Min Interval4.0NotificationsMinimum spacing between state-change toasts.
Enable Local Save HistorytrueLocal Save HistoryTurns pre-save snapshot capture on or off.
Max Snapshots Per Asset20Local Save HistoryMaximum retained snapshots for each asset or map.
Enable Smart Auto-SavetrueSmart Auto-SaveTurns incremental shadow auto-save on or off.
Shadow Save Interval30.0Smart Auto-SaveSeconds between background shadow-save attempts.
Include MapstrueSmart Auto-SaveAllows dirty map packages into the shadow-save queue.
Include Content AssetstrueSmart Auto-SaveAllows dirty non-map content packages into the queue.
Max Shadow Snapshots Per Asset5Smart Auto-SavePer-asset retention cap for shadow saves.
Enable Pre-Save ValidationtruePre-Save ValidationEnables validation scanning and passive warnings.
Run UObject Data ValidationtruePre-Save ValidationCalls project-defined IsDataValid rules.
Block SyncShield Save Actions On ErrorstruePre-Save ValidationRemoves erroring packages from SyncShield save actions.
Asset Name Pattern^[A-Z]{1,4}_[A-Za-z0-9_]+$Pre-Save ValidationRegex used for naming-convention warnings.
Max Recommended Texture Dimension4096Pre-Save ValidationLargest recommended texture dimension before warnings appear.
Enable Team PresencetrueTeam PresenceTurns heartbeat file sharing on or off.
Heartbeat Interval5.0Team PresenceSeconds between local heartbeat writes.
Presence Expiration20.0Team PresenceHow long remote heartbeats remain considered live.
Recently Touched Window15Save ProfilesMinute window used by Save Recent Assets.
Tuning Advice

If your project has very large maps or many frequently dirtied assets, start by increasing the Smart Auto-Save interval before disabling the system entirely. The feature is designed to trade a large hitch for small periodic writes.

Workflow Playbooks

The upgraded SyncShield stack is most valuable when used deliberately. These playbooks show how the subsystems combine in real editing sessions.

Solo recovery loop

Edit normally. Smart Auto-Save quietly writes shadow copies over time.

Run a SyncShield profile. Validation catches obvious breakage before write.

Bad save slips through. Use Restore Latest Snapshot on the active asset editor.

Resume work. History gives you a local escape hatch even if Git was never committed.

Team sync loop

Read the tooltip summary. Presence shows teammate activity and latest remote save notes.

Save with intent. Use a profile that matches the current task instead of broad save spam.

Respect locks. Locked assets are blocked from SyncShield-driven saves when the provider reports them.

Sync only when clean. Pull, Push, or Update Workspace stay disabled until unsaved work is resolved.

Large map session

Focus on the active world. Use Save Current Level for periodic checkpoints.

Let Smart Auto-Save distribute writes. One dirty package is shadow-saved per interval.

Check validation before submit. Run Validate Dirty Assets if you want a dry run without saving.

Take a final broad save. Use Save All when the session is stable and ready to checkpoint.

Current Limits

The upgraded build is materially more capable, but it still has deliberate scope limits. Those are worth understanding up front so you do not over-assume what the plugin guarantees.

Area Current implementation Not in this build
Local Save History Automatic pre-save snapshots with Restore Latest Snapshot for the active asset. No full timeline browser, diff UI, or snapshot picker yet.
Validation Can block SyncShield save actions on errors and can show passive warnings on observed pre-saves. No universal hard block for every native Unreal save path.
Presence JSON heartbeats plus tooltip/status summaries of remote activity. No avatars, per-asset badges, or dedicated presence panel.
History restore Restores the latest snapshot for the active asset editor. No bulk restore, compare view, or multi-snapshot chooser.
LFS lock management Auto-unlock after push/check-in, manual unlock menu action, local lock detection and tooltip display. No force-unlock of other users' locks from the UI. No automatic git lfs lock on asset open.
Cross-branch protection Full lock visibility when the provider supports it (Git + LFS locking, Plastic SCM). No protection on plain Git without LFS locking. SyncShield cannot invent a lock mechanism where the SCM has none.

Troubleshooting

Symptom Likely cause What to do
SCM Missing is shown SyncShield could not find Git or Plastic SCM CLI. Install the relevant CLI and restart the editor. Local history, validation, and save profiles still work meanwhile.
No SCM Repo is shown The project is not inside a Git repository or Plastic workspace root. Initialize the repo/workspace or continue using SyncShield in local-only mode.
Restore Latest Snapshot is disabled No active asset editor is known, or no history snapshot exists yet for that package. Open the asset in an editor tab, make sure it has been saved at least once with Local Save History enabled, then try again.
I do not see any history files The asset may never have been saved before, Local Save History may be disabled, or only autosave/procedural saves occurred. Verify Enable Local Save History is on, then perform a normal save through SyncShield or the editor and inspect Saved/SyncShield/History.
Smart Auto-Save is not creating files Feature disabled, no dirty packages, PIE/Simulate active, or package type excluded. Check the Smart Auto-Save toggles, wait longer than the configured interval, and confirm you are not in PIE or Simulate.
Validation warnings appear, but a native save still completes You saved through a native Unreal path that SyncShield can observe but not universally veto. Use SyncShield save actions for blocking enforcement. Treat native-path warnings as advisory in the current build.
Team Presence is not showing teammates Heartbeat sidecar not shared, teammates expired, or presence disabled on one side. Confirm both editors can read the same repo-root .syncshield/presence folder and check heartbeat/expiration settings.
Presence files ended up in source control The repo does not ignore .syncshield/presence/. Add that path to ignore rules and remove any accidentally tracked presence files.
LFS lock icon persists after push Git push does not automatically release LFS locks. The lock remains on the server. SyncShield 0.6 auto-unlocks after push. If you are on an older build, use git lfs unlock <file> manually or update to 0.6.
Unlock LFS Files is disabled Either Git LFS is not detected in the repo, or no locally-held locks exist. Verify LFS is initialized (git lfs install), that .gitattributes contains lockable, and that you actually hold locks (git lfs locks --local).
Teammate's lock not visible Plain Git without LFS locking has no file-level lock mechanism. IsCheckedOutOther() returns false. Enable Git LFS locking by adding lockable to .gitattributes. See Cross-Branch Locking.
Check Out Selected is greyed out on Git Git without locking support does not offer a real checkout path. Current SyncShield builds bypass that dead-end by clearing read-only flags when checkout is unsupported. If you still see it, confirm you are on the updated build and not using a stale binary.
Pull, Push, or Update Workspace is disabled The tree is dirty, unsaved assets exist, upstream/auth is missing, or the repo is in a blocked state. Save assets first, clean the working tree, resolve conflicts, confirm upstream/login, then retry.

FAQ

Does SyncShield replace Git or Plastic desktop clients?

No. SyncShield gives you in-editor awareness and a few guarded repo actions, but it is not a full repository browser, branch manager, or history client.

Fastest way to recover from a broken Blueprint save?

Open the asset, then use Restore Latest Snapshot. That restores the most recent local pre-save copy SyncShield captured for the active asset editor.

Does SyncShield capture every keystroke?

No. History snapshots are taken on real package save events, and Smart Auto-Save writes periodic shadow saves on an interval. It is not a keystroke recorder.

Can I disable some of the new systems?

Yes. Local Save History, Smart Auto-Save, Pre-Save Validation, and Team Presence each have their own enable toggle in SyncShield settings.

Does Team Presence require a server?

No. The current implementation uses shared JSON heartbeat files in .syncshield/presence. If teammates can all see that folder, presence works.

Will Smart Auto-Save clear the dirty flag?

No. Shadow saves use SAVE_KeepDirty, so the original package remains dirty until you intentionally save it.

Why is the toolbar label still SCM-focused?

The toolbar is still the plugin's anchor surface for repository state, and the new subsystems currently flow into its menu and tooltip summaries rather than replacing the label entirely. A broader save-centric shell is a likely next UI step.

Can SyncShield validate naming conventions?

Yes. The Asset Name Pattern regex setting produces warnings when asset names fall outside your configured convention.

Does SyncShield require Git LFS locking?

No. SyncShield works with plain Git, Git plus locking, Plastic SCM, or no source control. Lock-aware setups simply give it more information for checkout blocking and cross-branch protection.

Why did I see a Check Out Assets dialog with a greyed-out button?

That is the classic Unreal checkout path colliding with Git setups that do not support checkout. Current SyncShield builds detect that case and bypass the prompt where possible by clearing read-only flags before save.

If two developers work on different branches, will SyncShield prevent both from editing the same asset?

Yes, if your repository uses Git LFS locking or Plastic SCM. Both systems enforce locks server-side and branch-agnostically. Without file-level locking (plain Git), SyncShield cannot detect concurrent edits across branches. See Cross-Branch Locking.

Does git push automatically release LFS locks?

No. This is a common misconception. git push does not call git lfs unlock. SyncShield 0.6 solves this by automatically releasing all locally-held locks after a successful push or check-in. You can also manually release locks via the Unlock LFS Files menu action.

Which UE versions does SyncShield support?

SyncShield 0.6 ships Fab-ready builds for both UE 5.6 and UE 5.7. The 5.6 build uses a compatible API fallback for save-context detection.

About

SyncShield is a UE 5.6 / 5.7 editor plugin focused on sync protection, recovery, and visibility. The current build combines repository awareness with local versioning, incremental backup saves, project validation hooks, Git LFS lock management, lightweight teammate presence, and intent-aware save profiles.

This manual reflects SyncShield 0.6, compiled against both UE 5.6 and UE 5.7 on March 16, 2026.

Build OK

Compiled Successfully

The plugin build completed successfully against the local editor target after the subsystem upgrade.

UE 5.6 / 5.7

Target Engines

SyncShield 0.6 ships Fab-ready builds for both UE 5.6 and UE 5.7, with automatic API compatibility for both engine versions.

Next UI Gains

Likely Follow-Ons

Timeline browsing, richer presence visuals, and a more save-centric toolbar shell are the obvious next interface expansions.

Budapest, HU

GregOrigin

Created by Andras Gregori @ Gregorigin, a single dad currently based outside Budapest, HU.

"Building tools that empower creators to shape worlds."