Building an LFS SaaS for Project Management
This article is Day 23 of Unreal Engine (UE) Advent Calendar 2025 Series 3. This article is #PR.
What Do You Use for Source Control?
What do you use for Unreal Engine project source control? Git, SVN, Perforce, etc.
Git
For Git source control, you’d typically use GitHub. Regular text files have no repository size limit, but single file limit is 100MB. 3D model data often exceeds this. LFS is used to bypass this.
LFS
LFS (Large File Storage) is a Git extension that references large files as pointer files, separating the actual content.
version https://git-lfs.github.com/spec/v1
oid sha256:4cac19622fc3ada9c0fdeadb33f88f367b541f38b89102a3f1261ac81fd5bcb5
size 84977953
Downloads actual content from independent LFS server based on unique oid.

GitHub LFS is Expensive
GitHub provides this LFS system, but it’s very expensive.
https://github.com/pricing/calculator?feature=lfs

Small team with 50GB storage and 280GB monthly download costs ~4000 yen. Download pricing is abnormally high; CI/CD downloading large data can explode costs.

Even paying, single file limit is 2-5GB, somewhat restrictive.
Building LFS
https://github.com/git-lfs/git-lfs
GitLFS is fully open source with defined specs, so you can build your own.
Dentsu Research blogged about self-hosting with AWS S3: https://tech.dentsusoken.com/entry/s3-lfs-setup
Thought this could be SaaS.
candylfs
Built candylfs, an LFS SaaS. Using Cloudflare R2 instead of S3, fully serverless, nearly at-cost pricing. Downloads are unlimited and free.

Also supports Locking API. Single file limit is 10GB.
Managing UE Projects
Signup


Sign up at https://candylfs.stream/, then Create Tenant. Tenant is like GitHub org or username.
GitHub Integration


For individuals, add GitHub user ID.
- Permission: ReadOnly or Read and Write
- Token Scope: All repositories in tenant, or specific repository
- Token Expiration: Validity period of issued token

For organizations, use Add Organization to Authorize candylfs.

Then select the organization to add from the list.

- Permission: ReadOnly or Read and Write
- Allowed Teams (optional): Comma-separated Team names
- Token Scope: All repositories in tenant, or specific repository
- Token Expiration: Validity period of issued token
CLI Login
https://github.com/candylfs/candylfs-cli/releases
Download the latest CLI binary. All CLI code is public, so you can verify it yourself if concerned.

If candylfs produces output, PATH is set correctly.

Login with candylfs login <tenant id>.

Open https://github.com/login/device and enter the code.

On success:
✓ Logged in as mizuamedesu (rw)
✓ Token stored for 0 repositories in tenant: test
At this point, credentials are passed to git credential helper, enabling seamless authentication.

You can view/manage from the admin console.
Repository Setup


Create repo on GitHub, clone locally empty.

Write config files and initial commit. lfsconfig settings can be checked from web console.
.lfsconfig
url = https://lfs.candylfs.stream/<tenant-name>/<repo-name>
.gitattributes
Content/** filter=lfs diff=lfs merge=lfs -text
.gitignore
Binaries
DerivedDataCache
Intermediate
Saved
.vscode
.vs
*.VC.db
*.opensdf
*.opendb
*.sdf
*.sln
*.suo
*.xcodeproj
*.xcworkspace
Adding UE Project


Put entire UE project in initialized repo. Cache folders should be grayed out with ignore.

Push should work. Initial push may take 5-10+ minutes.
https://github.com/mizuamedesu/ue-lfs-demo
Using from CI/CD

Create from Tokens > Create Token. For CI/CD use, send arbitrary username (like hogehoge) with the issued token as password. (LFS spec uses Basic auth)
FAQ
Can I migrate from GitHub LFS?
Yes. Clone all data including LFS locally, configure lfsconfig, push.
Worried about continuity from individual service?
Commit history is managed by external services, this is just a container for content. For peace of mind, full backup via CI/CD is possible. My personal games also run on this infrastructure.
Finally
How was it? There may still be bugs, please contact [email protected] or X DM.
Also issued 25% off coupon UEQiita2025 valid until 2026/01/31.
Please use it!