Documentation
First things first, the documentation is nonexistant and if you aren’t a technical fellow you wouldn’t really understand how to implement things, especially when all of the ‘templates’ for the data is within the main modulescript.
Formatting
It doesn’t seem to follow any known style guide which makes it difficult for anyone to read it properly, especially when it doesn’t follow standards.
You claim that the code is ‘Human Readable’ yet there is an absurd amount of whitespace and you don’t use comments to actually describe areas of the code
If I had no knowledge of scripting whatsoever, I would have no idea what ‘Format’ meant, and what the acceptable values are.
The same goes for the settings
Using a massive string as a property is a waste of memory, when you could’ve easily just written a comment or created an attribute on the script and directed people to use that instead.
Error Handling
In the likely event that one or all of Roblox’s APIs go down (including DataStoreService) there is almost always an error returned by any/all of the methods you use.
Despite this, you have not used a pcall once in your code which makes it extremely unsafe
What would happen if GetAsync failed? The user would have no data and the game would cease to function. There is no retrying or anything that would handle this sort of error
If an instance of data for a player has not been created, what is an external script expected to do? Will it just WaitForChild until it exists? Will it just ignore it? Without using an external API there is no proper way to handle these sorts of issues in other scripts. By simplifying it to be more “Human Friendly” you’ve made it near impossible to handle errors properly in scripts that depend on this data.
Features
There is a lack of features that make this module stand out from just using DataStoreService barebones.
- No caching
- No API for other scripts to use (You mentioned this was coming)
- Session Locking
The reason these lack of features is bad is because your library has no way to customise it properly without editing the source code. You solely rely on users to interact with the instances created by the library to collect this data, and that’s all they are given access to.
You use modern features such as UpdateAsync, but you do not use them properly
In this image I show your usage of UpdateAsync. You’re using it effectively the same as :SetAsync and do not even define the parameters for the current stored data to compare against.
You also don’t use the new DataStore metadata and versioning features which can be extremely helpful in rolling back data