[PLUGIN] trace: A lightweight Roblox Studio plugin for static object path resolution

Trace Logo

Creator Store | GitHub


trace – Resolve Anything* to its Path (Plugin)!

Hi everyone,

I built a Studio plugin (my first plugin) that resolves a selected Lua expression or object into its full path. When you activate the plugin while selecting an object, it opens a script (or a textbox) with the canonical path to the object. If you select a path string or variable (yes, variable!) and activate the plugin, it will select the object the variable references.


SHOWCASE


Use cases

The use cases for object to path are pretty obvious, but when working with indirect references (locals, module returns, chained indexing, etc.), it can be annoying to manually reconstruct the full object path. This plugin analyzes the selected expression and converts it into its canonical form.

For example:

local storage = game:GetService("ReplicatedStorage")
local moduleA = storage.ModuleA
local object = moduleA.ObjectA

Selecting:

object

Resolves to:

game:GetService("ReplicatedStorage").ModuleA.ObjectA

What it supports

  • Local variable resolution
  • Property chaining (a.b.c)
  • game:GetService()

It reconstructs the path without executing any code.


What it does not do

This is not a Lua interpreter. It intentionally does not support:

  • Loops or conditionals
  • Function execution
  • Metatables
  • Runtime logic

If something can’t be resolved statically and safely, it will fail instead of guessing.


Why I made it

I wanted something reliable for:

  • Refactoring
  • Debugging structures
  • Verifying indirect references
  • Generating paths for tooling

There are ways to do this with loadstring, but I didn’t want any code execution inside a plugin. So this is purely static path evaluation.


TL;DR:

  • Object → Path string
  • Path string → Object
  • Variable → Object

If anyone has feedback, edge cases, or suggestions for improvements (especially around instability or performance), I’d appreciate it.

Thanks.
– ig1oo1


*Not actually anything, it’s mostly for dramatic effect `:P

Oh, also, I’d greatly appreciate it if you liked and replied to this post to increase its exposure! Thanks! :folded_hands:

a man in a suit and tie is standing in a dark room looking down .

6 Likes

Ok, that looks cool as a lightweight path parser althrough:


Yeah, Roblox REALLY hates parsers for some reason.
What about it supporting Narrowing the LuaBridge overhead (old)
?
Maybe have a setting to define “Getter” function name?
Like GetProperty
So, like:

GetProperty(workspace,"Part") --> game.Workspace.Part
3 Likes

Wow. It immediately got taken down :rofl:.


It doesn’t even violate any of these:


Thank you for the feedback. I looked into it, but it seems to have a very minimal impact. I may consider incorporating these changes if Roblox doesn’t take it down again and if it grows in popularity, but for now, I am fine with direct referencing.

Oh, also, I realized I did the GitHub repo entirely wrong - I accidentally put the .rbxl file in the source folder :sob:. I know I need to put each individual component of the plugin (so it’s readable), but I’m not sure how to include GUI, as some scripts (purely for visuals) are in the GUI. Anyone got any ideas?

Update - v2.0.0:

  • Completely refactored the plugin—split each section into its own module
  • Properly created the Github source code folder (src)
  • I don’t know if this was worth an entire version change, but it was a lot of work :broken_heart:

I just appealed, but I realized that each time I published the plugin to test it, a new moderation removal item was created… I hope this isn’t violating this rule :sob:
image

Added a video showcasing it.

trace is back on Roblox!

They accepted my appeal and relisted it on the creator store. I would appreciate it if you could give it a quick try. Thanks!

Why is the topic title quite literal clickbait??

1 Like

For exactly that reason - I want people to click :rofl:

Update - v2.1.0

  • Rewrote the EvaluateExpression function in Modules/ExpressionResolver.luau.
    • Fixed require, GetService, and root parsing
    • Allowed the 3 above to be chainable

Have you gotten a chance to test out the plugin since it was put back up on the creator store?