The Absolute State of Unreal Engine Version Control
Unreal Engine is a marvel of real-time rendering, virtualized geometry, and compiled C++
wizardry. It is also paired with the most violently hostile version control workload known to
modern computing: hundreds of gigabytes of opaque, unmergeable, binary .uasset
files that mutate every time a level designer sneezes near a viewport.
For twenty years, game development has treated version control like an inescapable hostage situation. You either duct-tape Git until it explodes, or you pay tribute to Perforce like a medieval toll booth operator. Let's look at why both options are technically bankrupt for modern Unreal projects—and what actually replaces them.
Exhibit A: The Git + Git LFS Delusion
Inevitably, someone on the team who spent five years writing React apps suggests: "Why don't we just use Git? It's free and everyone knows it!"
Git was written in 2005 to diff 50-line patches of C code on the Linux kernel mailing list. It
assumes files are UTF-8 text, changes are human-readable line insertions, and full repository
history should fit in your laptop's RAM. Point Git at a 4 GB .umap containing
Lumen lighting caches and Nanite meshes, and its packfile delta compression immediately surrenders.
"Ah," the web developer replies, "that's what Git LFS is for!"
Git LFS is not a binary version control system; it is a magic trick that swaps your real files for 130-byte text pointer files holding SHA-256 hashes. It pushes the actual binary payload to a secondary HTTP server over an out-of-band sidecar protocol. Here is what that means in practice:
- Whole-blob deduplication: If an artist changes one integer variable in a 300 MB Blueprint, Git LFS calculates a new SHA-256 hash and uploads a brand-new 300 MB blob. There is zero byte-level delta compression. Your remote storage bill explodes linearly with every tiny tweak.
-
Merge conflict roulette: Two developers touch
BP_PlayerCharacter.uasseton different branches. When they merge, Git happily announces:Binary files differ. There is no 3-way merge. Unreal's Blueprint visual diff tool can show you what changed, but it cannot merge them. One person's entire afternoon goes directly into the recycling bin. - Bandwidth extortion: GitHub and GitLab charge extortionate bandwidth egress fees every time CI/CD pulls your assets or an artist runs a fresh checkout.
- Pointer desync hell: A junior engineer clones without the LFS smudge filter configured correctly, commits the literal pointer text files into the tree, and breaks the entire team's editor on Monday morning.
Exhibit B: Perforce Helix Core (The 1990s Tollbooth)
When Git collapses, studios retreat to Perforce Helix Core. Perforce solves the binary conflict
problem with a sledgehammer: exclusive checkout locking. If you want to edit a file, you
ask the central server to mark it read-write via p4 edit so nobody else can touch it.
It works, the same way a horse and buggy works: reliably, slowly, and with a lingering smell of the late 1990s.
-
Every operation is a server round-trip: Want to open a file? Talk to the server. Want to
revert? Talk to the server. Offline work on an airplane or a spotty hotel VPN is an exercise in
misery. If you edit a file without asking Perforce first, you get to run
p4 reconcileand wait for a 500,000-file filesystem scan. - Headcount tax: Past a tiny 5-user free tier, Perforce charges hundreds of dollars per seat, every year. A contractor who checks in one voice line a month costs your studio the exact same seat license as your lead technical director.
- Zero local branching: In Git, branching is instantaneous and local. In Perforce, streams are heavyweight, server-bound constructs that require administrative ceremonies and depot-wide state tracking.
- Proprietary black box: Closed-source server, closed wire protocol, and an on-disk format relying on MD5 hashes (which have had practical cryptographic collision attacks since 2004).
What Epic Games Built When They Got Sick of Both
Epic Games develops Unreal Engine and ships Fortnite. They know the agony of moving 100 GB Unreal projects across distributed teams better than anyone on earth. So they did what any rational engine developer would do: they wrote an open-source VCS specifically for games.
It is called lore (originally Unreal Revision Control / URC). It throws out both the text-centric assumptions of Git and the client-server shackles of Perforce.
Here is the actual engineering difference under the hood:
-
Content-Defined Chunking (CDC): lore doesn't hash whole files (like Git LFS) or compare whole
files (like Perforce). It breaks large
.uasset,.umap, and texture binaries into variable-sized fragments using content-defined chunking, keyed by cryptographic BLAKE3 hashes. When you change a tiny part of a 2 GB level file, lore stores and transmits only the modified fragments. -
Local-first workflow: Staging (
lore stage), committing (revisions), and branching (partitions) happen entirely on your local machine with zero network traffic. - High-performance QUIC transport: lore streams binary data over encrypted QUIC/UDP, bypassing TCP head-of-line blocking and saturating high-bandwidth gigabit pipes without stalling.
- Permissive MIT License: Clean, documented, open-source Rust codebase—no per-seat license extortion, no vendor lock-in.
The Honest Caveat: Where Lore is Today
We build managed lore infrastructure, so we have every incentive to hype it up. But we believe in stating technical limits plainly:
Enforced file locks are still an upstream TODO. lore currently supports advisory locking (you can query who is working on a file), but the server push path does not hard-reject a push on a locked file yet. If your studio's survival hinges on hard server-enforced locks over binary art, Perforce still has that one edge (see our capabilities reference for exact details).
Hosted Lore: Version Control Without the Server Ops
The lore client is free and open source. The problem is running the server: sparse ext4 storage volumes, loop mounts, QUIC port routing, automated TLS certificates, and NVMe disk quotas.
That is what folkorama does. We give your studio a dedicated, private lore server on its own
subdomain with hard disk caps, isolated storage, and zero per-seat licensing fees. You point the
standard lore CLI at your workspace and get back to building games.
Ready to move your project? Check our step-by-step guides for Migrating from Git LFS and Migrating from Perforce, or compare the licensing math in Shopping for a Perforce alternative.