if youre trying to wrap an object (so you can add custom properties etc) then you could just store an instance in an empty tables index. (there is more stuff you can do to enhance this properly but i’ll show you the basics)
local Module = {}
function module.new(name)
local object = {}
object.CustomValue = "YAY A CUSTOM VALUE"
--get instances properties/functions
local content = {}
content.__index = Instance.new(name)
setmetatable(object, content)
return object
end
return Module
local m = require(script.Parent)
local part = m.new("Part")
print(part.CustomValue) --> YAY A CUSTOM VALUE