Chronicler.MemoryPackShim
1.0.0
dotnet add package Chronicler.MemoryPackShim --version 1.0.0
NuGet\Install-Package Chronicler.MemoryPackShim -Version 1.0.0
<PackageReference Include="Chronicler.MemoryPackShim" Version="1.0.0" />
<PackageVersion Include="Chronicler.MemoryPackShim" Version="1.0.0" />
<PackageReference Include="Chronicler.MemoryPackShim" />
paket add Chronicler.MemoryPackShim --version 1.0.0
#r "nuget: Chronicler.MemoryPackShim, 1.0.0"
#:package Chronicler.MemoryPackShim@1.0.0
#addin nuget:?package=Chronicler.MemoryPackShim&version=1.0.0
#tool nuget:?package=Chronicler.MemoryPackShim&version=1.0.0
Chronicler
![]()
Deterministic state transfer and simulation timing for .NET runtimes that own their objects and their schemas.
Chronicler lets a type declare its state once, then use that same explicit schema for JSON, MemoryPack, restore workflows, stable runtime links, and deterministic record hashes. Your host constructs the object graph; Chronicler transfers state into it without taking ownership of your runtime.
It also provides exact simulation timestamps and signed durations with 64-bit whole seconds and 32 fractional bits, plus an explicitly advanced, recordable clock. These timing primitives are independent of any engine or math package.
Why Chronicler?
- Schemas stay in your code.
RecordData(...)makes names, defaults, order, and ownership visible and reviewable. - Restore into live objects. Populate initialized runtime shells instead of asking a serializer to invent your graph.
- Keep references stable. Record external or runtime-owned objects by IDs through a session-scoped registry.
- Compare deterministic state. Compute replay and conformance signals from the recording schema without hashing a transport payload.
- Keep long-lived time exact. Advance a recordable clock explicitly; subtract wide timestamps before converting short intervals for motion calculations.
- Choose your dependency surface. Use JSON and MemoryPack together, or take the Lean package when the built-in MemoryPack transport is unnecessary.
Install
dotnet add package Chronicler.Core
Chronicler.Core targets netstandard2.1 and net10.0 and includes the JSON
and MemoryPack transports.
Quick start
using Chronicler;
using Chronicler.Serialization;
PlayerSnapshot source = new() { Health = 72 };
string json = JsonRecordSerializer.Serialize(source, writeIndented: true);
PlayerSnapshot restored = new(); // The host creates and initializes the shell.
JsonRecordSerializer.Populate(restored, json);
public sealed class PlayerSnapshot : IRecordable
{
public int Health = 100;
public WeaponSnapshot Weapon = new();
public void RecordData(IChronicler chronicler)
{
RecordValues.Look(chronicler, ref Health, "health", 100);
RecordDeep.Look(chronicler, ref Weapon, "weapon");
}
}
public sealed class WeaponSnapshot : IRecordable
{
public int Ammo = 30;
public void RecordData(IChronicler chronicler)
{
RecordValues.Look(chronicler, ref Ammo, "ammo", 30);
}
}
The same RecordData(...) implementation works with
MemoryPackRecordSerializer in the standard package. restored.Health is now
72; its existing Weapon keeps the declared ammo default of 30.
Recording contracts and helpers live in Chronicler. Use
Chronicler.Serialization for transports and converters, Chronicler.Hashing
for deterministic record hashes, and Chronicler.Timing for time values and the
clock. See the
migration guide
when upgrading existing code.
The independent Chronicler.Diagnostics package provides diagnostic channels,
lazy logging, and exception guards without depending on either Core variant. See
the
diagnostics guide.
Choose a package
| Package | Use it when |
|---|---|
Chronicler.Diagnostics |
You need shared logging and exception guards without serialization dependencies. |
Chronicler.Core |
You want the core recording model plus built-in JSON and MemoryPack transports. |
Chronicler.Core.Lean |
You want the core recording model and JSON without the MemoryPack dependency or built-in MemoryPack transport. |
Chronicler.MemoryPackShim |
A Lean library keeps MemoryPack annotations in its public metadata. This package supplies compatibility attributes; it is not a serializer. |
Learn more
- Getting started
- Understand values, owned state, and links
- Use deterministic record hashes
- Represent simulation time
- Browse the API reference
- View test coverage
Development
dotnet build Chronicler.slnx --configuration Release
dotnet test Chronicler.slnx --configuration Release --no-build
See the contributor guide for the full workflow.
Community and license
Open an issue for bugs and feature requests, or join the LSF Discord community.
See Support, the Code of Conduct, and the security policy for help and reporting guidance.
Chronicler is available under the MIT License. See the notice for the repository's branding and redistribution terms.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.1 is compatible. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.1
- No dependencies.
-
net10.0
- No dependencies.
NuGet packages (6)
Showing the top 5 NuGet packages that depend on Chronicler.MemoryPackShim:
| Package | Downloads |
|---|---|
|
SwiftCollections.Lean
SwiftCollections is a high-performance, memory-efficient library of collections designed for game development, simulations, and other performance-critical applications. |
|
|
FixedMathSharp.Lean
FixedMathSharp: A high-precision, deterministic fixed-point math library for .NET. Ideal for simulations, games, and physics engines requiring reliable arithmetic without floating-point inaccuracies. |
|
|
Chronicler.Core.Lean
Deterministic, transport-neutral state transfer into existing runtime object graphs, with exact time values and a recordable simulation clock for lockstep applications. |
|
|
GridForge.Lean
A high-performance, deterministic rectangular and hex-prism voxel grid system for spatial partitioning, simulation, and game development. |
|
|
FixedMathSharp.Chronicler.Lean
Chronicler deterministic record-hash writer extensions for FixedMathSharp fixed-point, vector, matrix, transform, and geometry types. |
GitHub repositories
This package is not used by any popular GitHub repositories.