How to get ALL properties of an Instance

Want bloatware-free always uptodate list to get all properties?:fire:

Then this tutorial is for you!:ice_cube::ice_cube:(i ran out of ideas for emojy)

So how are we gonna get them? :thinking:
Well we can use a always updating github repository for that!:stopwatch:

Ok cool but how do i extract properties out of it?:money_mouth_face:
That a good question! Create a module script (although you could execute it directly):scroll:
And paste code here

Bro ts types took so long for me to write :skull::skull::skull:

--!strict
--!optimize 2
local HttpService = game:GetService("HttpService")
type SecurityMethods = "None"|"LocalUserSecurity"|"NotAccessibleSecurity"|"PluginSecurity"|"RobloxScriptSecurity"|"RobloxSecurity"
type Class_Tags = {
	[number]:"CanYield"|"CustomLuaState"|"Deprecated"|"Hidden"|"NoYield"|"NotBrowsable"|"NotCreatable"|"NotReplicated"|"NotScriptable"|"PlayerReplicated"|"ReadOnly"|"Service"|"Settings"|"UserSettings"|"Yields"
}
type Thread_Safety = "ReadSafe"|"Safe"|"Unsafe"
type Capabilities = "Animation"|"Assistant"|"Audio"|"Avatar"|"Basic"|"CSG"|"CapabilityControl"|"Chat"|"CreateInstances"|"DataStore"|"Environment"|"Input"|"InternalTest"|"LegacySound"|"Network"|"Physics"|"Players"|"PluginOrOpenCloud"|"RemoteEvent"|"UI"
--------^^^^^^ is basically Enum.SecurityCapability
type Value_Type = {
	["Name"]:string;
	["Category"]:string;
}
type AllRobloxClasses = {
	[number]:{
		["Tags"]: Class_Tags?;
		["Superclass"]:string;
		["Name"]:string;
		["MemoryCategory"]:"Animation"|"GraphicsTexture"|"Gui"|"Instances"|"Internal"|"PhysicsParts"|"Script"; 
		["Members"]:{
			[number]:{
				["Capabilities"]:{
					[number]:{
						[number]:Capabilities
					}|{
						["Read"]:{
							[number]:Capabilities
						};
						["Write"]:{
							[number]:Capabilities
						}
					}	
				}?;
				["Category"]:string?;
				["MemberType"]:"Callback"|"Event"|"Function"|"Property";
				["Name"]:string;
				["Parameters"]:{
					[number]:{
						["Name"]:string;
						["Type"]:Value_Type
					}
				}?;
				["ReturnType"]:Value_Type?;
				["Security"]:SecurityMethods|{
					["Read"]:SecurityMethods|{};
					["Write"]:SecurityMethods|{}
				};
				["Serialization"]:{
					["CanLoad"]:boolean;
					["CanSave"]:boolean
				}?;
				["Tags"]:Class_Tags?;
				["ThreadSafety"]:Thread_Safety;
				["ValueType"]:{
					["Category"]:"Class"|"DataType"|"Enum"|"Primitive";
					["Name"]:string;
				}?;
			}
		};
	}
}
type AllRobloxEnums = {
	[number]:{
		Name:string;
		Items:{
			[number]:{Name:string;Value:number}
		};
		Tags:Class_Tags?
	}
}
type API_Dump = {
	Classes:AllRobloxClasses;
	Enums:AllRobloxEnums;
	Version:number
}

type FormattedClass = {
	[string]:string
}
type FormattedClasses = {
	[string]:FormattedClass
}
-- i think there is a few more types that i missed
local TranslateProperties:FormattedClass = {
	["bool"]="boolean";
	["int"]="number";
	["float"]="number";
	["double"]="number";
	["int32"]="number";
	["int64"]="number";
	["int16"]="number";
	["int8"]="number";
}

local success,ret = pcall(HttpService.GetAsync,HttpService,"https://raw.githubusercontent.com/MaximumADHD/Roblox-Client-Tracker/refs/heads/roblox/API-Dump.json")
--Im still standing ahhh loop ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ
while success~=true do
success,ret = pcall(HttpService.GetAsync,HttpService,"https://raw.githubusercontent.com/MaximumADHD/Roblox-Client-Tracker/refs/heads/roblox/API-Dump.json")
end

