[prerelease 2.2] Jexplorer | Stylizable explorer widget, made with JECS

didnt even know that existed, i just downloaded it and jumped straight in

1 Like

beta 0.18.6:

  • Fixed query arrow visibility and expansion logic
  • Expanded parents are now hidden once a query is stopped
  • Added a query counter number in the query input bar
  • Removed the need to have parentheses between pair expressions in JQL, for example <<(Name = Workspace) & (Prop = [num] 10) turns into <<Name = Workspace & Prop = [num] 10
  • Added the ability to tag for instance tags like Name = SomeName & MyTag, works for properties too since properties are just tags with values
  • Made queries faster
  • Added the @tag(tagName) selector macro and the JEXP_TAG_{tagname} tag which will allow you to select for specific instance frames related to an Instance who has a specific tag, so for example .JEXP_TAG_MyTag > #Main > #ClassIcon will select the class icon labels of all instance frames related to an Instance with the tag “MyTag”
  • Instances under the Favorites abstract entity now have their arrows hidden
  • Doing certain context menu actions with multiple instances selected will now work as expected (for example doing Save To Roblox… with 3 instances selected will save all 3 instead of just the 1 you right clicked on)
  • Jexplorer no longer crashes playtest
  • A few other minor fixes

I wanted to release the updates here in 0.19 but I figured the version control was gonna take a bit longer to implement so I might aswell release these nice fixes for yall before then :V

1 Like

beta 0.18.7:

  • Implemented the instance visibility editor which will allow you to set visibility of specific classes of instances, later on toggling visibility of specific instances will also be implemented
  • Changed plugin button name from Toggle Jexplorer to just Jexplorer
  • Added the “Hide Class” action to the context menu

@Dued1 for #1

Hey guys, sorry for the long wait but unfortunately I have school now. However 0.19 is nearly done, a few features coming is a custom properties widget which you may wanna use if you wanna manipulate Instance type properties and access instance version control, as well as git sync and some other optimizations ive added.

Stay tuned for 0.19, its gonna be a big one :wink:

1 Like

beta 0.19:

  • Added the JProperties widget which you can toggle via the plugin toolbar, next to the button for jexplorer. This is also the only way to get version-controlled instance properties, aside from LuaSourceContainer.Source which is version controlled no matter what.
  • Implemented a primitive prototype for the github sync widget which is accessible via the arrow dropdown, more coming in the following patches!
  • Redesigned PluginUI to be more minimalist, looks alot better imo!
  • Made it so child maps are only rebuilt on a fixed time interval, increased performance for inserting/deleting lots of instances at once
  • Added the Open Instance History, Commit Changes and Save Changes actions to the context menu. Commit Changes will create a new version for that instance, and Save Changes will attempt to append to the latest version if any.
  • Added the instance history widget, version source viewer & version changes viewer (last one is coming soon), you can open the instance history widget by clicking the Open Instance History action in the context menu, and if your Instance is a LuaSourceContainer you can click on one of the versions to open up the version source viewer, which looks something like this: (prone to changes)

Notes:

  • Instance version history is currently not saved across sessions; I plan on implementing this once it’s stable enough, as right now it’s very prone to getting many changes!

  • If you are experiencing performance issues when selecting an Instance with many mutable properties, turn off Update Properties On Update Selection in the setting editor

  • If you don’t wanna manually commit/save your changes everytime, you can turn on Autosave Instance Changes which will save if there is another version within the current hour, or commit if theres not.

  • If you encounter any issues, please do report it! I’ll try my best to respond and fix asap

Credits to:

3 Likes

I’ll give this a go at some point, but in the meantime I have immediately donated since I believe that Roblox’s next gen explorer could do with some humbling lol, keep it up

6 Likes

pseudobeta 0.19.1:

  • Fixed Color3 properties in jproperties editor not working properly when using the color picker
1 Like

Haven’t tested this yet, but if it’s not present, it’d be really nice to see a way to sort instances inside stuff
Like, sorting based on the ClassName or type of instance it is, so that folders and sounds or anything else don’t get mixed up with each-other because it’s sorted by names

Classes are grouped with eachother yes, you can edit it via the order editor widget

1 Like

beta 0.19.1:

  • Improvements when multiple instances are added/removed
  • Optimizations to automatic cleanup and refresh tasks
  • Changed property identifiers to use entities instead of components to avoid messing up the Jecs world archetypes
  • Updated Jecs to 0.9-rc10

This update completely removed lag spikes involving dragger UI, and also just overall made the experience feel nicer.

2 Likes

Hi, I always wanted to have some kind of module integration with explorer, and it would be an extremely good feature if you were able to add some kind of api or comment system in module scripts (or normal scripts) which would allow us to define set of rules on how the value can be edited. I know this is a complex idea and not exactly related to explorer itself, but I still wanted to propose that idea.

