Use regular Haskell data structures as your database and get stronger ACID guarantees than most RDBMS offer.
Changes
0.17.0
Jeremy Shaw, 2026-10-29
createCheckpointAndClose no longer writes a checkpoint when this
process has already made one durable and no events have been logged
since, making shutdown fast right after createCheckpoint (e.g. via the
remote CreateCheckpoint command)
(#181).
A checkpoint is still written when the state is freshly created, when
events follow the last checkpoint, and when closing a state whose only
checkpoint is the one loaded at open (so SafeCopy migrations are still
saved).
Breaking changes and changed behaviour
LocalState has a new field, localLastCheckpoint. Code that builds a
LocalState with positional arguments will no longer compile. Code that
builds one with record syntax will still compile (with only a
-Wmissing-fields warning), but leaves the field undefined: the next
createCheckpoint will then kill the log writer thread, and later
updates, checkpoints and closes will hang. Initialise the field with
newIORef Nothing.
createCheckpointAndClose no longer always appends a checkpoint. After
createCheckpoint followed by createArchive, the newest
checkpoints-*.log file is left empty and the latest checkpoint is in
the file before it. acid-state itself restores correctly, but backup,
replication or monitoring scripts that copy or check only the newest
checkpoint file must be updated to look at earlier files too.
Tools that use the checkpoint log’s size, modification time or entry
count to confirm a clean shutdown may no longer see a change at close.
fix bug in archiveLog that resulted in logs being moved prematurely
(#22)
tweaks for GHC 8.0.x, template-haskell 2.11.x
fix compilation of benchmarks
0.14.0
fixes for cereal 0.5 while maintaining cereal 0.4
compatibility. IMPORTANT: cereal 0.5 / safecopy 0.9 change the
serialization format of Float/Double. Migration should be performed
automatically on old data. However, you should be aware that once
you upgrade to safecopy 0.9 / cereal 0.5, your data will be
migrated and not readable by older versions of your application
which are compiled against safecopy 0.8 / cereal 0.4.
additional fixes for TH and kinded type variables
(#56)