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
| Name | Type / Returns | Description |
|---|---|---|
| ReflectionService:GetClass | ReflectedClass? | Returns information about a class when given its name, assuming that class is accessible. |
| ReflectionService:GetClasses | List | Returns a list of all classes accessible with filters applied. |
| ReflectionService:GetEventsOfClass | List | Returns a list of events for a given class with filters applied. |
| ReflectionService:GetMethodsOfClass | List | Returns a list of methods for a given class with filters applied. |
| ReflectionService:GetPropertiesOfClass | List | Returns a list of properties for a given class with filters applied. |
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance:AddTag | () | Applies a tag to the instance. |
| Instance:children | Instances | Returns an array of the object's children. |
| Instance:ClearAllChildren | () | This method destroys all of an instance's children. |
| Instance:Clone | Instance | Create a copy of an instance and all its descendants, ignoring instances that are not Archivable. |
| Instance:clone | Instance | |
| 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:FindFirstAncestor | Instance? | Returns the first ancestor of the Instance whose Instance.Name is equal to the given name. |
| Instance:FindFirstAncestorOfClass | Instance? | Returns the first ancestor of the Instance whose Object.ClassName is equal to the given className. |
| Instance:FindFirstAncestorWhichIsA | Instance? | Returns the first ancestor of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstChild | Instance? | Returns the first child of the Instance found with the given name. |
| Instance:findFirstChild | Instance | |
| Instance:FindFirstChildOfClass | Instance? | Returns the first child of the Instance whose ClassName is equal to the given class name. |
| Instance:FindFirstChildWhichIsA | Instance? | Returns the first child of the Instance for whom Object:IsA() returns true for the given className. |
| Instance:FindFirstDescendant | Instance? | Returns the first descendant found with the given Instance.Name. |
| Instance:GetActor | Actor? | Returns the Actor associated with the Instance, if any. |
| Instance:GetAttribute | Variant | Returns the value which has been assigned to the given attribute name. |
| Instance:GetAttributeChangedSignal | RBXScriptSignal | Returns an event that fires when the given attribute changes. |
| Instance:GetAttributes | Dictionary | Returns a dictionary of the instance's attributes. |
| Instance:GetChildren | Instances | Returns an array containing all of the instance's children. |
| Instance:getChildren | Instances | |
| Instance:GetDebugId | string | Returns a coded string of the debug ID used internally by Roblox. |
| Instance:GetDescendants | Instances | Returns an array containing all of the descendants of the instance. |
| Instance:GetFullName | string | Returns a string describing the instance's ancestry. |
| Instance:GetStyled | Variant | Returns the styled or explicitly modified value of the specified property, or else the default property value if it hasn't been styled/modified. |
| Instance:GetStyledPropertyChangedSignal | RBXScriptSignal | Returns an event that fires when the given style property changes on the instance. |
| Instance:GetTags | Array | Gets an array of all tags applied to the instance. |
| Instance:HasTag | boolean | Check whether the instance has a given tag. |
| Instance:IsAncestorOf | boolean | Returns true if an Instance is an ancestor of the given descendant. |
| Instance:IsDescendantOf | boolean | Returns true if an Instance is a descendant of the given ancestor. |
| Instance:isDescendantOf | boolean | |
| Instance:IsPropertyModified | boolean | Returns true if the value stored in the specified property is not equal to the code-instantiated default. |
| Instance:QueryDescendants | Instances | Returns 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:WaitForChild | Instance | Returns 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
| Name | Type / Returns | Description |
|---|---|---|
| Object:GetPropertyChangedSignal | RBXScriptSignal | Get an event that fires when a given property of the object changes. |
| Object:IsA | boolean | Returns true if an object's class matches or inherits from a given class. |
| Object:isA | boolean |
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
| Name | Type | Default | Description |
|---|---|---|---|
| className | string | The name of the class for which you wish to retrieve information. | |
| filter | Dictionary | nil | An optional filter to restrict or expand the set of classes that this method can return and change the method's behavior. |
Returns
| Type | Description |
|---|---|
| ReflectedClass? | A ReflectedClass dictionary with reflection information if the class exists; otherwise, nil. |
| Field | Value |
|---|---|
| tags | ["CustomLuaState"] |
| security | None |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| filter | Dictionary | nil | An optional filter to restrict or expand the set of classes that this method can return and change the method's behavior. |
Returns
| Type | Description |
|---|---|
| List | A list of ReflectedClass dictionaries with reflection information for each class that matches the filter criteria. |
| Field | Value |
|---|---|
| tags | ["CustomLuaState"] |
| security | None |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| className | string | The name of the class for which you wish to retrieve events. | |
| filter | Dictionary | nil | An optional filter to restrict or expand the set of events that this method can return and change the method's behavior. |
Returns
| Type | Description |
|---|---|
| List | A list of ReflectedEvent dictionaries with reflection information for each event of the class that matches the filter criteria. |
| Field | Value |
|---|---|
| tags | ["CustomLuaState"] |
| security | None |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| className | string | The name of the class for which you wish to retrieve methods. | |
| filter | Dictionary | nil | An optional filter to restrict or expand the set of methods that this method can return and change the method's behavior. |
Returns
| Type | Description |
|---|---|
| List | A list of ReflectedMethod dictionaries with reflection information for each method of the class that matches the filter criteria. |
| Field | Value |
|---|---|
| tags | ["CustomLuaState"] |
| security | None |
| thread safety | Unsafe |
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
| Name | Type | Default | Description |
|---|---|---|---|
| className | string | The name of the class for which you wish to retrieve properties. | |
| filter | Dictionary | nil | An optional filter to restrict or expand the set of properties that this method can return and change the method's behavior. |
Returns
| Type | Description |
|---|---|
| List | A list of ReflectedProperty dictionaries with reflection information for each property of the class that matches the filter criteria. |
| Field | Value |
|---|---|
| tags | ["CustomLuaState"] |
| security | None |
| thread safety | Unsafe |
Properties
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.Archivable | boolean | Determines if an Instance and its descendants can be cloned using Instance:Clone(), and can be saved/published. |
| Instance.archivable | boolean | |
| Instance.Capabilities | SecurityCapabilities | The set of capabilities allowed to be used for scripts inside this container. |
| Instance.IsInSandbox | boolean | Indicates whether the instance is inside a sandboxed container. |
| Instance.Name | string | A non-unique identifier of the Instance. |
| Instance.Parent | Instance | Determines the hierarchical parent of the Instance. |
| Instance.PredictionMode | PredictionMode | Reflects the client-side prediction mode applied to the instance under server-authoritative physics. |
| Instance.RobloxLocked | boolean | A deprecated property that used to protect CoreGui objects. |
| Instance.Sandboxed | boolean | When enabled, the instance can only access abilities in its Capabilities list. |
| Instance.UniqueId | UniqueId | A unique identifier for the instance. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.ClassName | string | A read-only string representing the class this Object belongs to. |
| Object.className | string |
Events
Inherited from Instance
| Name | Type / Returns | Description |
|---|---|---|
| Instance.AncestryChanged | Fires when the Instance.Parent property of this object or one of its ancestors is changed. | |
| Instance.AttributeChanged | Fires whenever an attribute is changed on the Instance. | |
| Instance.ChildAdded | Fires after an object is parented to this Instance. | |
| Instance.childAdded | ||
| Instance.ChildRemoved | Fires after a child is removed from this Instance. | |
| Instance.DescendantAdded | Fires after a descendant is added to the Instance. | |
| Instance.DescendantRemoving | Fires immediately before a descendant of the Instance is removed. | |
| Instance.Destroying | Fires immediately before (or is deferred until after) the instance is destroyed via Instance:Destroy(). | |
| Instance.StyledPropertiesChanged | Fires whenever any style property is changed on the instance, including when a property is set to nil. |
Inherited from Object
| Name | Type / Returns | Description |
|---|---|---|
| Object.Changed | Fires immediately after a property of the object changes, with some limitations. |