Note: This page is still a work in progress. There are a lot of meta specifiers still to document!

Unreal's Class Specifiers and Class Metadata Specifiers pages list all of the core specifiers and many of the metadata specifiers, but it is not an exhaustive list.

This page attempts to be an exhaustive list of all the UCLASS specifiers, giving explanations, sample code, screenshots and related links for each.

If you know of any not listed here, or see any mistakes, feel free to contact me.

Special thanks to Erekose Craft, Ben Fox, Aquanox, ATankNoMore for finding meta properties, giving feedback and giving great examples of usage.

The YAML files used to generate this documentation are available on GitHub. Feel free to submit pull requests or submit any incorrect or missing information there.

General Points

  • Tags are case insensitive, but I would recommend sticking to the case example here for readability.
  • Quotation marks are optional if the values does not have spaces. e.g. someBool=true is treated the same as someBool="true". Again, for readability I would recommend using quotation marks only around string-type properties.

Display

UCLASS(

AdvancedClassDisplay

)
Position:

Main

Type:

flag

The AdvancedClassDisplay Specifier forces all properties of the class to show only in the advanced sections of any details panel where they appear. To override this on an individual property, use the SimpleDisplay specifier on that property.

Unreal Documentation
UCLASS(

ClassGroup

="abc")
Position:

Main

Type:

string

Class Group must be something already registered, you can't put arbitrary strings in here.

Seems to be only used for the Add Component button within an actor.

Indicates that Unreal Editor's Actor Browser should include this class and any subclass of this class within the specified GroupName when Group View is enabled in the Actor Browser.

Unreal Documentation
UCLASS(ClassGroup="Animation")
class UMyActorComponent : public UActorComponent
{
    GENERATED_BODY()
};

UCLASS(

AutoCollapseCategories

="abc")
Position:

Main

Type:

string (Space-separated list)

Incompatible with:

The AutoCollapseCategories Specifier negates the effects, for the listed categories, of the AutoExpandCategories Specifier on a parent class.

Unreal Documentation
UCLASS(

DontAutoCollapseCategories

="abc")
Position:

Main

Type:

string

Negates the AutoCollapseCategories Specifier for the listed categories inherited from a parent class.

Unreal Documentation
UCLASS(

AutoExpandCategories

="abc")
Position:

Main

Type:

string (Space-separated list)

Specifies one or more categories that should be automatically expanded in the Unreal Editor Property window for Objects of this class. To auto-expand variables declared with no category, use the name of the class which declares the variable.

Unreal Documentation
UCLASS(

CollapseCategories

)
Position:

Main

Type:

flag

Indicates that properties of this class should not be grouped in categories in Unreal Editor Property windows. This Specifier is propagated to child classes, and can be overridden by the DontCollapseCategories Specifier.

Unreal Documentation
UCLASS(

DontCollapseCategories

)
Position:

Main

Type:

flag

Opposite:

Negates a CollapseCatogories Specifier inherited from a base class.

Unreal Documentation
UCLASS(meta=(

IgnoreCategoryKeywordsInSubclasses

))
Position:

Meta

Type:

flag

A child that subclasses a class with this meta tag will ignore the following specifiers in the parent: ShowCategories, HideCategories, AutoExpandCategories, AutoCollapseCategories and PrioritizeCategories.

Only used in one place in the codebase. ComponentWrapperClass is an odd alias for it.

Used to make the first subclass of a class ignore all inherited ShowCategories and HideCategories Specifiers.

Unreal Documentation
UCLASS(meta=(

ToolTip

="abc"))
Position:

Meta

Type:

string

Related:

TODO Look into how this is different to ShortToolTip

Overrides the automatically generated tooltip from code comments.

Unreal Documentation
UCLASS(meta=(

ShortToolTip

="abc"))
Position:

Meta

Type:

string

Related:

TODO Look into how this is different to ToolTip

