Exestack | Code executor, snippets, and more scripting utilities!

Update 0.3.0


BytExecutor2

Additions

  • Added two new experimental options.
    • Save Current Directory Position: Allows you to save the current directory you are in and loads it across sessions.
    • Force Unique Names: Forces elements in their directory to have unique names
  • Added several new options.
    • Default Snippet and Folder names.
    • Swap Behavior of Create Element Icon: Lets you restore the 0.1.0 behavior for the create element icon.
    • Select Elements Dragged On Opening Folder: Automatically reselects elements that you dragged inside a folder.
    • Open Folder On Drag: Whether BE2 opens a folder on dragging something inside it.
    • Fast Saving: Utilize the legacy saving behavior of BE1.
  • Added a proper folder to place backups.
    • A new action called Load Last BytSources Backup was implemented in the pop-up menu.
  • Added a new type to BytLib:Require(module) where module can be a string. This loads a byt rather than a regular ModuleScript.
    • This also means that byts can now return values.
    • More information can be found in the Help section.

Changes

  • It is now possible to edit scripts with ServerClientExecution enabled during playtesting. (bugs are to be expected)
  • Replaced the \ in the directory name with /.
  • Parent element is now more responsive when entering with a mouse.

Fixes

  • Imported scripts now replace spaces with underscores.
  • Fixed issue where the custom script editor would sometimes fail to auto-indent in cases such as function Foo.bar().

General

Additions

  • Added new Debug options.
    • Logging Enabled: Prints content onto the console.
    • Log Noncritical: Prints non-critical messages onto the console.

Changed

  • Increase the minimum size of the Preferences widget.

Fixes

  • Improved internal codebase.
1 Like

Patch 0.3.1

Mostly small changes. I’ve been busy doing other stuff lately and I probably want to wrap up BytExecutor2 for now (there will still be stability updates and all that) and work on something new.


General

Additions

  • Building the plugin. A CLI-like tool has been provided and the help menu is obtained by typing --exestack -h into the command bar or running print("> --exestack -h") as a byt. This should make accessing Exestack’s code a little easier.

BytExecutor2

Changes

  • Updated the custom script editor to highlight SharedTable and some other miscellaneous globals.
  • Improved dragging functionality. You don’t need to hold your clicks for ~0.35 seconds anymore and should resemble more like actual dragging.

Fixes

  • Fixed some small issues with buttons.
  • Patched potential small memory leak when creating byts.
1 Like

Im ditching my plugin for this you bet bro :100: FIRE RELEASE

1 Like

Update/Patch 0.3.2

A small update focusing on the overlooked feature of Exestack. It’s time for snippets to receive a little bit of love!


Snippets

Additions

  • Snippets now show a preview of their contents.
  • Snippets show usage information in its description.
  • When typing a snippet it will now show potential snippet calls that match.

Fixes

  • Snippet labels used to show an incomplete label. This is now fixed.
  • Cleaned up some snippet code.

BytExecutor2

Fixes

  • Update warnings for editing byts when using Server/Client Execution.
  • Small codebase improvements.

On a final note, I should probably explain some of BE2’s experimental options. It came to me recently that some of them aren’t super clear on what they do. Here is a more detailed explanation of all the experimental features.

Redirect Byt Script Errors makes error messages sent by byts clickable. BE2 executes scripts by creating a module script with the same code as the byt and requiring it. When an error is emitted, Roblox creates a link from the error message to the module script. This module script is not the actual byt, so BE2 by default tries to break that link. With this option enabled, BE2 tries to redirect the link to the byt script itself.

Inject Execution Control Into Byt Sandbox allows you to pause or terminate scripts. It uses setfenv to hook onto some yielding functions (not all of them, which makes it break sometimes), so it nullifies some of Luau’s optimizations. This option came from the first BytExecutor as Sandbox Byts During Execution.

Custom Script Editor lets you use the Ode Script Editor rather than the default one. It is a little buggy and not of high importance, so it has been put under experimental.

Server/Client Execution enables the ability for you to quickly execute byts on both the server and client during playtesting. It has a bulky and unwieldy implementation (that I won’t get into) with potential for many bugs, and it “pollutes” your place with instances. BE2 will try to clean these up, but it may fail. S/C execution mimics a similar feature built into InCommand.

Save Current Directory Position saves your current location in directory. Dependent on saves, which is why it’s experimental.

Force Unique Element Names forces byts and folders in the same directory to have different names. Allows better usability of one of BytLib’s methods but is incompatible with previous versions of BE2.

0.4.0 Update

Somewhat recently, Roblox announced the new Creator Store that is intended to make Roblox plugin development a more viable income option. Alongside a recent push for developers on Roblox to value their work, plugins are becoming increasingly locked behind larger paywalls. Some of you may also be aware that this plugin’s inspiration, InCommand, has upped their price to 8k :robux_gold:.

