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
wrapInCurlyBracesargument 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}