A short tooltip that is used in some contexts where the full tooltip might be overwhelming, such as the Parent Class Picker dialog.

Unreal Documentation
UCLASS(meta=(ShortTooltip="A layout panel for automatically laying child widgets out vertically"))
class UMG_API UVerticalBox : public UPanelWidget
UCLASS(meta=(

PrioritizeCategories

="abc"))
Position:

Meta

Type:

string (Space-separated category names)

Only seems to be used in one place in the source, UCommonTextBlock. Seems to cause the specified categories to be shown first. Note that the category names are space separated, not comma-separated.

UCLASS(Config = CommonUI, DefaultConfig, ClassGroup = UI, meta = (Category = "Common UI", DisplayName = "Common Text", PrioritizeCategories = "Content"))
class COMMONUI_API UCommonTextBlock : public UTextBlock
UCLASS(meta=(

DeprecatedNode

))
Position:

Meta

Type:

flag

For behavior tree nodes, indicates that the class is deprecated and will display a warning when compiled.

Unreal Documentation
UCLASS(meta=(

DeprecationMessage

="abc"))
Position:

Meta

Type:

string

Deprecated classes with this metadata will include this text with the standard deprecation warning that Blueprint Scripts generate during compilation.

Unreal Documentation
UCLASS(meta=(

DisplayName

="abc"))
Position:

Meta

Type:

string

The name of this node in a Blueprint Script will be replaced with the value provided here, instead of the code-generated name.

Unreal Documentation

Blueprint

UCLASS(

Abstract

)
Position:

Main

Type:

flag

The Abstract Specifier declares the class as an "abstract base class", preventing the user from adding Actors of this class to Levels. This is useful for classes which are not meaningful on their own. For example, the ATriggerBase base class is abstract, while the ATriggerBox subclass is not abstract and can be placed in a Level.

Unreal Documentation
// I am abstract, you can't instantiate me!
UCLASS(Abstract)
class UAnimalBase : public UObject
{
  GENERATED_BODY()
  public:
    UAnimalBase(const FObjectInitializer& ObjectInitializer);
};
UCLASS(

Blueprintable

)
Position:

Main

Type:

flag

Opposite:
Related:

Exposes this class as an acceptable base class for creating Blueprints. The default is NotBlueprintable, unless inherited otherwise. This Specifier is inherited by subclasses.

Unreal Documentation
UCLASS(

NotBlueprintable

)
Position:

Main

Type:

flag

Opposite:
Related:

Specifies that this class is not an acceptable base class for creating Blueprints. This is the default and is inherited by subclasses.

Unreal Documentation
UCLASS(meta=(

IsBlueprintBase

=true))
Position:

Meta

Type:

bool

Is much less frequently used than Blueprintable and NotBlueprintable. I would stick to those.

States that this class is (or is not) an acceptable base class for creating Blueprints, similar to the Blueprintable or 'NotBlueprintable' Specifiers.

Unreal Documentation
UCLASS(

BlueprintType

)
Position:

Main

Type:

flag

Opposite:

Exposes this class as a type that can be used for variables in Blueprints.

Unreal Documentation
UCLASS(BlueprintType)
class UExampleObject : public UObject
UCLASS(

NotBlueprintType

)
Position:

Main

Type:

flag

Opposite:

Prevents this class from being used for variables in blueprints

Unreal Documentation
UCLASS(NotBlueprintType)
class UExampleObject : public UObject
UCLASS(

Const

)
Position:

Main

Type:

flag

Related:

Not entirely sure what difference this makes or when to use it.

All properties and functions in this class are const and are exported as const. This Specifier is inherited by subclasses.

Unreal Documentation
UCLASS(meta=(

BlueprintSpawnableComponent

))
Position:

Meta

Type:

flag

Adding this means that the component will appear under the "Add" dropdown for adding components to an Actor.

If present, the component Class can be spawned by a Blueprint.

Unreal Documentation
UCLASS(meta=(

BlueprintThreadSafe

))
Position:

