gethiddenproperty
Reads a hidden (non-scriptable) property from an Instance.
function gethiddenproperty(instance: Instance, property: string): (any, boolean)Synopsis
How it works
Roblox marks certain InstanceInstanceThe base class for all Roblox objects (Parts, Models, Scripts, GUIs, etc.). Instances form a tree hierarchy (the DataModel). In Luau, they appear as userdata with shared metatables. properties as
notscriptable in its reflection metadata, preventing Luau code from reading them. The executor bypasses this by directly calling the property's C++ getter function through the reflection systemReflection systemRoblox's internal type metadata system. Every class (Part, Humanoid, etc.) has a ClassDescriptor with property descriptors, method descriptors, and event descriptors. The executor's getproperties/gethiddenproperties read this metadata., ignoring the scriptability flag. Returns both the value and a boolean indicating whether the property was hidden.Reflection system
Every Roblox class has a
PropertyDescriptor for each property, containing:name— the property name stringtype— the value typeget/set— C++ getter/setter function pointersflags— includesisScriptable
isScriptable flag and calls the getter directly.Usage
Read a hidden property
local value, isHidden = gethiddenproperty(workspace.Terrain, "MaterialColors")
print(value, isHidden)Parameters
instance Instance The target Instance.
property string The property name to read.
Returns
any The value of the property.
boolean true if the property is hidden (non-scriptable).