It was inspired by my frustrations with Studio’s built-in diffing feature being slow and limited , and the tedious external workflow I needed to use whenever I wanted to compare arbitrary scripts My coding life is much easier now that I can use this plugin
Features
Compare arbitrary scripts against each other
View the diffs of any uncommitted drafts (when Drafts Mode is enabled in Game Settings)
Configurable UI scale, code size, and code tab width
Switch between split and combined layouts
Colored preview in the scroll bar
Option to show whitespace (spaces and tabs), and whitespace will also be shown in the hovered line
Filters to ignore noisy changes such as whitespace, indentation, and tabs vs spaces
Basic diff stats such as total added, deleted, and net LOC
Mouse pan scrolling
Copy selected region of text
Open selected region in the original script
Designed to be used efficiently with hotkeys
Light and dark theme
Tree Diff to quickly compare different libraries and instances that contain many scripts, such as the PlayerModule
(Coming Soon) Import/export diffs in text or instance formats
Known Issues
Performing a diff using a hotkey will not bring the Diffy widget to the foreground if it is docked and is not the currently selected tab. As far as I know this is impossible to fix and is a limitation with Studio’s plugin support, but if you have any suggestions please let me know! (Also, recreating the DockWidgetPluginGui instance whenever we want to bring it to the foreground is not a solution because it kicks the user out of any scripts they are editing which is bad UX)
If the Diffy widget is docked in the main viewport, it will not be reachable via Ctrl+Tab, and sometimes when using the Open Script feature the desired script will not be brought to foreground of the main viewport area either. Again these appear to be limitations of Studio’s plugin support
Changing between views will sometimes reset state about whether a script is expanded in the viewport or not. Will fix in the next update.
Buuuut they don’t work in Roblox Studio so they can’t diff uncommitted script changes and are annoying to use if you need to diff lots of script instances against one another. Hence why I made the plugin
If it works for you great, but there’s a lot of people who prefer doing everything in studio. So there’s no reason to contribute absolutely nothing to the discussion by stating the obvious instead of just applauding them for their work to provide a free resource some people will find helpful
Wait what? Completely agreed with Tyridge until I found out this plugin was 6 USD for something I can do with an (almost always) preinstalled command on every operating system that can run Roblox.
Didn’t notice that, but it’s not really even a valid criticism I don’t think. $6 usd for something that by the looks of it took hours to make and can help some people who don’t want to use roblox’s differ or external software/tools like git is fine. It’s $6. That’s a cup of coffee
I don’t understand all this hatred, even though it is paid, it is right that such a well-made tool should be shared. The important thing is to make those who buy it aware that they could use the command line.
Thanks It was many hours of work - you can see on the creator store that I first published the plugin nearly a year ago. Since then I’ve been heavily using it, slowly fixing problems and adding features. And there’s still plenty more work to be done haha!
(2025-02-16) New update: Added Tree Diff feature. So you can now quickly diff big libraries or game components with many scripts such as the PlayerModule. You will also see scripts that have been added/removed highlighted in green/red. Recommended hotkey Ctrl + >.
There are some complications with linking instances together across “old” and “new” versions of a tree, for example when there are instances that have the same name, or when an instance is moved or renamed. To help manage this, three attributes are now supported by Diffy: DiffyId (string), DiffyChildId (string), and DiffyChildOrder (number). These attributes can be applied to instances to control how they get linked together. For more information, see the Help & Settings menu in the plugin
Nice work on this, it seems to be a nice, time-saving plugin. And I like doing things in studio. Easy purchase.
The critique posts above seem to be from people who don’t understand market segmentation. As the original post stated, suggestions are welcome - but instead of articulating how they think it can be made more valuable for their taste, they simply left an unconstructive complaint. Try this instead: “For 6$ I would expect your plugin to at least/also [insert large demand here]”. Then you’ll be constructive instead of unconstructive.