Meta

Type:

flag

Only valid on Blueprint function libraries. This specifier marks the functions in this class as callable on non-game threads in animation Blueprints.

Unreal Documentation
UCLASS(meta=(

ShowWorldContextPin

))
Position:

Meta

Type:

flag

Indicates that Blueprint nodes placed in graphs owned by this class must show their World context pins, even if they are normally hidden, because Objects of this class cannot be used as World context.

Unreal Documentation
UCLASS(meta=(

DontUseGenericSpawnObject

=true))
Position:

Meta

Type:

bool

Only used in two places in the engine, on UUserWidget and DragDropOperation. TODO is it bool or flag?

Do not spawn an Object of the class using Generic Create Object node in Blueprint Scripts; this specifier applies only to Blueprint-type classes that are neither Actors nor Actor Components.

Unreal Documentation
UCLASS(Abstract, editinlinenew, BlueprintType, Blueprintable, meta=( DontUseGenericSpawnObject="True", DisableNativeTick) )
class UMG_API UUserWidget : public UWidget, public INamedSlotInterface
UCLASS(meta=(

KismetHideOverrides

="abc"))
Position:

Meta

Type:

string (Comma-separated list)

List of Blueprint events that are not allowed to be overridden.

Unreal Documentation
UCLASS(meta=(KismetHideOverrides="ReceiveAnyDamage,ReceivePointDamage"))
class ENGINE_API ALevelScriptActor : public AActor
UCLASS(meta=(

ExposedAsyncProxy

))
Position:

Meta

Type:

flag

Values in the engine include AsyncTaskRef, AsyncAction, AsyncTask. "The ExposedAsyncProxy metadata specifies the blueprint node will return this object for later canceling."

Expose a proxy Object of this class in Async Task nodes.

Unreal Documentation
UCLASS(meta=(

HasDedicatedAsyncNode

))
Position:

Meta

Type:

flag

If this is present then the editor will not create an async node in the graph.

Config

UCLASS(

Config

="abc")
Position:

Main

Type:

string

Indicates that this class is allowed to store data in a configuration file (.ini). If there are any class properties declared with the config or globalconfig Specifiers, this Specifier causes those properties to be stored in the named configuration file. This Specifier is propagated to all child classes and cannot be negated, but child classes can change the config file by re-declaring the config Specifier and providing a different ConfigName. Common ConfigName values are "Engine", "Editor", "Input", and "Game".

Unreal Documentation
UCLASS(

DefaultConfig

)
Position:

Main

Type:

flag

Requires:

Save object config only to Default INIs, never to local INIs.

Unreal Documentation
UCLASS(

PerObjectConfig

)
Position:

Main

Type:

flag

Requires:

Configuration information for this class will be stored per Object, where each object has a section in the .ini file named after the Object in the format [ObjectName ClassName]. This Specifier is propagated to child classes.

Unreal Documentation
UCLASS(

ConfigDoNotCheckDefaults

)
Position:

Main

Type:

flag

Requires:
UCLASS(

GlobalUserConfig

)
Position:

Main

Type:

flag

Requires:
UCLASS(

ProjectUserConfig

)
Position:

Main

Type:

flag

Requires:

Editor

UCLASS(

EditInlineNew

)
Position:

Main

Type:

flag

Opposite:

Indicates that Objects of this class can be created from the Unreal Editor Property window, as opposed to being referenced from an existing Asset. The default behavior is that only references to existing Objects may be assigned through the Property window). This Specifier is propagated to all child classes; child classes can override this with the NotEditInlineNew Specifier.

Unreal Documentation
UCLASS(

NotEditInlineNew

)
Position:

Main

Type:

flag

Opposite:
UCLASS(

DefaultToInstanced

)
Position:

Main

Type:

flag

Related:

All instances of this class are considered "instanced". Instanced classes (components) are duplicated upon construction. This Specifier is inherited by subclasses.

Unreal Documentation

