I’m glad you asked! I was hesitant to mention it again for fear of taking over the thread. https://docs.rbxmod.com is the url you are looking for. The new website I’ll probably release today has more information.
Basically right now RBXMods allow you to upload a script and run multiple instances of it independently of Roblox servers. It communicates to Roblox via an async function call which passes arguments and results over the network transparently as JSON. Calls to the RBXMod are stored in a queue so the RBXMod can continue running until it is ready to handle them. Once a handler is assigned, the RBXMod can yield to handle a call. RBXMods currently support a Pages API which allows persistent storage as a replacement for DataStores.
Pages are a cross between a Lua table, a database, and a file. It doesn’t use journaling like databases but has “rows” and “columns”. To add a row you use a table with the appropriate column names, and getting a row returns a table with the column names. It is stored in a custom format which is paged into and out of RAM at the OS’s pleasure for performance (you can have HUGE pages in virtual ram and only pieces will be in physical ram). There is also a flush method to make sure all changes reach physical storage before it returns for stronger guarantees. The docs at https://docs.rbxmod.com has more information on the pages library.
This is what a basic RBXMod which echos back its arguments with a message looks like:
local function handler(...)
return "Hello, Roblox!", ...
end
RBXMod.SetHandler(handler)
while true do
RBXMod.Yield()
end
To include pages:
-- Page Page.New(string name, int initNumRows, array columns)
local myPage = Page.New("myPage", 32, {
Page.Type.String ("Name", 64),
Page.Type.Number "Score",
Page.Type.Bool "IsBanned",
})
-- void Page:Set(int index, map values)
myPage:Set(0, {
Name = "Joe",
Score = 0,
IsBanned = true,
})
-- map Page:Get(int index)
local row = myPage:Get(0)
print(row.Name, row.IsBanned)
RBXMods are a replacement solution for private modules, universe scripts (inter-game scripts really), messaging service, and data stores. There is also support for better network access, compiled libraries, and multi-thread / multi-processor / multi-node computing.