Hey all. I made a simple module (under 50 LOC) to generate new UUIDs into a buffer, which is more memory efficient than a string containing the UUID from HttpService:GenerateGUID(). You can also convert a UUID buffer into a string, as well as create a UUID buffer from a string.
The buffers created by this module contain the UUIDs themselves and not the string representation of them.
I was inspired by a thread asking for making UUIDs smaller so they don’t use as much bandwidth when sent over the network. Someone suggested to use numbers or buffers, and I thought why not?
This version is very simple and doesn’t contain any checks on inputs other than basic Luau typings, use with care.
It contains 3 functions:
-
Generate(): buffer
- Returns a 128-bit buffer containing a random UUID
-
tostring(UUIDBuffer: buffer, wrapInCurlyBraces: boolean?): string
- Returns a string generated from the provided buffer. Wraps the output in curly braces unless the optional
wrapInCurlyBraces
argument is false, similar to GenerateGUID.
- Returns a string generated from the provided buffer. Wraps the output in curly braces unless the optional
-
fromstring(UUIDString: string): buffer
- Returns a 128-bit buffer containing a UUID parsed from the provided string. Any characters other than hexadecimal digits are ignored.
Example:
local UUIDBuffer = require(game:GetService("ReplicatedStorage"):FindFirstChild("UUIDBuffer"))
local UUID: buffer = UUIDBuffer.Generate()
print(UUID)
---> buffer: 0x57f8f16ebee85d65
print(UUIDBuffer.tostring(UUID))
---> {c499365f-8ddd-fd9c-20cd-69cad7ef2896}
print(UUIDBuffer.tostring(UUID, false))
---> c499365f-8ddd-fd9c-20cd-69cad7ef2896
local secondUUID = UUIDBuffer.fromstring("1c439509-2e0b-03a3-a4ab-f3908eed945e")
print(secondUUID)
---> buffer: 0xc8ab2028a219edfd
print(UUIDBuffer.tostring(secondUUID))
---> {1c439509-2e0b-03a3-a4ab-f3908eed945e}