Repository navigation
Configuration
Drop a .ueclean.json next to a .uproject to override the global defaults for that project. It's safe to commit to a repo so a team shares one policy.
{
"enabled": true,
"min_age_days": 30,
"min_free_gb": 100,
"keep_binaries_for_cpp": true,
"targets": ["intermediate", "plugin_intermediate", "ddc", "cooked", "staged", "logs", "crashes"]
}| Key | Default | Meaning |
|---|---|---|
enabled |
true |
false opts the project out of cleanup entirely. |
min_age_days |
14 |
Days since last real activity (see Safety-Model on how freshness is measured) before this project is eligible. |
min_free_gb |
100 |
Free-space threshold that triggers a cleanup pass. 0 makes age the sole trigger. |
keep_binaries_for_cpp |
true |
Keep Binaries on C++ projects even when otherwise eligible. |
targets |
see below | Which reclaimable locations are in play for this project. |
| Key | Path | Default |
|---|---|---|
intermediate |
Intermediate |
on |
plugin_intermediate |
Plugins/*/Intermediate |
on |
binaries |
Binaries |
on |
plugin_binaries |
Plugins/*/Binaries |
on |
build |
Build |
on |
ddc |
DerivedDataCache |
on |
cooked |
Saved/Cooked |
on |
staged |
Saved/StagedBuilds |
on |
logs |
Saved/Logs |
on |
crashes |
Saved/Crashes |
on |
autosaves |
Saved/Autosaves |
on, but gated at 90 days regardless of min_age_days
|
saved_config |
Saved/Config |
off — opt-in, costs your editor layout |
An unrecognized key in targets is a hard error, not a silent no-op — a typo can't quietly disable a protection you thought you had.
Content, Source, Config, the Plugins directory itself, and Saved/SaveGames cannot be added to targets — they aren't in the target table at all, so there's no key that would reach them. See Safety-Model.
The "Never clean this" button in custodian.gui writes {"enabled": false} for you — see GUI.
custodian.gui has a "Clean targets (N/12)…" button next to "Never clean this" — checkboxes for the same keys above, applied as the default for any project that doesn't have its own .ueclean.json. A project's own file still wins over the GUI's selection, same layering as everything else here. Use the file when you want a policy that travels with the repo; use the GUI button for a one-off "just Intermediate this time" pass.