OpenCloudTools - Open Source Datastore/MessagingService Tools

Open Cloud Tools is a desktop application for Windows and MacOS that allows you to interact with Roblox’s Open Cloud API, currently focusing on the Datastore and MessagingService APIs. Open Cloud Tools supports viewing, editing, reverting, bulk downloading, bulk deleting, and much more.

Download the latest version for Windows or Mac on the Github Releases page.
Get the source code or report an issue on Github.

Thanks to user @Loominatrx for the new Icon and OP images.



A short video demonstrating MessagingService

More Videos

An outdated video demonstrating some of what OpenCloudTools can do. A lot more has been added since this was recorded.

More Screenshots

Messaging Service

Send messages that your game servers can consume using MessagingService.

Basic Datastore Operations

  • List datastores
  • List datastore entries
  • View entries
  • View entry version history
    • View or revert to old versions
  • Edit entries
  • Delete entries

Advanced Datastore Operations

  • Bulk Download
    • Dump all of the entries in one or more datastores to a sqlite database. This data can later be uploaded through the ‘Bulk Upload’ operation.
  • Bulk Delete
    • Delete all of the entries in one or more datastores.
  • Bulk Undelete
    • Scan one or more datastores for deleted entries and restore their previous version.
  • Bulk Upload
    • Upload a sqlite datastore dump. This can be used to restore from a backup or transfer data from one universe to another.

Creating an API Key

To create an API key, go to the Credentials page of the Roblox Creator Dashboard and click the “Create API Key” button.

Messaing Permissions

The only permission available for Messaging is ‘Publish’, which is required to send messages.

DataStore Access Permissions

The bare minimum permissions that the key will need to list and view entries are:

  • List Datastores
  • List Entry Keys
  • Read Entry

A read-only key can also optionally include:

  • List Versions
  • Read Version

The remaining permissions all allow modifying the datastore and you should give them out as needed:

  • Create Datastore
  • Create Entry
  • Update Entry
  • Delete Entry

A new release is now available, now with a Mac build. The Windows build has some small UI tweaks but no real new features.

Edit: Removed link so there isn’t an outdated build in the second post.


How does one go about installing this, can you provide links for installation or a video on how to install?



Just download and run it from the latest release on the Github Releases page. is the Windows version and OpenCloudTools-20220603.0.dmg is the Mac version.

For windows just extract the zip and run OpenCloudTools.exe which is inside it. For Mac open the .dmg and drag the .App bundle to Applications before running it.


Isn’t this the same thing as any other ‘datastore editor’ plugin? Nice job though.

1 Like

somewhat, but it allows you to edit it without being in Roblox studio


after messing with this for a bit, i really like it! do you think you could add a feature to basically nuke keys under a datastore? also i noticed a bug, when i deleted numerous keys under a datastore, it never refreshed, even after i clicked find all again


That tool is so useful ! Thank you for making this !


Right now it is quite similar, but it has a couple compelling features compared to datastore editor plugins.

  • Because this uses the Open Cloud API, it supports very granular permissions management. With Studio plugins, anyone who can open a place has full read/write access to all of that place’s datastores. With the Open Cloud API, you can create read-only keys or keys that only have access to specific datastores.
  • OpenCloudTools is a proper desktop application that isn’t limited by Studio’s Lua API. So far it doesn’t do anything that couldn’t be done from a plugin, but I’m working on a feature right now to dump the entire contents of a datastore to a sqlite database. That sort of thing can’t be done with a Studio plugin.

I also plan on continuing to update this program as more OpenCloud APIs become available to cover as much as possible.

edit: I also posted a new bugfix release yesterday which should help anyone who was having problems with “response did not contain userids”


I will be adding more features around deletion soon, hopefully including fully deleting a datastore.

Unfortunately for the issue with deleted keys, that is just how the API works right now. After a given key has been deleted, it will still appear in the list until all of the old versions have aged out, which is about 30 days after the last update.

1 Like

I was thinking on doing the same thing in Swift lol. Anyways great plugin for management. I think the UI interface could be improved, but I can also contribute to that :slight_smile:

1 Like

Just wondering, did you use C++ for this program or other language?

It is all C++, code is available at the github link in the OP.

1 Like

Once again, a new release is now available.

Highlights include:

Reworked main window to have a tabbed view with multiple categories of tools.

Added a bulk download option to dump an entire datastore to a sqlite file.

Added a log screen to show all sent http requests.

And most importantly, http requests were all being sent twice before, which has now been fixed. The practical result of this is that you will see HTTP 429 throttling happen about half as frequently as before.

And a few notes about the download feature:

The generated sqlite database has a single table named datastore with the following schema:

CREATE TABLE datastore (
    universe_id INTEGER NOT NULL,
    datastore_name TEXT NOT NULL,
    scope TEXT NOT NULL,
    key_name TEXT NOT NULL,
    version TEXT NOT NULL,
    data_type TEXT NOT NULL,
    data_raw TEXT NOT NULL,
    data_str TEXT,
    data_num REAL,
    userids TEXT,
    attributes TEXT

type is one of Bool, Number, String, or Json

data_raw is the raw string returned by the api. This is frequently a json object but can also be a json-encoded string, a string-encoded float, or a string-encoded bool

data_str is only populated when the data is a string. This will be the decoded string.

data_num will similarly only be populated when the data is a number.

As an example, if you stored the string this string has "quotes" then:
type is String
data_raw is "this string has \"quotes\""
data_str is this string has "quotes"
data_num is null


Just want to vouch, 10/10, an awesome tool.


A new release is here again, this one notably fixes the “md5 mismatch” problem you may have encountered with the previous release. It also has some other cool stuff.

First, a reminder that running the Mac release requires you to first run the command xattr -cr /Application/ to remove Apple’s ‘spooky download’ flag.

The main feature of this release is the new ‘filter’ option for bulk downloads. This allows you to download some subset of the keys in a datastore instead of all of them.

This release also has a number of smaller improvements and bugfixes, including:

  • A message will be displayed when attempting to view a deleted entry
  • Double-clicking is now supported in the ‘view entries’ and ‘view versions’ windows
  • Bulk download now has a smoother progress bar
  • The main window now allows editing the name or id of existing universes
  • The universe list will now behave more consistently and remain sorted by name
  • Fixed an issue with “md5 mismatch” when attempting to update an entry
  • Fixed an issue where modifying an entry mistakenly required adding a userid array

Is there any specific way we update the current version?

There is not auto-update or anything built in. You just have to delete the old one and download the new one.

Would it be possible to add an export feature to transfer datastores between games?

Yep, that is planned for the future. Broadly, my goals right now are the following features in no particular order:

  • Mass Delete
  • Mass Undelete
  • Bulk Upload

I can’t promise when any specific one will be added but I would expect to have them all working within a month or so.