Downloads: | Creator Marketplace | GitHub
You can support me and Exestack on https://ko-fi.com/spacecube9!
Exestack is a general purpose scripting plugin that helps developers with anything script related. It is a compilation of useful and powerful utilities design to empower programmers do their work faster. It includes an in-studio executor, a snippets program and a performance profiler, with even more to come!
BytExecutor2
BytExecutor2 is an in-studio, code executor designed as a completely free yet powerful alternative to InCommand. It can create, run, and save your multi-lined code from within studio without having to rely on the command bar, sporting a sleek and modern interface. It’s also packed with useful QoL features such as contextual exporting, error redirects, and a utility library.
On a sidenote, Exestack actually originated as a complete redesign to my original BytExecutor, so Exestack’s strongest utility is still the in-studio script executor. Here is an incomplete list of everything that is new or has changed since BytExecutor 1 for everyone who used it:
-
Explorer system: BE2 now has a folder element to better organize your byts.
- Interacting with byt elements has also changed. Editing a byt script is now a double-click, removing some clutter from its available icons.
- Opening folders is also a double-click
- Interacting with byt elements has also changed. Editing a byt script is now a double-click, removing some clutter from its available icons.
- Tutorial: A tutorial for using BE2 is provided by default. This is where I will put documentation and is why this post does not contain a guide for using it. I highly recommend you read it.
- Pop-up menus: Right-clicking on empty space gives you a pop-up menu with actions such as saving and loading backups, running scripts outside BE2 (like with RunLSC), etc.
- Custom code editor: You may now use a custom code editor over the native one Roblox provides. In order to use it you need to enable it in the experimental options.
- Error message redirects: In BE1 whenever an error occurs it spits out an error log that unfortunately isn’t a link. BE2 creates redirect script errors that brings you to where it actually occurred. It is another experimental feature and needs to be enabled in order to be used.
- Server/Client execution: BE2 can now run byts from either the server or client without having you to switch testing mode, saving time. It is an experimental feature and needs to be enabled in order to be used.
-
Lazy saving: Previously BE1 saved a byt every single time you reselected a script. Now it only saves every half second during state changes. Hopefully this reduces data loss that was present in BE1.
- Additionally, you can now create backups for when you do lose your byts
- Simplified top bar: There is less clutter at the top of the widget compared to BE1.
- More key binds: There are a couple of new key binds BE2 provides to execute scripts without using the mouse.
-
Trimmed byt library: BE1’s library (or “API” as I called it back then) contained too many unnecessary methods with questionable use cases. They were reduced to only three methods but hopefully three that are actually useful. To access it use
local BytLib = require(script.BytLib)
. More information is available in theHelp
option. - Snippet elements: BE2 now has snippets that reduce boilerplate code.
Snippets
Coding can occasionally be repetitive. Boilerplate like getting LocalPlayer
, getting Services and creating classes uses the same code over and over again. But what if you only had to write it once? This is where snippets come in. They emerged as a general solution to all the extremely repetitive and simple code and many IDEs either directly support snippets or have a plugin or extension. Exestack provides its own snippet utility.
Snippets don’t actually have their own widget. Instead they are embedded into BytExecutor2 to take advantage of its Explorer system. To create a snippet, right click the plus icon in the top-left and choose New Snippet
. A typical snippet may look something like this:
--@class/${className}
local ${className} = {}
${className}.__index = ${className}
function ${className}.new()
local properties = {}
return setmetatable(properties, ${className})
end
There are two main parts of a snippet: the call line and the body. The call line is formatted as --@(snippet name)/${var1}/${var2}/ ...
, where (snippet name)
is the name of the snippet, and all the ${var}
stuff afterwards is the name of a placeholder that you can fill in later. The body comes immediately after the call and is the code you want to put in.
As an example, if you wrote
--@class/Topic
it autocompletes into:
local Topic = {}
Topic.__index = Topic
function Topic.new()
local properties = {}
return setmetatable(properties, Topic)
end
Performance Profiler
Sometimes it’s important for us to review the performance of our code. Faster is better, so Exestack provides a way for you to have an overview over overall speed.
The performance profiler can be accessed via a byt script using BytLib.Perf(runs: number, {[string]: function})
. This feature is still in alpha and under heavy development so expect lots of bugs, missing features, and overall ugliness.
Plans for the Future
Nothing here is guaranteed. Expect things to change.
Exestack is still in alpha, so there are still a lot a things I want to do. Here is what is currently in my to-do list.
BytExecutor2
Add basic Rojo support/compatibility- Add better control over the positions of elements
- Improved tutorial
Improved backups
Snippets
- Evaluate current DX and improve it if possible
- Better edge-case and error handling
Performance Profiler
Add ability to compare different functionsImproved visualsImproved presentation of statistical informationImproved overall histogram
Utilities
- Documentation reader: An in-studio documentation reader for external resources.
- Script Templates: Replaces some default code for scripts with developer-defined code
- Block Coding: A visual programming widget
- Stylizer: Detects and removed deprecated and/or bad practice code
- Yue: Reduces small boilerplate code that isn’t easily covered by snippets
- Script Statistics: Read interesting statistics on your scripts