local Params = {
RepoURL = "https://raw.githubusercontent.com/luau/UniversalSynSaveInstance/main/",
SSI = "saveinstance",
}
local synsaveinstance = loadstring(game:HttpGet(Params.RepoURL .. Params.SSI .. ".luau", true), Params.SSI)()
local Options = {} -- Documentation here https://luau.github.io/UniversalSynSaveInstance/api/SynSaveInstance
synsaveinstance(Options)Or shortly USSI, a project aimed at resurrecting saveinstance function from Synapse X.
Reason: Many Executors fail miserably at providing good user experience when it comes to tinkering with saving instances.
Warning
As stated under the Section 7 (b) in the LICENSE:
- You MUST always include the following Credit string:
UniversalSynSaveInstance https://discord.gg/wx4ThpAsmw - You are NOT allowed to claim authorship of the source code provided in this repository
- You MUST always include the following License
Tip
Important part about this saveinstance is that it doesn't modify anything, therefore reduces the amount of detection vectors by a lot.
You can also enable the SafeMode option to completely bypass any detections and save ANY game!
If this script is helpful to you, please click ⭐ Star in the upper right corner of the page to support it, thank you!
https://discord.com/invite/wx4ThpAsmw / https://discord.gg/wx4ThpAsmw
-
Look into adding support for Binary Format Output (rbxl/rbxm)
- Users can already convert to Binary Format by
- Open the File
- Click on top left "FILE" text and select "Save to File As"
- Make Sure rbxl/rbxm format is selected (not XML!)
- Click Save
- .RBXL files are similar to .RBXLX files but are saved in Binary format, which helps reduce the file size.
- ! Check out Rojo Rbx Dom Binary & Roblox Format Specifications Binary for more documentation about the Binary File Format!
- ! Also see buffer, bit32 libraries as well as pack/unpack from the string library for more information on how you can implement something like this!
- ! Rbx-Binary-Format
- Users can already convert to Binary Format by
-
Add table.clone instead {} in some cases if possible
-
Support for Model files:
- rbxmx (xml)
- rbxm (binary)
-
Implement Luau Syntax (important for performance!):
- Compound Operators
- Avoid using
next,ipairs&pairs -
Interpolated strings instead of concatSlower - Type-checking (😩🙀)
-
No reason toif-then-elseexpressions - Floor division
-
Speed things up as much as possible
- Requires benchmarks
-
Support for as many KRNL-like saveinstance Options & UNC:
- Change mode to invalid mode like "custom" if you only want to save ExtraInstances
- Decompile (! This takes priority over OPTIONS.noscripts if set !)
- DecompileIgnore
- DecompileTimeout (! This takes priority over OPTIONS.timeout if set !)
- ExtraInstances
- FilePath
- IgnoreDefaultProps
- IsolateStarterPlayer
- NilInstances
- Object (for .rbxmx files)
- RemovePlayerCharacters
- SavePlayers
- ShowStatus
-
Add Drawing Library support for ShowStatusCan't reliably test if it's working on an executor
-
- IsolatePlayerGui (same as IsolateLocalPlayer)
- Callback
-
CopyToClipboard/ClipboardUse Callback instead - Binary (rbxl/rbxm)
-
Remove buffersize, savebuffer & so on for sake of performance by concatenating strings to total string then writing it to file (no extra steps like table.concat)table.concat proved faster in the case of huge amount of concatenations- Test table.concat vs string ..= with a full buffer (this benchmark differs per usecase)
-
Add Option to restart saveinstance from the point that it crashed on (perhaps by skipping)
-
Maybe modes should do more than just determining the list of instances to save, like changing IgnoreDefaultProperties to false if mode is "full" for example
-
Add Lua & Luau versions instead of merged (WARNING: LUAU MIGHT BE MORE UPDATED THAN LUA VERSION, lua version exists just for the sake of old & bad executors, ask devs of your executors to support luau as its latest & greatest)
-
Add Support for multiple Instances to be saved as a modelIsModel = true & ExtraInstances -
Force disable ParticleEmitters in case something like IgnorePropertiesOfNotScriptsOnScriptsMode is enabled (they stack in one place and create huge lag)
-
Be able to specify which special properties you want saved (to avoid saving all)
Important
This document is based largely on the efforts of @Anaminus & @Dekkonot, authors of the Roblox Format Specifications. Additional resources include:
- Syngp Synapse X Source code 2019 for base saveinstance code (extended by @mblouka & @Acrillis)
- Moon/LorekeeperZinnia for being the original creator of saveinstance that was used in Synapse X, Elysian and many others. As well as being an inspiration for this project.
- Rojo Rbx Dom Xml for being a fallback documentation in case something wasn't clear in the Roblox Format Specifications
- Roblox File Format for a list of redirects of old/deprecated xml properties that still use the old tag values
- Roblox Client Tracker for an extended & close to full JSON Api Dump (with hidden properties & default values)
*** View source code of this file for more credits