local Data:API_Dump = HttpService:JSONDecode(ret)

local raw_Classes:AllRobloxClasses = Data.Classes

local Enums:AllRobloxEnums = Data.Enums

local Classes:FormattedClasses = {}
local function RecursiveSuperclassProperties(class:FormattedClass,Superclass:string?):FormattedClass
	if Superclass==nil then return class end
	local search:number? = nil
	for i,v in raw_Classes do
		if v.Name==Superclass then search=i break end
	end
	if search==nil then return class end
	for i,v in raw_Classes[search].Members do
		if v.MemberType~="Property" then continue end
		if v.Security~="None" and (v.Security.Write~="None" or v.Security.Read~="None") then continue end
		if v.ValueType==nil then continue end
		if v.Tags~=nil and (table.find(v.Tags,"ReadOnly")~=nil or table.find(v.Tags,"NotScriptable")~=nil) then continue end
		class[v.Name]=(v.ValueType.Category=="Class" and "Instance") or (v.ValueType.Category=="Enum" and `Enum.{v.ValueType.Name}`) or (TranslateProperties[v.ValueType.Name] or v.ValueType.Name)
	end
	RecursiveSuperclassProperties(class,raw_Classes[search].Superclass)
	return class
end
for i,v in raw_Classes do
	if v.MemoryCategory~="Instances" then continue end
	if v.Tags~=nil and (table.find(v.Tags,"NotCreatable")~=nil or table.find(v.Tags,"NotScriptable")~=nil) then continue end
	local tab:FormattedClass = {}

	for ii,vv in v.Members do
		if vv.MemberType~="Property" then continue end
		if vv.Security~="None" and (vv.Security.Write~="None" or vv.Security.Read~="None") then continue end
		if vv.ValueType==nil then continue end
		if vv.Tags~=nil and (table.find(vv.Tags,"ReadOnly")~=nil or table.find(vv.Tags,"NotScriptable")~=nil) then continue end
		tab[vv.Name]=(vv.ValueType.Category=="Class" and "Instance") or (vv.ValueType.Category=="Enum" and `Enum.{vv.ValueType.Name}`) or (TranslateProperties[vv.ValueType.Name] or vv.ValueType.Name)
	end
	Classes[v.Name]=RecursiveSuperclassProperties(tab,v.Superclass)
end
-- Man im dead ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ”ฅ๐Ÿ’€
return Classes

image-49

I wrote this post on mobile btw :wilted_flower::iphone::fire:

I were writing a plugin relates to classesโ€‹:money_mouth_face::money_mouth_face:

Cuz i havenโ€™t found anybody use this method and use it properly there so i made a post :pensive:

And now you can do:

local module = require("./HelpMePlz")
local part = Instance.new("Part")
print(module[part.ClassName]) ---> returns all properties.

You could also get properties that is read only etc but you can already do that yourself because i provided you types and i will provide you info here also:

Also you probably want to change recursive function into a loop cuz yk recursive is meh.

.Superclass [[
Basically your instance has ALL properties of its Superclass and Superclassโ€™s superclass and so on
]]

.Tags [[
Such as //depeacated //read only and so on
You may see them appear in documentation too


]]

MemoryCategory [[Just a category of Instance]]

.Members [[
Properties of your superclass

  • . Serialization studio related voodoo that basically depends on can Instance be saved or nah
  • .Tags same as the ones i mentioned above
  • .Capabilities relative new Sandbox feature roblox has added i would say a lil expiriemental :money_mouth_face::fire:
  • .Name of our peoperty/function/event
  • .ValueType type of property (nil if its not a property)
  • .Security basically perms of instance is it a resd only/write only or None (if its none then no restrictikns)
  • .ReturnType type that event/function (not sure) returns
  • .Parameters function parameters (nil if its not a function)
  • .MemberType determines if its a Property/Event/Function
  • .ThreadSafety not really sure what is it but i assume its parallel Luau thing
    ]]

.Name its a name of Instance bruh :pensive::money_mouth_face:

I canโ€™t not sneaking a joke everywhere im sorry if it makes post feel unprofessional to you.I just feel that adding jokes makes learning better and having more soul to it yk.

6 Likes

This 403 error is so annoying bro :skull::pray::pray:

A little voodoo but:
You can also technically get default properties:
Do Instance.new and grab all of its properties and then cache them