Inxpect|Easy & efficient Roblox API maps

A super easy and efficient API map builder for Roblox,
with plugin support and smart cross-communication.

Module buttonGithub button




:ninja: The hidden Roblox API

On Roblox, there is no built-in way to view the API
and e.g. see which properties a certain instance has.

Inxpect allows you to easily inspect what was otherwise hidden.

:sparkles: Fast, easy, smart.

It’s super efficient, easy-to-use, and has full plugin support.

It will intelligently communicate with copies of itself from other plugins, ensuring
only 1 script does the hard job, and that multiple identical maps never coexist.

If an already up-to-date map is found in cache, it won’t generate a new one.

In plugins, it even partially works offline and while the game is running.
This is possible due to its intelligent caching.

Note that the first time, you have to use it with internet connection,
and it’s also not gauranteed to be fully up-to-date when using offline.


Additionally, the syntax can’t get any simpler!

local apiMap = require(script.APIMap) -- 'APIMap' is Inxpect.

And don’t worry, it only provides what’s important:

local apiMap = require(script.APIMap) :: {
	-- Classes.
	[string]: {
		-- Properties.
		[string]: {
			-- Property info.
			Type: string,
			Locked: boolean
		}
	}
}

:light_bulb: Example usage:

local apiMap = require(script.APIMap) -- 'APIMap' is Inxpect.

local function printProperties(class)
	local properties = apiMap[class]
	
	local output = class.."'s properties:"
	for name, info in properties do
		output ..=
			"\n\n    Name: "..name..
			"\n    Type: "..info.Type..
			"\n    Locked: "..tostring(info.Locked)
	end
	print(output)
end
printProperties("Part")
💡 See output
Part's properties:

    Name: RightParamB
    Type: number
    Locked: false

    Name: CFrame
    Type: CFrame
    Locked: false

    Name: RightSurface
    Type: Enum.SurfaceType
    Locked: false

    Name: Mass
    Type: number
    Locked: true

    Name: archivable
    Type: boolean
    Locked: false

    Name: Friction
    Type: number
    Locked: false

    Name: FrontParamB
    Type: number
    Locked: false

    Name: BottomSurface
    Type: Enum.SurfaceType
    Locked: false

    Name: ExtentsSize
    Type: Vector3
    Locked: true

    Name: CollisionGroup
    Type: string
    Locked: false

    Name: AssemblyMass
    Type: number
    Locked: true

    Name: AssemblyLinearVelocity
    Type: Vector3
    Locked: false

    Name: Elasticity
    Type: number
    Locked: false

    Name: FrontParamA
    Type: number
    Locked: false

    Name: MaterialVariant
    Type: string
    Locked: false

    Name: RightParamA
    Type: number
    Locked: false

    Name: Parent
    Type: Instance
    Locked: false

    Name: Massless
    Type: boolean
    Locked: false

    Name: CollisionGroupId
    Type: number
    Locked: false

    Name: AssemblyRootPart
    Type: Instance
    Locked: true

    Name: Locked
    Type: boolean
    Locked: false

    Name: Material
    Type: Enum.Material
    Locked: false

    Name: Size
    Type: Vector3
    Locked: false

    Name: BackSurface
    Type: Enum.SurfaceType
    Locked: false

    Name: LocalTransparencyModifier
    Type: number
    Locked: false

    Name: CustomPhysicalProperties
    Type: PhysicalProperties
    Locked: false

    Name: Rotation
    Type: Vector3
    Locked: false

    Name: ReceiveAge
    Type: number
    Locked: true

    Name: Name
    Type: string
    Locked: false

    Name: className
    Type: string
    Locked: true

    Name: RobloxLocked
    Type: boolean
    Locked: true

    Name: LeftParamA
    Type: number
    Locked: false

    Name: CastShadow
    Type: boolean
    Locked: false

    Name: PivotOffset
    Type: CFrame
    Locked: false

    Name: Origin
    Type: CFrame
    Locked: true

    Name: TopSurfaceInput
    Type: Enum.InputType
    Locked: false

    Name: Anchored
    Type: boolean
    Locked: false

    Name: FrontSurfaceInput
    Type: Enum.InputType
    Locked: false

    Name: BottomParamB
    Type: number
    Locked: false

    Name: AssemblyAngularVelocity
    Type: Vector3
    Locked: false

    Name: Capabilities
    Type: SecurityCapabilities
    Locked: false

    Name: BottomSurfaceInput
    Type: Enum.InputType
    Locked: false

    Name: CanCollide
    Type: boolean
    Locked: false

    Name: Sandboxed
    Type: boolean
    Locked: false

    Name: EnableFluidForces
    Type: boolean
    Locked: false

    Name: LeftSurface
    Type: Enum.SurfaceType
    Locked: false

    Name: CurrentPhysicalProperties
    Type: PhysicalProperties
    Locked: true

    Name: Transparency
    Type: number
    Locked: false

    Name: ExtentsCFrame
    Type: CFrame
    Locked: true

    Name: ClassName
    Type: string
    Locked: true

    Name: Orientation
    Type: Vector3
    Locked: false

    Name: Reflectance
    Type: number
    Locked: false

    Name: AssemblyCenterOfMass
    Type: Vector3
    Locked: true

    Name: FormFactor
    Type: Enum.FormFactor
    Locked: false

    Name: Pivot Offset
    Type: CFrame
    Locked: true

    Name: ResizeableFaces
    Type: Faces
    Locked: true

    Name: CanQuery
    Type: boolean
    Locked: false

    Name: brickColor
    Type: BrickColor
    Locked: false

    Name: Velocity
    Type: Vector3
    Locked: false

    Name: SourceAssetId
    Type: number
    Locked: true

    Name: TopSurface
    Type: Enum.SurfaceType
    Locked: false

    Name: TopParamB
    Type: number
    Locked: false

    Name: TopParamA
    Type: number
    Locked: false

    Name: SpecificGravity
    Type: number
    Locked: true

    Name: RotVelocity
    Type: Vector3
    Locked: false

    Name: RootPriority
    Type: number
    Locked: false

    Name: BottomParamA
    Type: number
    Locked: false

    Name: RightSurfaceInput
    Type: Enum.InputType
    Locked: false

    Name: Archivable
    Type: boolean
    Locked: false

    Name: ResizeIncrement
    Type: number
    Locked: true

    Name: formFactor
    Type: Enum.FormFactor
    Locked: false

    Name: BackSurfaceInput
    Type: Enum.InputType
    Locked: false

    Name: Position
    Type: Vector3
    Locked: false

    Name: BackParamA
    Type: number
    Locked: false

    Name: DataCost
    Type: number
    Locked: true

    Name: CenterOfMass
    Type: Vector3
    Locked: true

    Name: CanTouch
    Type: boolean
    Locked: false

    Name: Color
    Type: Color3
    Locked: false

    Name: BackParamB
    Type: number
    Locked: false

    Name: LeftSurfaceInput
    Type: Enum.InputType
    Locked: false

    Name: BrickColor
    Type: BrickColor
    Locked: false

    Name: LeftParamB
    Type: number
    Locked: false

    Name: FrontSurface
    Type: Enum.SurfaceType
    Locked: false

    Name: UniqueId
    Type: UniqueId
    Locked: true

    Name: Shape
    Type: Enum.PartType
    Locked: false

    Name: AudioCanCollide
    Type: boolean
    Locked: false