Visibility

UCLASS(

Hidden

)
Position:

Main

Type:

flag

Related:

The UCLASS specifier now takes a Hidden flag. This maps directly to the ClassFlags Enum CLASS_Hidden flag. Adding this flag will hide the given class from any class browser in the editor.

Unreal Documentation
UCLASS(

HideDropdown

)
Position:

Main

Type:

flag

Related:

Prevents this class from showing up in property window combo boxes.

Unreal Documentation
UCLASS(

ShowFunctions

="abc")
Position:

Main

Type:

string (Space-separated function names)

Opposite:

This makes more sense when you first understand HideFunctions. I think it works to re-expose functions that were previously hidden using HideFunctions.

Shows all functions within the listed categories in a property viewer.

Unreal Documentation
UCLASS(ShowFunctions=FunctionName)
UCLASS(ShowFunctions=(Category1, Category2))
UCLASS(

HideFunctions

="abc")
Position:

Main

Type:

string (Space-separated function names)

Opposite:

Say you have a class UCameraComponent, and within it you define a BlueprintCallable function SetFieldOfView. Next, imagine you are creating an orthographic camera class that is a subclass of UCameraComponent. SetFieldOfView no loner makes sense in this new child class, so to hide it you add HideFunctions="SetFieldOfView" to its UCLASS(). According to the documentation you can specify either category names or individual functions. There is only one example of this being used in the engine, interestingly. Ok maybe it's not that interesting.

Hides all functions in the specified category from the user entirely.

Unreal Documentation
UCLASS()
class UCameraComponent : public USceneComponent
{
    UFUNCTION(BlueprintCallable)
    virtual void SetFieldOfView(float InFieldOfView);
};

UCLASS(HideFunctions=(SetFieldOfView))
class UOrthographicCameraComponent : public UCameraComponent
{
    // ...
};
UCLASS(

ShowCategories

="abc")
Position:

Main

Type:

string

Opposite:

Negates a HideCategories Specifier (inherited from a base class) for the listed categories.

Unreal Documentation
UCLASS(

HideCategories

="abc")
Position:

Main

Type:

string

Opposite:

Lists one or more categories that should be hidden from the user entirely. To hide properties declared with no category, use the name of the class which declares the variable. This Specifier is propagated to child classes.

Unreal Documentation
UCLASS(meta=(

ProhibitedInterfaces

="abc"))
Position:

Meta

Type:

string

Not found any examples of this being used in the engine.

Lists Interfaces that are not compatible with the class.

Unreal Documentation
UCLASS(meta=(

RestrictedToClasses

="abc"))
Position:

Meta

Type:

string

Blueprint function library classes can use this to restrict usage to the classes named in the list.

Unreal Documentation
UCLASS(meta=(RestrictedToClasses="BTNode"))
class AIMODULE_API UBTFunctionLibrary : public UBlueprintFunctionLibrary

Actor

UCLASS(

Placeable

)
Position:

Main

Type:

flag

I'm pretty sure this is on all AActor subclasses by default. I guess you could specify its opposite NotPlaceable if you wanted a non-placeable actor. See NotPlaceable for use cases.

Indicates that this class can be created in the Editor and placed into a level, UI scene, or Blueprint (depending on the class type). This flag is propagated to all child classes; child classes can override this flag using the NotPlaceable Specifier.

Unreal Documentation
UCLASS(

NotPlaceable

)
Position:

Main

Type:

flag

Opposite:

"This is used in a lot of places in the engine: on test classes, debug actors, gizmos, actors that should only be spawned by other actors."

Negates a Placeable Specifier inherited from a base class. Indicates that Objects of this class may not be placed into a Level, UI scene, or Blueprint in the Editor.

Unreal Documentation
UCLASS(

ComponentWrapperClass

)