While I support the decision of any developer to do this, I have decided that I will not charge money for my own plugin. Exestack will remain free and open-source for the foreseeable future. However, if you like Exestack and wish to support me and my work, you can donate to my recently opened ko-fi page: https://ko-fi.com/spacecube9

Anyways, here is this update’s changelogs.


BytExecutor2

Screenshot 2024-03-16 144125

Additions

  • Local byts can now be created via the “Create Local Byt” in the advanced menu. This automatically creates the BytLocalSync folder for you and should speed up the creation of local byts dramatically.
  • Byts can now ask for a string input via the BytLib.Input(prompt: string?) method, allowing for more versatile and dynamic scripts.

Fixes

  • Fixed issue where rename button is covered by the generic advanced menu
  • Server/Client Execution now stores the correct display order in editing during playtesting.
  • Fix status update not displaying properly after waiting in a byt script.
  • Updated the copyright page to 2024.
  • Improved internal codebase.

I’m aware of a bug with how the custom script editor displays highlighted text introduced through one of Roblox’s updates to TextBoxes. I will attempt to fix this soon, but for now, I would recommend you use the default Roblox script editor, since it supports more features and is compatible with other plugins (including Exestack’s Snippet feature).

2 Likes

Alright, I have to admit. This is a huge one! I personally have been using Exestack since its release and for sure I can say this is a heads up! Amazing work and continue the effort!

Patch 0.4.1

BytExecutor2

Fixes

  • Updated the custom script editor to the latest version, which fixed a bug involving the TextBox scrolling update. It should be safe to use now.
2 Likes

Patch 0.4.2

Most of this patch is dedicated to the .ExportToModule method.

BytExecutor2

Additions

  • Added the clone command as part of the more menu. This is a temporary addition.

Changes

  • Added support to many more types in the .ExportToModule (ETM) method. Here are all the new supported types:
    • CFrame
    • UDim2
    • UDim
    • EnumItem
    • NumberSequence
    • NumberSequenceKeypoint
    • NumberRange
    • ColorSequence
    • ColorSequenceKeypoint
  • Added additional type annotations to some BytLib methods.
  • Improved readability for some exported modules.
-- before
return {
	["udim2"] = UDim2.new(1, 1, 1, 1),
	["color"] = Color3.fromRGB(43, 199, 255),
	["user name"] = "Roblox",
	["numseq"] = NumberSequence.new({
		[1] = NumberSequenceKeypoint.new(0, 0, 0),
		[2] = NumberSequenceKeypoint.new(0.23940150439739227, 0.5874999761581421, 0),
		[3] = NumberSequenceKeypoint.new(0.3640897870063782, 0.25, 0),
		[4] = NumberSequenceKeypoint.new(0.5685786008834839, 0.6875, 0),
		[5] = NumberSequenceKeypoint.new(0.6583541631698608, 0.7875000238418579, 0),
		[6] = NumberSequenceKeypoint.new(0.971321702003479, 0.09375, 0),
		[7] = NumberSequenceKeypoint.new(1, 1, 0),
	}),
	["enum"] = Enum.KeyCode.Right,
}

-- after
return {
	udim2 = UDim2.new(1, 1, 1, 1),
	color = Color3.fromRGB(43, 199, 255),
	["user name"] = "Roblox",
	numseq = NumberSequence.new({
		NumberSequenceKeypoint.new(0, 0, 0),
		NumberSequenceKeypoint.new(0.23940150439739227, 0.5874999761581421, 0),
		NumberSequenceKeypoint.new(0.3640897870063782, 0.25, 0),
		NumberSequenceKeypoint.new(0.5685786008834839, 0.6875, 0),
		NumberSequenceKeypoint.new(0.6583541631698608, 0.7875000238418579, 0),
		NumberSequenceKeypoint.new(0.971321702003479, 0.09375, 0),
		NumberSequenceKeypoint.new(1, 1, 0),
	}),
	enum = Enum.KeyCode.Right,
}
  • Updated about page to include this DevForum post.

Fixes

  • Slightly improved ETM performance.
  • Fixed ETM not exporting Vector3s correctly.
  • Fixed ETM not exporting colors correctly.

Hey :wave:, I noticed that the link to the plugin is no longer working. Could you please check and update it? Thanks!

Apparently the plugin was removed for “violating Roblox community standards”. Idk what my plugin did to deserve this, but I’ll try to file an appeal.

Hi, would it be possible for you to send the rbxm file for the plugin here while we wait for it to be put back on the marketplace? I just found out about this plugin and wanted to try it out but was disappointed to see it was removed by Roblox :confused:

Sure! I’m not sure if I could do so publicly on the Forum since that could be seen as attempting to bypass Roblox’s moderation, but I can DM you the file if you want.

1 Like