13 min read

Source: Roblox Creator Hub · CC BY 4.0 · View source · Code samples: MIT Imported 2026-10-03. Formatting adapted for this site.

ReflectionService

Inherits from: Instance → Object

ReflectionService allows scripts to query the engine for details about its API, including required security permissions, functionality, and inheritance structure. You can use this service to dynamically inspect classes and their properties, methods, and events, which can be useful for debugging, tooling, or creating dynamic behaviors based on the engine's capabilities.

The following is an example script that inspects classes and their properties:

Inherits from: Instance

Memory category: Instances

Tags: NotCreatable, Service, NotReplicated

Code samples: View on Creator Hub (ReflectionService-Overview).

Methods

NameType / ReturnsDescription
ReflectionService:GetClassReflectedClass?Returns information about a class when given its name, assuming that class is accessible.
ReflectionService:GetClassesListReturns a list of all classes accessible with filters applied.
ReflectionService:GetEventsOfClassListReturns a list of events for a given class with filters applied.
ReflectionService:GetMethodsOfClassListReturns a list of methods for a given class with filters applied.
ReflectionService:GetPropertiesOfClassListReturns a list of properties for a given class with filters applied.

Inherited from Instance

NameType / ReturnsDescription
Instance:AddTag()Applies a tag to the instance.
Instance:childrenInstancesReturns an array of the object's children.
Instance:ClearAllChildren()This method destroys all of an instance's children.
Instance:CloneInstanceCreate a copy of an instance and all its descendants, ignoring instances that are not Archivable.
Instance:cloneInstance
Instance:Destroy()Sets the Instance.Parent property to nil, locks the Instance.Parent property, disconnects all connections, and calls Destroy() on all children.
Instance:destroy()
Instance:FindFirstAncestorInstance?Returns the first ancestor of the Instance whose Instance.Name is equal to the given name.
Instance:FindFirstAncestorOfClassInstance?Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className.
Instance:FindFirstAncestorWhichIsAInstance?Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstChildInstance?Returns the first child of the Instance found with the given name.
Instance:findFirstChildInstance
Instance:FindFirstChildOfClassInstance?Returns the first child of the Instance whose ClassName is equal to the given class name.
Instance:FindFirstChildWhichIsAInstance?Returns the first child of the Instance for whom Object:IsA() returns true for the given className.
Instance:FindFirstDescendantInstance?Returns the first descendant found with the given Instance.Name.
Instance:GetActorActor?Returns the Actor associated with the Instance, if any.
Instance:GetAttributeVariantReturns the value which has been assigned to the given attribute name.
Instance:GetAttributeChangedSignalRBXScriptSignalReturns an event that fires when the given attribute changes.
Instance:GetAttributesDictionaryReturns a dictionary of the instance's attributes.
Instance:GetChildrenInstancesReturns an array containing all of the instance's children.
Instance:getChildrenInstances
Instance:GetDebugIdstringReturns a coded string of the debug ID used internally by Roblox.
Instance:GetDescendantsInstancesReturns an array containing all of the descendants of the instance.
Instance:GetFullNamestringReturns a string describing the instance's ancestry.
Instance:GetStyledVariantReturns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified.
Instance:GetStyledPropertyChangedSignalRBXScriptSignalReturns an event that fires when the given style property changes on the instance.
Instance:GetTagsArrayGets an array of all tags applied to the instance.
Instance:HasTagbooleanCheck whether the instance has a given tag.
Instance:IsAncestorOfbooleanReturns true if an Instance is an ancestor of the given descendant.
Instance:IsDescendantOfbooleanReturns true if an Instance is a descendant of the given ancestor.
Instance:isDescendantOfboolean
Instance:IsPropertyModifiedbooleanReturns true if the value stored in the specified property is not equal to the code-instantiated default.
Instance:QueryDescendantsInstancesReturns an array containing all descendants of the instance that match the selector string.
Instance:Remove()Sets the object's Parent to nil, and does the same for all its descendants.
Instance:remove()
Instance:RemoveTag()Removes a tag from the instance.
Instance:ResetPropertyToDefault()Resets a property to its default value.
Instance:SetAttribute()Sets the attribute with the given name to the given value.
Instance:WaitForChildInstanceReturns the child of the Instance with the given name. If the child does not exist, it will yield the current thread until it does.

Inherited from Object

NameType / ReturnsDescription
Object:GetPropertyChangedSignalRBXScriptSignalGet an event that fires when a given property of the object changes.
Object:IsAbooleanReturns true if an object's class matches or inherits from a given class.
Object:isAboolean

ReflectionService:GetClass

Given a class name in the Roblox API, returns a ReflectedClass dictionary with information about the associated class's reflection state. If no such class name exists, returns nil.

If you pass in a ReflectionClassFilter dictionary, you can adjust the set of eligible classes and adjust the output behavior:

{
	-- The security context to use; can be more expansive than the current script's security
	Security: SecurityCapabilities?, -- default: SecurityCapabilities.fromCurrent()
	-- Require classes to derive from the passed-in class name
	IsA: string?, -- default: nil
	-- Whether to exclude Studio display information about the class
	ExcludeDisplay: boolean?, -- default: false
}