From what I can tell, this is effectively an alias for IgnoreCategoryKeywordsInSubclasses=true. A class with this specifier will cause the engine to add the IgnoreCategoryKeywordsInSubclasses metadata. This in turn causes all subclasses ignore ShowCategories, HideCategories, AutoExpandCategories, AutoCollapseCategories and PrioritizeCategories.

Seems to be used on minimal-ish Actors that wrap components. For example on ALight that wraps ULightComponent, ASkeletalMeshActor that wraps USkeletalMeshComponent.

Co-occurs with ConversionRoot and ChildCanTick a lot.

UCLASS(meta=(

ChildCanTick

))
Position:

Meta

Type:

flag

Opposite:

Used for Actor and Component classes. If the native class cannot tick, Blueprint-generated classes based this Actor or Component can have the bCanEverTick flag overridden, even if bCanBlueprintsTickByDefault is false.

Unreal Documentation
UCLASS(meta=(

ChildCannotTick

))
Position:

Meta

Type:

flag

Opposite:

Used for Actor and Component classes. If the native class cannot tick, Blueprint-generated classes based this Actor or Component can never tick, even if bCanBlueprintsTickByDefault is true.

Unreal Documentation

Serialization

UCLASS(

Transient

)
Position:

Main

Type:

flag

Opposite:

Objects belonging to this class will never be saved to disk. This is useful in conjunction with certain kinds of native classes which are non-persistent by nature, such as players or windows. This Specifier is propagated to child classes, but can be overridden by the NonTransient Specifier.

Unreal Documentation
UCLASS(

NonTransient

)
Position:

Main

Type:

flag

Opposite:

Negates a Transient Specifier inherited from a base class.

Unreal Documentation
UCLASS(

Deprecated

)
Position:

Main

Type:

flag

This class is deprecated and Objects of this class will not be saved when serializing. This Specifier is inherited by subclasses.

Unreal Documentation

C++

UCLASS(

MinimalAPI

)
Position:

Main

Type:

flag

I find it a bit tricky to understand MinimalAPI. If you have a class that exists in one module and you want to be able to cast to it in another module, I add MinimalAPI.

In ascending order of "how much gets exported" I think of it like this:

  1. No class specifiers, no API macros: nothing exported, the class and its functions are only available within its own module.
  2. UCLASS(MinimalAPI), no API macros: the class can be Cast<T> to outside of its module, nothing else.
  3. MYMODULE_API on certain functions: only those functions can be called outside of its module.
  4. MYMODULE_API on the class itself: all functions can be called outside of its module.

In general it's good practice to only mark the bare minimum with MYMODULE_API.

Causes only the class's type information to be exported for use by other modules. The class can be cast to, but the functions of the class cannot be called (with the exception of inline methods). This improves compile times by not exporting everything for classes that do not need all of their functions accessible in other modules.

Unreal Documentation
// For example we have a class in MyGameplayModule that we want to be able to cast to elsewhere
// Note we do *not* add MYGAMEPLAYMODULE_API
UCLASS(MinimalAPI)
class ASomeGameplayClass : public AActor
UCLASS(

DependsOn

="abc")
Position:

Main

Type:

string (comma-separated)

All classes listed will be compiled before this class. The class names provided must indicate classes in the same (or a previous) package. Multiple dependency classes can be identified using a single DependsOn line delimited by commas, or can be specified using a separate DependsOn line for each class. This is important when a class uses a struct or enum declared in another class, as the compiler only knows what is in the classes it has already compiled.

Unreal Documentation
UCLASS(

Within

="abc")
Position:

Main

Type:

string

This is handy for making it clear that a class is designed to be owned by another. Maybe it uses GetOuter so it won't work when created within another class. Commonly used with APlayerController.

Objects of this class cannot exist outside of an instance of an OuterClassName Object. This means that creating an Object of this class requires that an instance of OuterClassName is provided as its Outer Object.

Unreal Documentation
UCLASS(Within=PlayerController)
class ENGINE_API UPlayerInput : public UObject

UI

UCLASS(meta=(

DisableNativeTick

))
Position:

