Source control built for Unreal Engine 5
Unreal Engine 5 changed what version control has to survive. One File Per Actor turned one level file into thousands. World Partition made every open world a streaming grid. Nanite made a single mesh bigger than some UE4 projects. USourceControl was built for that shape of project, not adapted to it. First commit in five minutes, every version recoverable.
What Unreal Engine 5 actually demands
One File Per Actor at scale
OFPA saves every actor to its own external .uasset. A populated World Partition level becomes thousands of small binaries. We sync only what changed, and lock at the file level, so two people editing different actors never collide.
World Partition levels
Streaming grids, data layers, and HLOD artifacts are just files to us. No depot mapping, no typemap tuning, no per-cell configuration. Commit the whole world and move on.
Nanite-scale meshes
Nanite assets carry the full-detail source geometry. Individual files reach into the gigabytes and we take them up to 5 GB each, with unlimited total storage on every plan.
Blueprint locking
Blueprints are still binary in UE5 and still cannot be merged. Lock one before you edit and teammates see it instantly. If something slips through, roll back in one click.
Built for many small files
OFPA is where Git LFS starts to hurt: thousands of tiny binaries means thousands of pointer files and a slow index. We move 25,000 files in a single commit without complaint.
UE5.0 through 5.7
We operate on files, not engine internals, so every UE5 release works the same way. UE4 and custom engine forks work too.
Package and publish it
The desktop app packages your UE5 project with your own engine install and uploads it to Steam, the Epic Games Store, or itch.io. Every build records the commit it came from. On every plan, Free included.
One File Per Actor is a source control feature
OFPA exists for one reason, and Epic's own documentation says it plainly: actors save into their own external files so you do not have to check out the level file to change something inside it. That frees the level for everyone else on the team. It is enabled by default with World Partition, which means if you are building an open world in Unreal Engine 5, you are already running a workflow designed around source control granularity. The catch is what it does to your repository. A single populated level becomes a __ExternalActors__ directory holding thousands of small .uasset files, each one binary and unmergeable. Git LFS handles this badly: every actor file needs a pointer, the index bloats, and status operations slow to a crawl. Perforce handles it well, which is exactly why Perforce remains the AAA default, but you need a server and an admin to get there. USourceControl treats many-small-binaries as the normal case. Sync moves only the files that actually changed, locking is per-file so two people editing different actors in the same level never block each other, and there is no server for you to run.
What World Partition changes about commits
Before World Partition, a level was one enormous .umap and collaboration meant taking turns. Now the level is a streaming grid, actors live in their own files, and HLOD and data layer artifacts are generated alongside them. The good news is that genuine parallel work on one world finally became possible. The awkward news is that your commits now touch hundreds of files at a time and your version control needs to not care. We commit up to 25,000 files at once and sync only deltas afterward. Generated HLOD output can be excluded per project if you would rather rebuild it than version it, or committed if your team wants byte-identical builds across machines. Both are one setting.
Nanite, Lumen, and asset sizes that broke the old assumptions
Nanite meshes ship with their full-detail source geometry rather than hand-authored LODs, so individual assets that would have been 40 MB in UE4 now land in the hundreds of megabytes or beyond. Virtual textures and high-resolution Lumen-lit environments push in the same direction. Teams routinely hit Git LFS storage tiers within a couple of months. Storage and bandwidth are unlimited on every USourceControl plan, including the free one, with a 5 GB ceiling per individual file. There is no quota to monitor and no per-gigabyte line on your bill, so the size of your art budget is a creative decision rather than an infrastructure one.
Working with UE5 source alongside assets
UE5 projects mix text (C++, .ini, .json, .uplugin) with very large binaries. USourceControl handles both in one place: every file gets full per-version history you can browse and restore from, and binaries can be locked while you edit them. What we don't do is line-level diffs and pull-request review. Teams with a strong code-review culture usually keep C++ in Git and put Content in USourceControl; teams where most of the headcount is art run everything in one system. Both work, and you can change your mind later.
How it works on a UE5 project
Point it at your .uproject
Open the desktop app, create a project, and select your UE5 project root. Saved/, Intermediate/, and DerivedDataCache/ are excluded automatically.
Commit the world
Content, Config, Source, and every OFPA actor file in __ExternalActors__ upload in one commit. Large Nanite meshes go up alongside everything else.
Your team locks and ships
Teammates sync, lock the Blueprints and levels they're editing, and commit when ready. Everyone sees lock state live.
Common questions
Does USourceControl work with One File Per Actor?
Yes, and it is one of the cases we designed for. OFPA turns a level into thousands of small external .uasset files under __ExternalActors__. We sync only the files that changed and lock per file, so two people editing different actors in the same World Partition level never block each other. There is no pointer-file layer and no index to bloat.
How does it handle World Partition levels?
Streaming grids, data layers, and HLOD artifacts are ordinary files to us. There is no depot mapping or per-cell configuration to maintain. Commit the whole world in one operation and sync deltas afterward. If you would rather rebuild HLOD output than version it, exclude that folder per project.
Can it handle Nanite mesh file sizes?
Yes. Individual files can be up to 5 GB and total storage is unlimited on every plan, Free included. Nanite assets carry full-detail source geometry, so they are large by design. There is no quota to watch and no per-gigabyte charge.
Which Unreal Engine 5 versions are supported?
All of them, from UE5.0 through 5.7, plus UE4 and custom engine forks. USourceControl operates on files rather than engine internals, so an engine upgrade is not a migration.
Do I still need file locking if I use One File Per Actor?
Yes, for a different reason than before. OFPA removes the level-file bottleneck, so two people can work in the same world at once. It does not make individual assets mergeable. Blueprints, materials, and any single actor file are still binary, so if two people open the same one, someone's work is still lost. Locking is what closes that remaining gap.
Is my unreleased UE5 project kept private?
Yes. Your files are never public and never indexed. We don't sell them, advertise against them, or train any model on them. Access goes through short-lived, project-scoped signed links over TLS 1.2+, with org roles and per-project membership controlling who sees what. Every version is integrity-verified with SHA-256 and recoverable via one-click restore.
Can I package and ship a UE5 build from USourceControl?
Yes. The desktop app runs Unreal's own BuildCookRun against the engine version your .uproject asks for, stamps the version into Config/DefaultGame.ini so the build reports what you labelled it, and uploads the result to Steam, the Epic Games Store, or itch.io. It stops at uploaded rather than live, because Steam and Epic both keep that final promotion in their own portals. Included on every plan, Free included, because it runs on your machine.
How does this compare to Perforce for Unreal Engine 5?
Perforce handles UE5 well and remains the AAA default, particularly for OFPA's many-small-files pattern. The cost is a server, an admin to run it, and per-seat licensing that scales badly below enterprise volume. USourceControl targets UE5 teams without DevOps to spare. See the side-by-side on /compare/perforce.
Put your Unreal Engine 5 project somewhere safe
World Partition, OFPA, and Nanite included. From $25/user/mo, with unlimited storage and bandwidth on every plan.
Create your first project