What it is
Change history for the tables you choose. Each write made through it is recorded in the same transaction: who made it, the named action it belonged to, and the row before and after.
On top of that you get per-person undo/redo of whole actions (with conflict detection when someone else changed the row since), point-in-time reads of a row or a whole table at any moment, and retention that cleans up old history by itself.
Where it fits
- Collaborative editors and shared boards that need undo, admin tools that need to answer "who changed this and when", moderation and support tools that need to roll a row back, and any app that wants a "time slider" over its data.
- It's a stopgap until SpacetimeDB lets modules read their own commit log natively.
How it works
Register each table you want tracked with history.track({...}), giving it the row type, key and the five table operations. Writes made through the returned handle are recorded.
In a reducer, history.begin(ctx, 'move note', 'board') names the action, and every tracked write after it is grouped into one undoable step. One-line wrappers expose historyUndo, historyRedo and a historyQuery procedure to clients, with the same names as the Rust and C# versions.


