UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
ConfigHierarchy.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "Misc/ConfigTypes.h"
6
7// See FConfigContext.cpp for the types here
8
10{
11 /**************************************************
12 **** CRITICAL NOTES
13 **** If you change this array, you need to also change EnumerateConfigFileLocations() in ConfigHierarchy.cs!!!
14 **** And maybe UObject::GetDefaultConfigFilename(), UObject::GetGlobalUserConfigFilename()
15 **************************************************/
16
17 // Engine/Base.ini
18 { TEXT("AbsoluteBase"), TEXT("{ENGINE}/Config/Base.ini"), EConfigLayerFlags::NoExpand},
19
20 // Engine/Base*.ini
21 { TEXT("Base"), TEXT("{ENGINE}/Config/Base{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
22 // Engine/Platform/BasePlatform*.ini
23 { TEXT("BasePlatform"), TEXT("{ENGINE}/Config/{PLATFORM}/Base{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
24 // Project/Default*.ini
25 { TEXT("ProjectDefault"), TEXT("{PROJECT}/Config/Default{TYPE}.ini"), EConfigLayerFlags::AllowCommandLineOverride | EConfigLayerFlags::UseGlobalConfigCache },
26 // Project/Generated*.ini Reserved for files generated by build process and should never be checked in
27 { TEXT("ProjectGenerated"), TEXT("{PROJECT}/Config/Generated{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
28 // Project/Custom/CustomConfig/Default*.ini only if CustomConfig is defined
29 { TEXT("CustomConfig"), TEXT("{PROJECT}/Config/Custom/{CUSTOMCONFIG}/Default{TYPE}.ini"), EConfigLayerFlags::RequiresCustomConfig | EConfigLayerFlags::UseGlobalConfigCache },
30 // Engine/Platform/Platform*.ini
31 { TEXT("EnginePlatform"), TEXT("{ENGINE}/Config/{PLATFORM}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
32 // Project/Platform/Platform*.ini
33 { TEXT("ProjectPlatform"), TEXT("{PROJECT}/Config/{PLATFORM}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
34 // Project/Platform/GeneratedPlatform*.ini Reserved for files generated by build process and should never be checked in
35 { TEXT("ProjectPlatformGenerated"), TEXT("{PROJECT}/Config/{PLATFORM}/Generated{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
36 // Project/Platform/Custom/CustomConfig/Platform*.ini only if CustomConfig is defined
37 { TEXT("CustomConfigPlatform"), TEXT("{PROJECT}/Config/{PLATFORM}/Custom/{CUSTOMCONFIG}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::RequiresCustomConfig| EConfigLayerFlags::UseGlobalConfigCache },
38 // AppSettings/.../System*.ini
39 { TEXT("AppSettingsDir"), TEXT("{APPSETTINGS}Unreal Engine/Engine/Config/System{TYPE}.ini"), EConfigLayerFlags::NoExpand },
40 // UserSettings/.../User*.ini
41 { TEXT("UserSettingsDir"), TEXT("{USERSETTINGS}Unreal Engine/Engine/Config/User{TYPE}.ini"), EConfigLayerFlags::NoExpand },
42 // UserDir/.../User*.ini
43 { TEXT("UserDir"), TEXT("{USER}Unreal Engine/Engine/Config/User{TYPE}.ini"), EConfigLayerFlags::NoExpand },
44 // Project/User*.ini
45 { TEXT("GameDirUser"), TEXT("{PROJECT}/Config/User{TYPE}.ini"), EConfigLayerFlags::NoExpand },
46};
47
48
53{
54 // Engine/Base.ini
55 { TEXT("AbsoluteBase"), TEXT("{ENGINE}/Config/PluginBase.ini"), EConfigLayerFlags::NoExpand},
56
57 // Plugin/Base*.ini
58 { TEXT("PluginBase"), TEXT("{PLUGIN}/Config/Base{TYPE}.ini"), EConfigLayerFlags::UsePluginConfigCache },
59 // Plugin/Default*.ini (we use Base and Default as we can have both depending on Engine or Project plugin, but going forward we should stick with Default)
60 { TEXT("PluginDefault"), TEXT("{PLUGIN}/Config/Default{TYPE}.ini"), EConfigLayerFlags::UsePluginConfigCache },
61 // Plugin/Platform/Platform*.ini
62 { TEXT("PluginPlatform"), TEXT("{PLUGIN}/Config/{PLATFORM}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UsePluginConfigCache },
63 // Project/Default.ini
64 { TEXT("ProjectDefault"), TEXT("{PROJECT}/Config/Default{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
65 // Project/Platform/Platform*.ini
66 { TEXT("ProjectDefault"), TEXT("{PROJECT}/Config/{PLATFORM}/{PLATFORM}{TYPE}.ini"), EConfigLayerFlags::UseGlobalConfigCache },
67};
68
73{
74 // Plugin/*.ini, can be plugin name, or say Engine.ini
75 { TEXT("PluginMod"), TEXT("{PLUGIN}/Config/{TYPE}.ini") },
76 // Plugin/Platform/Platform*.ini
77 { TEXT("PluginMModPlatform"), TEXT("{PLUGIN}/Config/{PLATFORM}/{PLATFORM}{TYPE}.ini") },
78};
79
80
81
82/**************************************************
83**** CRITICAL NOTES
84**** If you change these arrays, you need to also change EnumerateConfigFileLocations() in ConfigHierarchy.cs!!!
85**************************************************/
87{
88 // No replacements
89 { nullptr, nullptr, nullptr, nullptr, EConfigExpansionFlags::All },
90
91 // Restricted Locations
92 {
93 TEXT("{ENGINE}/"), TEXT("{ENGINE}/Restricted/NotForLicensees/"),
94 TEXT("{PROJECT}/Config/"), TEXT("{RESTRICTEDPROJECT_NFL}/Config/"),
96 },
97 {
98 TEXT("{ENGINE}/"), TEXT("{ENGINE}/Restricted/NoRedist/"),
99 TEXT("{PROJECT}/Config/"), TEXT("{RESTRICTEDPROJECT_NR}/Config/"),
101 },
102 {
103 TEXT("{ENGINE}/"), TEXT("{ENGINE}/Restricted/LimitedAccess/"),
104 TEXT("{PROJECT}/Config/"), TEXT("{RESTRICTEDPROJECT_LA}/Config/"),
106 },
107
108 // Platform Extensions
109 {
110 TEXT("{ENGINE}/Config/{PLATFORM}/"), TEXT("{EXTENGINE}/Config/"),
111 TEXT("{PROJECT}/Config/{PLATFORM}/"), TEXT("{EXTPROJECT}/Config/"),
113 },
114
115 // Plugin Platform Extensions
116 {
117 TEXT("{PLUGIN}/Config/{PLATFORM}/"), TEXT("{EXTPLUGIN}/Config/"),
118 TEXT("{PROJECT}/Config/{PLATFORM}/"), TEXT("{EXTPROJECT}/Config/"),
120 },
121
122 // Platform Extensions in Restricted Locations
123 //
124 // Regarding the commented EConfigExpansionFlags::ForPlugin expansions: in the interest of keeping plugin ini scanning fast,
125 // we disable these expansions for plugins because they are not used by Epic, and are unlikely to be used by licensees. If
126 // we can make scanning fast (caching what directories exist, etc), then we could turn this back on to be future-proof.
127 {
128 TEXT("{ENGINE}/Config/{PLATFORM}/"), TEXT("{ENGINE}/Restricted/NotForLicensees/Platforms/{PLATFORM}/Config/"),
129 TEXT("{PROJECT}/Config/{PLATFORM}/"), TEXT("{RESTRICTEDPROJECT_NFL}/Platforms/{PLATFORM}/Config/"),
130 EConfigExpansionFlags::ForUncooked | EConfigExpansionFlags::ForCooked // | EConfigExpansionFlags::ForPlugin
131 },
132 {
133 TEXT("{ENGINE}/Config/{PLATFORM}/"), TEXT("{ENGINE}/Restricted/NoRedist/Platforms/{PLATFORM}/{OPT_SUBDIR}Config/"),
134 TEXT("{PROJECT}/Config/{PLATFORM}/"), TEXT("{RESTRICTEDPROJECT_NR}/Platforms/{PLATFORM}/{OPT_SUBDIR}Config/"),
135 EConfigExpansionFlags::ForUncooked // | EConfigExpansionFlags::ForPlugin
136 },
137 {
138 TEXT("{ENGINE}/Config/{PLATFORM}/"), TEXT("{ENGINE}/Restricted/LimitedAccess/Platforms/{PLATFORM}/{OPT_SUBDIR}Config/"),
139 TEXT("{PROJECT}/Config/{PLATFORM}/"), TEXT("{RESTRICTEDPROJECT_LA}/Platforms/{PLATFORM}/{OPT_SUBDIR}Config/"),
140 EConfigExpansionFlags::ForUncooked | EConfigExpansionFlags::ForCooked // | EConfigExpansionFlags::ForPlugin
141 },
142};
143
144
FConfigLayer GPluginLayers[]
Plugins don't need to look at the same number of insane layers.
Definition ConfigHierarchy.h:52
FConfigLayer GPluginModificationLayers[]
These are for the modifications to existing config files (for instance Plugin/Config/Engine....
Definition ConfigHierarchy.h:72
FConfigLayer GConfigLayers[]
Definition ConfigHierarchy.h:9
FConfigLayerExpansion GConfigExpansions[]
Definition ConfigHierarchy.h:86
#define TEXT(x)
Definition Platform.h:1272
Definition ConfigTypes.h:97
Definition ConfigTypes.h:61