If the class name is valid, you'll get the following ReflectedClass dictionary as output:

{
	-- The name of the class
	Name: string,
	-- Whether the class is serialized (able to be saved to disk)
	Serialized: boolean,
	-- The class's parent in the instance hierarchy (unless it's the root)
	Superclass: string?,
	-- The names of the class's direct children in the instance hierarchy
	Subclasses: {string},
	-- Studio display information
	Display: {
		-- Always "General" for classes
		Category: string,
		-- A message indicating that the class is deprecated, if applicable
		DeprecationMessage: string?,
	}?,
	-- The security permissions required to access this class
	Permits: {
		-- If the class is a Service, the security capabilities required to obtain access. If not applicable, this field isn't present
		GetService: SecurityCapabilities?,
		-- The security capabilities required to create an instance of this class. If not possible, this field isn't present
		New: SecurityCapabilities?,
	}
}

Parameters

NameTypeDefaultDescription
classNamestringThe name of the class for which you wish to retrieve information.
filterDictionarynilAn optional filter to restrict or expand the set of classes that this method can return and change the method's behavior.

Returns

TypeDescription
ReflectedClass?A ReflectedClass dictionary with reflection information if the class exists; otherwise, nil.
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe

ReflectionService:GetClasses

Returns a list of ReflectedClass dictionaries for all classes in the Roblox API that match the provided filter criteria.

If you pass in a ReflectionClassFilter dictionary, you can adjust the set of eligible classes and adjust the output behavior:

{
	-- The security context to use; can be more expansive than the current script's security
	Security: SecurityCapabilities?, -- default: SecurityCapabilities.fromCurrent()
	-- Require classes to derive from the passed-in class name
	IsA: string?, -- default: nil
	-- Whether to exclude Studio display information about the classes
	ExcludeDisplay: boolean?, -- default: false
}

You'll get a list of ReflectedClass dictionaries as output, each with the same structure as described in the GetClass method. If there are no classes that match the filter criteria, you'll receive an empty list.

Parameters

NameTypeDefaultDescription
filterDictionarynilAn optional filter to restrict or expand the set of classes that this method can return and change the method's behavior.

Returns

TypeDescription
ListA list of ReflectedClass dictionaries with reflection information for each class that matches the filter criteria.
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe

ReflectionService:GetEventsOfClass

Given a class name in the Roblox API, returns a list of ReflectedEvent dictionaries for all events of that class that match the provided filter criteria. If no such class name exists, returns nil.

If you pass in a ReflectionMemberFilter dictionary, you can adjust the set of eligible events and adjust the output behavior:

{
	-- The security context to use; can be more expansive than the current script's security
	Security: SecurityCapabilities?, -- default: SecurityCapabilities.fromCurrent()
	-- Whether to exclude inherited events from superclasses
	ExcludeInherited: boolean?, -- default: false
	-- Whether to exclude Studio display information about the events
	ExcludeDisplay: boolean?, -- default: false
}

If the class name is valid and that class has events, you'll get a list of ReflectedEvent dictionaries as output, each with the following structure:

{
	-- The name of the event
	Name: string,
	-- The superclass from which the property is inherited, or the class name if not inherited
	Owner: string,
	-- A list of all parameters the event passes to connected functions
	Parameters: {
		{
			-- The name of the parameter
			Name: string,
			-- The type of the parameter
			Type: ReflectionType,
		}
	},
	-- Studio display information
	Display: {
		-- A message indicating that the event is deprecated, if applicable
		DeprecationMessage: string?,
	}?,
	-- The security permissions required to access this event
	Permits: {
		-- The security permissions required to listen for the event in any context
		Listen: SecurityCapabilities?,
	},
}

Parameters

NameTypeDefaultDescription
classNamestringThe name of the class for which you wish to retrieve events.
filterDictionarynilAn optional filter to restrict or expand the set of events that this method can return and change the method's behavior.

Returns

TypeDescription
ListA list of ReflectedEvent dictionaries with reflection information for each event of the class that matches the filter criteria.
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe

ReflectionService:GetMethodsOfClass

Given a class name in the Roblox API, returns a list of ReflectedMethod dictionaries for all methods of that class that match the provided filter criteria. If no such class name exists, returns nil.

If you pass in a ReflectionMemberFilter dictionary, you can adjust the set of eligible methods and adjust the output behavior:

{
	-- The security context to use; can be more expansive than the current script's security
	Security: SecurityCapabilities?, -- default: SecurityCapabilities.fromCurrent()
	-- Whether to exclude inherited methods from superclasses
	ExcludeInherited: boolean?, -- default: false
	-- Whether to exclude Studio display information about the methods
	ExcludeDisplay: boolean?, -- default: false
}

If the class name is valid and that class has methods, you'll get a list of ReflectedMethod dictionaries as output, each with the following structure:

{
	-- The name of the method
	Name: string,
	-- The superclass from which the property is inherited, or the class name if not inherited
	Owner: string,
	-- A list of all parameters the method takes
	Parameters: {
		{
			-- The name of the parameter
			Name: string,
			-- The type of the parameter
			Type: ReflectionType,
			-- The default value of the parameter, if it has one
			DefaultValue: any?,
		}
	},
	-- The return type of the method; "void" if none
	ReturnType: ReflectionType,
	-- Whether the method is yielding
	CanYield: boolean,
	-- Studio display information
	Display: {
		-- A message indicating that the method is deprecated, if applicable
		DeprecationMessage: string?,
	}?,
	-- The security permissions required to access this method
	Permits: {
		-- The security permissions required to call the method in a single-threaded context
		Call: SecurityCapabilities?,
		-- The security permissions required to call the method in a parallel context
		CallParallel: SecurityCapabilities?,
	},
}

Parameters

NameTypeDefaultDescription
classNamestringThe name of the class for which you wish to retrieve methods.
filterDictionarynilAn optional filter to restrict or expand the set of methods that this method can return and change the method's behavior.

Returns

TypeDescription
ListA list of ReflectedMethod dictionaries with reflection information for each method of the class that matches the filter criteria.
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe

ReflectionService:GetPropertiesOfClass

Given a class name in the Roblox API, returns a list of ReflectedProperty dictionaries for all properties of that class that match the provided filter criteria. If no such class name exists, returns nil.

If you pass in a ReflectionMemberFilter dictionary, you can adjust the set of eligible properties and adjust the output behavior:

{
	-- The security context to use; can be more expansive than the current script's security
	Security: SecurityCapabilities?, -- default: SecurityCapabilities.fromCurrent()
	-- Whether to exclude inherited properties from superclasses
	ExcludeInherited: boolean?, -- default: false
	-- Whether to exclude Studio display information about the properties
	ExcludeDisplay: boolean?, -- default: false
}

If the class name is valid and that class has properties, you'll get a list of ReflectedProperty dictionaries as output, each with the following structure:

{
	-- The name of the property
	Name: string,
	-- The superclass from which the property is inherited, or the class name if not inherited
	Owner: string,
	-- Whether the property is serialized (able to be saved to disk or sent over the network)
	Serialized: boolean,
	-- The type of the property
	Type: ReflectionType,
	-- The content type of the property, if applicable
	ContentType: Enum.AssetType?,
	-- Studio display information
	Display: {
		-- The category under which the property is listed in Studio
		Category: string,
		-- A message indicating that the property is deprecated, if applicable
		DeprecationMessage: string?,
	}?,
	-- The security permissions required to access this property
	Permits: {
		-- The security context required to read this property
		Read: SecurityCapabilities?,
		-- The security context required to read this property while thread-safe
		ReadParallel: SecurityCapabilities?,
		-- The security context required to write to this property
		Write: SecurityCapabilities?,
		-- The security context required to write to this property while thread-safe
		WriteParallel: SecurityCapabilities?,
	},
}

Parameters

NameTypeDefaultDescription
classNamestringThe name of the class for which you wish to retrieve properties.
filterDictionarynilAn optional filter to restrict or expand the set of properties that this method can return and change the method's behavior.

Returns

TypeDescription
ListA list of ReflectedProperty dictionaries with reflection information for each property of the class that matches the filter criteria.
FieldValue
tags["CustomLuaState"]
securityNone
thread safetyUnsafe

Properties

Inherited from Instance

NameType / ReturnsDescription
Instance.ArchivablebooleanDetermines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published.
Instance.archivableboolean
Instance.CapabilitiesSecurityCapabilitiesThe set of capabilities allowed to be used for scripts inside this container.
Instance.IsInSandboxbooleanIndicates whether the instance is inside a sandboxed container.
Instance.NamestringA non-unique identifier of the Instance.
Instance.ParentInstanceDetermines the hierarchical parent of the Instance.
Instance.PredictionModePredictionModeReflects the client-side prediction mode applied to the instance under server-authoritative physics.
Instance.RobloxLockedbooleanA deprecated property that used to protect CoreGui objects.
Instance.SandboxedbooleanWhen enabled, the instance can only access abilities in its Capabilities list.
Instance.UniqueIdUniqueIdA unique identifier for the instance.

Inherited from Object

NameType / ReturnsDescription
Object.ClassNamestringA read-only string representing the class this Object belongs to.
Object.classNamestring

Events

Inherited from Instance

NameType / ReturnsDescription
Instance.AncestryChangedFires when the Instance.Parent property of this object or one of its ancestors is changed.
Instance.AttributeChangedFires whenever an attribute is changed on the Instance.
Instance.ChildAddedFires after an object is parented to this Instance.
Instance.childAdded
Instance.ChildRemovedFires after a child is removed from this Instance.
Instance.DescendantAddedFires after a descendant is added to the Instance.
Instance.DescendantRemovingFires immediately before a descendant of the Instance is removed.
Instance.DestroyingFires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy().
Instance.StyledPropertiesChangedFires whenever any style property is changed on the instance, including when a property is set to nil.

Inherited from Object

NameType / ReturnsDescription
Object.ChangedFires immediately after a property of the object changes, with some limitations.