If you don’t like inheritance, then you should use another type of OOP because metatable OOP is for inheritance. C style OOP could also work, or you may use closures if you are paranoid
Metatable OOP is good if you need to store a lot of methods but is very bad when it comes to index speed.
In light version you dont need any of OOP becouse you are not storing anythink also i think its a recursive
Also its generally better to set metatable in the end of a constructor if you are going for metatable OOP:
local function Module.new()
local self = {}
return setmetatable(self,Module)
end