npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@rbxts/document-service

v1.2.2-ts.1

Published

DocumentService is a 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.

Readme

DocumentService - A powerful, schematised Roblox datastore library

DocumentService is a 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 for more information.

Features

  • Fully typed API. 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 - preventing bugs caused by updates interfering with eachother.
  • Does auto-saves and BindToClose saves for you.
  • 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).
  • Signals & hooks to 'tap in' to when operations start & finish.
  • 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.
  • Supports DataStore dependency injection - use any Mock DataStore you like.
  • Internally, completely strictly typed (Luau "--!strict" mode), and high code quality standards with high test coverage.

Ready for production

DocumentService is currently used in production in Croydon: The London Transport Game. It powers both player data and the custom companies feature (these are complex shared social groups). In its first few hours it flawlessly handled over 300,000 data updates and performed tens of thousands of migrations, migrating from no library (the game originally used a different, fragile system).

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

  • Split DocumentService's API up into separate classes for session-locked and non-session-locked documents, that share common functionality.
  • ACID transactions involving multiple Documents. Please get in touch if you can help with this!
  • See the 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. Please follow the Roblox Lua Style Guide and write unit tests.

To build for Roblox (this process is automated through a GitHub action, but in case you need it):

  1. Install necessary tools (see rokit.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

Most discussions relating to this project happen on the Roblox OSS Discord Server (go to the DocumentService thread under projects).