:video_game: Using it in a game.

Install Packet+ if not already installed.

Now ensure that your packet definitions module is tagged Packets, so that Inxpect can find it.
Then put this GetAPIMap packet in your packet definitions module:

local Packet = require(script.Packet)

return {
	GetAPIMap = Packet():Response(Packet.Any)
	-- The rest of your packets.
}

Then you can use Inxpect just like usual!

:bell: Don’t forget to stay up-to-date!

It’s highly recommended to have the latest version at all times. This ensures:

  • Newest features.
  • Best performance.
  • Fewest issues.

You can view all releases (versions) and what they contain at the GitHub repository.
Major updates will be posted here, in the replies section, too.

:loudspeaker: Share your thoughts!

Make sure to report any bugs or mistakes you discover regarding this resource, and leave additional feedback so that I can continue improving it.

I’ll make sure to answer all questions you have, just let me know.




Like what you see?
Check out my other projects!

∙ ​ Tween+|Advanced & performant tweening
∙ ​ Text+|Custom fonts & advanced control
∙ ​ Signal+|Insanely optimized script signal

Tags

library module script open source scripting simple easy efficient fast smart Roblox API class properties types map plugin support

21 Likes

:package: Version 1.2

:hammer_and_wrench: Changes & fixes:

  • Fixed the possiblity of it attempting to build the map as a plugin at game runtime.
  • Changed constant checking loop to a signal wait connection.
  • Made isPublicProperty function more readable.
  • Renamed MapCached attribute to APIMapCache.
  • Renamed MapCache attribute to APIMapCache.
  • Comment changes and additions.

:package: Version 1.3

:sparkles: New features:

  • Added smart cross-communication in game context.
  • Added intelligent plugin caching and sharing for when running offline in a plugin.

:hammer_and_wrench: Changes & fixes:

  • Added Map type to 1 return statement where it was missing.
  • Changed if-block in API dump loop to an if-then-continue statement.
  • Comment changes and additions.
  • Updated library description.

:package: Version 1.4

:sparkles: New features:

  • Properties are now tables, and with it comes a new Writable boolean for each property.

:hammer_and_wrench: Changes & fixes:

  • Read-only properties are no longer filtered out.
  • Comment changes and additions.

Note the new change in map structure. Documentation in the main post has been updated.

:package: Version 1.5

:sparkles: New features:

  • Full support for server/client in games. Requires Packet+.

:hammer_and_wrench: Changes & fixes:

  • Services used only in one context are now only defined within that context.
  • Minor comment changes and additions.

Note that Packet+ is now required for game use.

:package: Version 1.6

:hammer_and_wrench: Changes & fixes:

  • Removed Writable property info and added Locked as a replacement.
  • Added version caching for ensuring an up-to-date map, but never updating more than necessary.
  • Lots of fixes and minor improvements to use of storage and what map to use.
  • Enabled native code generation for especially faster map building.
  • Optimized superclass list invertion by using a localized index counter instead of table.insert.
  • Added an early exit for tag search.
  • Now exports the APIMap type for outside use.
  • Changed storage key names.
  • Removed unnecessary nil at variable initializations.
  • Variable name changes.
  • Comment changes and additions.

Note the removal of Writable and the addition of Locked.

3 Likes

Would it be possible to make it tell you the default values of the properties?

2 Likes

Unfortunately this is not a part of the Roblox API.

The defaults are a part of the instance creation — and, the instance creation via the Luau API, versus via the explorer in Studio, is different.

You can check the default for the Luau instance constructor by simply creating an instance with the property, then checking what it is right after creation.

1 Like