PHPackages                             dealnews/chronicle - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. dealnews/chronicle

ActiveProject[Utility &amp; Helpers](/categories/utility)

dealnews/chronicle
==================

An application for tracking object history

0.1.4(2mo ago)00BSD-3-CLAUSEPHPPHP ^8.4CI passing

Since Mar 31Pushed 3w agoCompare

[ Source](https://github.com/dealnews/chronicle)[ Packagist](https://packagist.org/packages/dealnews/chronicle)[ RSS](/packages/dealnews-chronicle/feed)WikiDiscussions main Synced 4w ago

READMEChangelog (5)Dependencies (14)Versions (9)Used By (0)

[![Chronicle Icon](icon.svg)](icon.svg)

Chronicle
=========

[](#chronicle)

[![PHP](https://camo.githubusercontent.com/80c4564163cef31b2a66baaeb95a5bf4a418bcb5242a5ae707b94c2f4811e742/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e342532422d626c7565)](https://camo.githubusercontent.com/80c4564163cef31b2a66baaeb95a5bf4a418bcb5242a5ae707b94c2f4811e742/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e342532422d626c7565)[![License](https://camo.githubusercontent.com/e32287373926ec416e0928698ca4471080dc41437461969806bcfe2df245e480/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4253442d2d332d2d436c617573652d677265656e)](https://camo.githubusercontent.com/e32287373926ec416e0928698ca4471080dc41437461969806bcfe2df245e480/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4253442d2d332d2d436c617573652d677265656e)

Chronicle is a webhook-driven object history tracker. It ingests JSON payloads from external systems, parses them through a plugin layer, and stores a versioned log of every change to every object. A built-in web UI lets you browse sources, types, and the full diff history of any object.

Table of Contents
-----------------

[](#table-of-contents)

- [How It Works](#how-it-works)
- [Requirements](#requirements)
- [Installation](#installation)
- [Database Setup](#database-setup)
- [Configuration](#configuration)
- [Running the App](#running-the-app)
- [Running with Docker](#running-with-docker)
- [Ingesting Webhooks](#ingesting-webhooks)
- [Plugin System](#plugin-system)
- [Admin UI](#admin-ui)
- [Browsing History](#browsing-history)
- [Authentication](#authentication)
- [Managing Log Table Size](#managing-log-table-size)
- [Testing](#testing)
- [Project Structure](#project-structure)

How It Works
------------

[](#how-it-works)

1. An external system POSTs a JSON payload to `/webhook/{source}/{type}` with a Bearer API key.
2. Chronicle validates the key, looks up the source and type, and instantiates the configured plugin.
3. The plugin extracts the object ID, action (create/update/delete), change date, version, and data from the payload.
4. A log entry is persisted to the database.
5. The web UI shows the full chronological history for any object, with consecutive versions diffed side by side.

Requirements
------------

[](#requirements)

- PHP 8.4+
- MySQL, PostgreSQL, or SQLite
- Composer

Installation
------------

[](#installation)

```
git clone https://github.com/dealnews/chronicle.git
cd chronicle
composer install
```

Database Setup
--------------

[](#database-setup)

Schema files are provided for all three supported databases:

```
# MySQL
mysql -u user -p dbname
