Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/anthony0br/DocumentService
https://github.com/anthony0br/DocumentService
Last synced: 5 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/anthony0br/DocumentService
- Owner: anthony0br
- License: mit
- Created: 2024-07-20T02:51:24.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2024-10-16T03:10:05.000Z (29 days ago)
- Last Synced: 2024-10-17T14:04:59.090Z (28 days ago)
- Language: Luau
- Homepage: https://anthony0br.github.io/DocumentService/
- Size: 2.74 MB
- Stars: 19
- Watchers: 1
- Forks: 6
- Open Issues: 19
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-roblox - DocumentService - A powerful, schematised Roblox datastore library. (Libraries / DataStore)
README
# DocumentService - A powerful, schematised Roblox datastore library
DocumentService is a fully strictly typed Luau library for saving data with Roblox DataStores.
It can be used for sesssion-locked data, such as player data, or for non-session-locked data, like
shared groups or houses.See the [docs](https://anthony0br.github.io/DocumentService/docs/intro) for more information.
This is a new release and, although it has been thoroughly unit tested, it hasn't yet been used
in a live production game - as with any open source software, use it at your own risk! I am
working on adding it to my game, so this will not be a concern for too long.## Features
- Fully strictly typed. This means you get full intellisense and typechecking on your data,
and on every API method, including possible errors for each method.
- Superior Rust-inspired error handling (Result types).
- Immutable cache and autosaves - preventing bugs caused by updates interfering with eachother.
- Migrations, inspired by nezuo's Lapis.
- Validate your data with support for runtime and static typechecking.
- Documents can be session-locked, or not (to allow multi-server editing).
- Run hooks before and after operations, e.g. logging.
- Automatic retries with exponential backoff.
- Migrate from no library, or another library if you're brave.
- Checks your data can be stored in JSON to avoid silent errors.
- Simple API: session-locking a document simply extends the API.
- Use any Mock DataStore you like.## Installation
### Method 1: Wally
Add `DocumentService = "anthony0br/documentservice@LATEST_VERSION"` to your `wally.toml`.### Method 2: Manual
DocumentService has no dependencies so you can just copy and paste the contents of
`target/roblox` into your project.## Long-term goals
- ACID transactions involving multiple Documents. Please get in touch if you can help with this!
- See the [issues](https://github.com/anthony0br/DocumentService/issues) page to discuss ways to make DocumentService better!## Inspiration
This library takes inspiration from Lapis, ProfileService, keyForm, and kampfkarren's blog.
These are all great projects but didn't meet my needs in some way.## Contributing
Contributions are accepted. Your contributions must run in Lune directly from src and, when compiled by darklua to target/roblox, in Roblox. You should use moonwave to update/generate documentation.To build for Roblox:
1. Install necessary tools (see aftman.toml).
2. Run `rojo sourcemap source.project.json -o sourcemap.json`. It is necessary to generate a sourcemap of the src folder so darklua can convert our requires.
3. Run `darklua process src target/roblox`.## Contact
The best way to get in touch is to ping me in the thread in the Roblox OSS discord, or create an issue.