Skip to main content

Philosophy

Chronicle is built around a small set of strong design constraints.

Append-only ledger

Entries are immutable once written.

Chronicle intentionally does not provide APIs to:

  • update entries
  • delete entries
  • rewrite history

If a correction is needed, it should be recorded as a new entry.

Explicit intent

Every entry must include:

  • actor
  • action
  • subject

Chronicle avoids vague audit events. The package is optimized for deliberate, domain-specific logging such as user.email_changed rather than generic “something changed” records.

Low magic

Chronicle intentionally avoids:

  • automatic model observers
  • hidden logging hooks
  • implicit activity recording

Every Chronicle entry should be an explicit developer decision.

Stable contracts

Chronicle treats its verification and export structures as durable contracts. Export manifests are versioned so downstream tooling has a clear compatibility boundary.

Transport agnostic

Chronicle is designed to work equally well in:

  • HTTP requests
  • queue workers
  • CLI commands
  • background jobs

The logging model is not tied to a specific Laravel runtime path.

Tamper detection over illusion

Chronicle does not pretend to make your database impossible to tamper with.

Instead it focuses on something more realistic and more useful:

making tampering detectable through deterministic hashing, append-only semantics, checkpoints, and exports.