What Are .uasset Files (And Why They Make Version Control Hard)

If you've worked with Unreal Engine for more than a day, you've seen them. Open your project folder in Windows Explorer and there they are: hundreds, maybe thousands of .uasset files. Materials, blueprints, textures, meshes, data tables – all stored in this format.
But what actually is a .uasset file? And why does it cause so many headaches when teams try to collaborate?
.uasset: Unreal’s primary asset container
A .uasset file is Unreal Engine's proprietary binary format for storing assets. When you create a material in the editor, it becomes a .uasset. When you build a blueprint, .uasset. Import a texture? The engine converts it and stores metadata as – you guessed it – a .uasset.
The format is binary, not text. Open one in Notepad and you'll see gibberish. This is by design: binary formats are faster to load and more compact than human-readable alternatives. For the engine, this is great. For version control, it creates problems.
Why binary files break traditional version control
Text-based version control (like Git was designed for) works by comparing lines. Change line 47 in a code file, and Git knows exactly what happened. Two people edit different lines? Git merges them automatically. Same line? You get a conflict, but at least you can see both versions and decide.
Binary files don't have "lines." They're just streams of bytes. When two people modify the same .uasset file, version control systems see two completely different blobs. There's no automatic merge. There's no helpful diff showing what changed. You just get: "conflict – pick one."
In a basic Git workflow, this usually means one person’s work gets thrown away.
What's actually inside a .uasset
Even though you can't read them directly, .uasset files contain structured data:
- Asset metadata – name, type, tags, references to other assets
- Serialized properties – every setting you configure in the editor
- Binary data – for textures, meshes, audio, the actual content
- Dependency information – what other assets this one needs
The complexity varies wildly. A simple material might be a few kilobytes. A detailed blueprint with hundreds of nodes could be several megabytes. A high-resolution texture with mipmaps can easily reach tens of megabytes.
The real problem: blueprints
Static assets like textures aren't usually the issue. You import them, maybe adjust settings, and they rarely change. The collision happens with living assets – things that evolve throughout development.
Blueprints are the worst offender. They're where gameplay logic lives. Multiple people often need to work on them. And they change constantly.
When a blueprint conflict happens with basic Git, your options are:
- Keep your version, lose your teammate's work
- Keep their version, lose your work
- Both of you manually re-do the changes on one version
None of these are good.
How teams work around this
Most Unreal teams adopt some combination of:
File locking – Only one person can edit a file at a time. Perforce does this. It works, but creates bottlenecks. Need to make a quick fix to a blueprint someone else has locked? Too bad, wait for them.
Communication – "Hey, I'm working on BP_PlayerCharacter, don't touch it." Works for small teams, breaks down fast.
Splitting assets – Instead of one big blueprint, create many smaller ones. More files, more overhead, but fewer conflicts.
Accepting the pain – Just... deal with lost work occasionally. Sadly common.
What actually helps
The version control system you use matters. Tools that understand binary files – that can lock intelligently, warn you before conflicts happen, and actually help merge when possible – make a real difference.
Diversion was built with this problem in mind. The conflict prevention system notifies you when a teammate is editing a file before you open it, so conflicts get prevented rather than resolved. And for blueprints specifically, Diversion integrates with Unreal’s built-in Blueprint merge tool, allowing visual merges when Unreal can safely reconcile the changes.
It won't make .uasset files magically become text. But it makes working with them as a team significantly less painful.