Skip to main content

Instances

Roblox instances are not themselves a "data type" that Bufferize.encode accepts, but Bufferize ships with helpers that convert an instance tree into a plain table which can then be encoded.

local b = Bufferize.encode(Bufferize.serializeInstance(workspace.Baseplate))
local baseplateCopy = Bufferize.deserializeInstance(Bufferize.decode(b))

serializeInstance walks the instance and all of its descendants, collecting:

  • The ClassName of each instance.
  • Every readable / writable property that differs from the class default.
  • All attributes set on the instance.
  • All tags set on the instance.

deserializeInstance reverses the process, creating fresh instances and applying the captured state.

Instance references​

Some properties reference other instances (for example ObjectValue.Value or Motor6D.Part0). These references are preserved only when the referenced instance is part of the serialized tree.

local objV = Instance.new("ObjectValue")
local folder = Instance.new("Folder")
folder.Parent = objV

objV.Value = folder
local b = Bufferize.encode(Bufferize.serializeInstance(objV))
local objVCopy = Bufferize.deserializeInstance(Bufferize.decode(b))
-- valid: objVCopy.Value points at the deserialized folder

objV.Value = workspace.Terrain
local b = Bufferize.encode(Bufferize.serializeInstance(objV))
local objVCopy = Bufferize.deserializeInstance(Bufferize.decode(b))
-- not preserved: objVCopy.Value == nil (Terrain wasn't part of the tree)

Permissions​

Properties are only included when:

  • They have both read and write permissions for the current security context.
  • They are not marked as deprecated.

Properties that fail to read are skipped with a warning rather than causing the whole serialization to fail.