Meta

Type:

flag

Only used in one place in the engine, on UUserWidget.

UCLASS(Abstract, editinlinenew, BlueprintType, Blueprintable, meta=( DontUseGenericSpawnObject="True", DisableNativeTick) )
class UMG_API UUserWidget : public UWidget, public INamedSlotInterface
UCLASS(meta=(

EntryInterface

="abc"))
Position:

Meta

Type:

string (Interface name without leading `I`)

Used to specify the interface that must be implemented by entries to be usable by this list. Only used on UListViewBase and UListView.

/**
 * A virtualized list that allows up to thousands of items to be displayed.
 * 
 * An important distinction to keep in mind here is "Item" vs. "Entry"
 * The list itself is based on a list of n items, but only creates as many entry widgets as can fit on screen.
 * For example, a scrolling ListView of 200 items with 5 currently visible will only have created 5 entry widgets.
 *
 * To make a widget usable as an entry in a ListView, it must inherit from the IUserObjectListEntry interface.
 */
UCLASS(meta = (EntryInterface = UserObjectListEntry))
class UMG_API UListView : public UListViewBase, public ITypedUMGListView<UObject*>

Todo

UCLASS(meta=(

DisplayThumbnail

=true))
Position:

Meta

Type:

bool

Related:
UCLASS(BlueprintType, meta = (DisplayThumbnail = "true"))
class PAPER2D_API UPaperFlipbook : public UObject
UCLASS(

Experimental

)
Position:

Main

Type:

flag

UCLASS(meta=(

IgnoreClassThumbnail

))
Position:

Meta

Type:

flag

UCLASS(meta=(

ExposedAsyncProxy

="abc"))
Position:

Meta

Type:

string (Class name without prefix)

UCLASS(Abstract, meta = (ExposedAsyncProxy = AsyncAction))
class GAMEPLAYABILITIES_API UAbilityAsync : public UBlueprintAsyncActionBase
UCLASS(

ScriptName

="abc")
Position:

Main

Type:

string

UCLASS(MinimalAPI, meta=(ScriptName="ComposureLibrary"))
class UComposureBlueprintLibrary : public UBlueprintFunctionLibrary
UCLASS(meta=(

CommandLineID

="abc"))
Position:

Meta

Type:

string

Only used in the UMovieSceneCapture class as far as I can tell. For specifying image and movie file formats.

UCLASS(

Optional

)
Position:

Main

Type:

flag

Seems to be used on editor-only data like metadata and comment nodes.

This object type may not be available in certain context. (i.e. game runtime or in certain configuration). Optional class data is saved separately to other object types. (i.e. might use sidecar files)

Unreal Documentation

Internal and Deprecated

UCLASS(

Intrinsic

)
Position:

Main

Type:

flag

This indicates that the class was declared directly in C++, and has no boilerplate generated by Unreal Header Tool. Do not use this Specifier on new classes.

Unreal Documentation
UCLASS(

NoExport

)
Position:

Main

Type:

flag

Indicates that this class's declaration should not be included in the automatically-generated C++ header file by the header generator. The C++ class declaration must be defined manually in a separate header file. Only valid for native classes. Do not use this for new classes.

Unreal Documentation
UCLASS(

MatchedSerializers

)
Position:

Main

Type:

flag

Seems to be used for very low-level internal classes.

UCLASS(meta=(

UsesHierarchy

))
Position:

Meta

Type:

flag

The official documentation lists this for both UCLASS and USTRUCT but there are no instances of it being used in the codebase and no code that seems to recognise it. So I think it's maybe legacy or something someone forgot.

Indicates the class uses hierarchical data. Used to instantiate hierarchical editing features in Details panels.

Unreal Documentation
UCLASS(

CustomConstructor

)
Position:

Main

Type:

flag

As of 5.3 has the comment "No longer used in the engine"

Prevents automatic generation of the constructor declaration.

Unreal Documentation