# Support table as first argument to newproxy ## Summary Introduce a new way of creating `userdata` objects from Luau with an existing metatable. ## Motivation Since Luau is derived from Lua 5.1 it retains the `newproxy` function used to create custom `userdata` objects from Lua. While this function is used by a number of libraries it has its limitations. The `newproxy` function accepts a single, boolean parameter which specifies if the newly created `userdata` should be initialized with a metatable or not. If the `userdata` is initialized with a metatable then it can be retrieved and edited by calling `getmetatable`. Unfortunately, this means that a `userdata` created through `newproxy` cannot share a metatable with another `userdata`. There are two main implications of this: - Memory - A `userdata` with a metatable has the same cost as a table with a metatable. - Usability - `userdata` with the same 'type' do not have the same metatable. ## Design TODO ## Drawbacks TODO: It will increase the usage of newproxy which may not be desirable. ## Alternatives TODO: New method entirely - add more support for userdata