lithhash/coppermind

A robust, feature-rich data persistence library for Roblox.

Coppermind

A robust, feature-rich data persistence library for Roblox.

Features

  • ๐Ÿ’พ Schema-based data management with templates
  • ๐Ÿ”’ Session locking to prevent data corruption
  • โฑ๏ธ Configurable auto-save intervals
  • ๐Ÿ”„ Data migrations for schema evolution
  • ๐Ÿ’ฑ Atomic transactions between stores
  • ๐Ÿงช Mock mode for testing
  • ๐Ÿ“ก Event-driven architecture
  • ๐ŸงŠ Immutable data with deep freeze

Installation

Manual

Download the latest release and add the src folder to your project.

Quick Start

local Coppermind = require(path.to.Coppermind)

-- Define a schema
local PlayerSchema = Coppermind.registerSchema({
    name = "PlayerData",
    dataTemplate = {
        coins = 0,
        gems = 0,
        inventory = {},
        stats = {
            level = 1,
            xp = 0,
        },
    },
    migrations = {},
})

-- Load a player's data
local store = Coppermind.loadStore(PlayerSchema, tostring(player.UserId), {
    sessionLocked = true,
    autoSave = 60,
})

-- Wait for data to be ready
store.onReady:Connect(function()
    local data = Coppermind.getData(PlayerSchema, tostring(player.UserId))
    print("Player has", data.coins, "coins")
end)

-- Update data
Coppermind.updateData(PlayerSchema, tostring(player.UserId), function(data)
    data.coins += 100
    return nil
end)

-- Unload when player leaves
Coppermind.unloadStore(PlayerSchema, tostring(player.UserId))

API Overview

Schema

FunctionDescription
registerSchema(schema)Register a new data schema
getSchema(name)Retrieve a registered schema

Store Management

FunctionDescription
loadStore(schema, key, config?)Load a data store
saveStore(schema, key)Save a store to DataStore
unloadStore(schema, key)Save and unload a store
getStore(schema, key)Get a store reference
isLoaded(schema, key)Check if a store is loaded

Data Operations

FunctionDescription
getData(schema, key)Read current data (immutable)
updateData(schema, key, callback)Update data safely
transaction(schema, keyA, keyB, callback)Atomic two-store transaction

Testing

FunctionDescription
setMockMode(enabled)Enable/disable mock mode
isMockMode()Check if mock mode is enabled
clearMockData()Clear all mock data

Events

EventDescription
onLoadedFires when any store loads
onSavedFires when any store saves
onErrorFires on any store error
onUnloadedFires when any store unloads

License

MIT