1 Like

Hi, the plugins functionality is exposed via shared.Jexplorer, and if you wait until it exists then print it youll see everything you have access to including dependencies

No I meant editing of the properties of the module script, not the plugin itself

Yes, interacting with the systems in place to interact with entities and the world, you can do that via shared.Jexplorer.Manager

Though a more comprehensive api i can work on in 0.20 which is coming today if you can be more specific :smiley:

beta 0.20:

  • MASSIVE performance improvements to Explorer Queries with JQL, queries which used to take a while now are very very very fast! This is due to me seperating explorer query stuff into another World which allowed me to normalize components for every InstanceEntity.
  • MASSIVE performance improvements to removing/adding alot of instances at once, by extension this also means selection dragging has basically no frame drops now!
  • Added a “Select All Queried” button to the query bar
  • Implemented the Context Menu Editor which allows you to configure Jexplorer’s context menu actions, you can do this by providing a path to a ModuleScript in slash-seperated list (for example ReplicatedStorage/Folder/Foo/MyModule), then clicking the “Refresh” button to apply it.
    Heres an example that just adds an Insert Folder action to currently the only context menu which is “Instance”
    return {
    	Menus = {
    		Instance = {
    			"OpenVersionHistory",
    			"Save",
    			"Commit",
    
    			"---",
    
    			"Copy",
    			"PasteInto",
    			"Delete",
    			"Rename",
    
    			"---",
    
    			"HideClass",
    
    			"---",
    
    			"SelectChildren",
    			"CollapseAll",
    
    			"---",
    
    			"InsertFromFile",
    			"InsertObject",
    			"InsertFolder",
    
    			"---",
    
    			"SaveToFile",
    			"SaveToRoblox",
    
    			"---",
    
    			"ToggleFavorite"
    		}
    	},
    	Actions = {
    		InsertFolder = {
    			Callback = function(manager, target)
    				local state = manager.WidgetState
    				local world = state.World
    				
    				local inst = world:get(target, manager.Components.Instance)
    				if not inst then return end
    				
    				local folder = Instance.new("Folder")
    				folder.Parent = inst
    			end,
    			Text = "Insert Folder...",
    			Tooltip = "Inserts a folder.",
    			Icon = nil -- string?
    		}
    	}
    }
    
  • Expanding multiple Instances at once no longer causes frame drops (this was because each toggleExpand call was calling updateVirtualScroller when in reality it could just be called once after all the expands were done, this is what i did to fix it.)

Hopefully in a few more betas Jexplorer should be ready for full release!

3 Likes

For those of you who prefer to edit the context menus via plugins, you can use shared.Jexplorer.Manager.createContextMenu(id: string, actions: {string}) -> ContextMenu to create a ContextMenu, then assign it to shared.Jexplorer.Manager.ContextMenus.Instance to be able to use it

beta 0.20.1:

  • Fixed registerToQueryWorld and explorer query behavior when searching for CollectionService tags
  • Fixed other behavior bugs with explorer queries

In the next betas im gonna be implementing instance tab bar, instance path display (like github) and the github sync thing! Stay tuuuuned

beta 0.21:

  • Added an instance breadcrumb path below the query bar where you can click individual segments to select them, useful when youre traversing instances with lots of children

  • Added an Instance Tab bar above the query bar, Instance Tabs contain their own set of root Instances and you can add them via clicking the ‘+’ button in the tab, selecting the Instances you wanna add then clicking Enter (or Escape if you wanna cancel), or by dragging and dropping your desired instance into the tab button.
    You can also remove tabs by clicking the ‘-’ button and rename tabs by right clicking a tab button then clicking “Edit Name”.
    Note that currently tabs are not saved across sessions, this is a feature that will be implemented in a future patch.

  • Fixed long queries breaking virtual scrolling by removing a faulty tag connection

  • Renamed the “Save” context menu action to “Append” to match “Commit”

  • Improved plugin load times

5 Likes

beta 0.21.1:

  • CanvasPosition now jumps correctly and positions your selected instance in the middle when you select something thats outside the viewport
  • More query optimizations when you have a large amount of parents
  • Beginning progress on transitioning Jexplorer UI from a mix of properties-imperative-styled to purely styled.

beta 0.21.2:

  • Added support for nested style rules in the style editor
  • Fixed several issues with the plugin ui, such as buttons triggering twice and dropdowns not being sized correctly
  • Refactored the default style of InstanceFrames to be in a hierarchy as to be more clear what each style rule affects

This patch is yet another style reset, so sorry for your styles! Soon enough im gonna be differentiating default rules from user defined rules so I can properly migrate them instead of having to reset them, for now try using local plugins to edit your styles!