Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Recordkeeper Laravel Package

laraarabdev/recordkeeper

RecordKeeper adds a lightweight audit trail to your Laravel Eloquent models. It records creates, updates and deletes, shows what changed and who made the change, and keeps a searchable history your team can review without altering existing tables. Drop-in setup for new and existing apps.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit RecordKeeper is a Laravel-side record/audit-trail package (Composer-installable, service-provider bootstrapped, Eloquent-model-coupled). Architecturally it sits in the "cross-cutting concern" tier of a Laravel app: it observes model lifecycle events and writes to its own persistence layer. That is a good fit for a Laravel monolith or a modular monolith where every write already flows through Eloquent. It is a poor fit for services that write through raw query builders, stored procedures, or non-Eloquent data paths, and it does not replace a database-level CDC or event-stream audit strategy. Treat it as an application-level audit trail, not a compliance-grade immutable ledger, unless the persistence and retention model is verified.

Integration feasibility Low mechanical effort: composer require, config publish, migration publish, add a trait/interface to audited models. The real effort is not installation, it is (a) deciding which models are in scope, (b) deciding what constitutes sensitive payload (this package will capture attribute diffs by default, which frequently sweeps up PII), and (c) agreeing on retention. Expect one developer to get a working pilot in days; expect the scope/retention/PII decisions to take longer than the code.

Technical risk The dominant risk here is information risk, not code risk. The v0.3.0 release notes contain only an auto-generated compare link — no changelog body, no migration guide, no breaking-change callout. For a package that stores historical data and likely ships migrations, that is a material gap: we cannot currently state whether the schema changed, whether existing rows are backfilled, or whether the observation API changed between 0.1.3 and 0.3.0.

Compounding factors:

  • 0.x semver. Under semver, 0.MINOR bumps may contain breaking changes by design. The jump 0.1.3 → 0.3.0 skips 0.2 entirely and is two minor bumps on a pre-1.0 package. Assume breaking until proven otherwise.
  • Bus factor. Single-organization package (LaraArabDev), pre-1.0, small apparent release cadence. No evidence of a support contract, security policy, or LTS branch.
  • Blast radius. Audit-logging packages are wired into the write path of the entire domain model surface. A regression does not degrade a feature — it degrades every create/update/delete, or silently stops recording and nobody notices until an audit is requested.

Key questions

  1. What actually changed in 0.2.x and 0.3.0? Request CHANGELOG.md and read the GitHub compare diff directly — the release notes do not substitute for it.
  2. Are there schema migrations in this delta, and are they additive and reversible?
  3. Which Laravel and PHP versions are supported at 0.3.0? What is the floor, and has the floor moved?
  4. Does the package expose a stable extension point for redaction/masking, or must we fork to exclude sensitive attributes?
  5. What is the write path — synchronous in the request transaction, or queued/async? What happens to the host write if logging fails?
  6. Is the audit store the same database as the application, and is there a supported pruning/retention mechanism?
  7. Any published security policy, or a process for reporting disclosure?

Integration Approach

Stack fit Assumes a standard Laravel app (Eloquent as the system of record, Composer, package auto-discovery). Verify against the actual composer.json version constraints in the repo rather than the README — pre-1.0 packages frequently carry wide Laravel constraints (^9|^10|^11) that are not actually tested across the matrix.

Migration path Do not adopt 0.3.0 blind from 0.1.3. Sequence:

  1. Read the compare diff and CHANGELOG.md at 0.3.0; classify each change as additive / behaviour-changing / breaking.
  2. Pin an exact version ("x/y": "0.3.0", not ^0.3) in composer.json for the pilot. For a write-path package, ^ is the wrong default.
  3. If you have no prior install, treat this as greenfield and pin to 0.3.0 as the baseline — but only after step 1.
  4. If any environment is already on 0.1.3, build an explicit upgrade checklist (migration order, backfill, config key renames) before touching staging.

Compatibility Three axes to clear: Laravel/PHP version matrix; database engine (the audit table's column types and indexing strategy matter on MySQL vs Postgres); and queue driver if logging is async. Also check whether the package assumes a specific app timezone or App\Models\User shape.

Sequencing Spike (2–3 days: install, audit two low-risk models, inspect captured payload for leakage) → architecture review of payload scope and retention → staging rollout on a non-critical bounded context → production on one domain aggregate → expand model coverage in waves. Do not enable globally on first deploy; a global trait rollout maximizes both blast radius and the volume of PII you capture before you have a redaction policy.

Operational Impact

Maintenance Pre-1.0 with a thin release-notes culture means upgrade cost is unpredictable per bump. Budget a recurring line item: at each minor release, one engineer-day to read the diff and regression-test the audit path. Exact-version pinning is mandatory; automated dependency PRs should not auto-merge this package.

Support Single-maintainer, community-supported, no SLA. Escalation path is "open an issue." Acceptable for internal tooling and non-regulated audit; not acceptable as the sole control for a regulated audit requirement without a fork-and-own contingency plan. Recommend we vendor/forward-port patches if the package goes quiet.

Scaling Two cost curves. (1) Write amplification — one audit row per observed model event multiplies write volume by the write-to-read ratio of the audited models; high-churn tables can double or triple DB write load. (2) Table growth — audit tables grow monotonically and are rarely pruned; they will outgrow their source tables. Mitigations to design in from day one: async/queued writes, a retention window with a scheduled prune job, composite indexes on (subject_type, subject_id, created_at), and a separate database/connection for the audit store if volume is meaningful.

Failure modes

  • Fail-closed logging — an audit write error rolling back or 500-ing a legitimate business write. Must be verified and, if necessary, made fail-open with alerting.
  • Silent attrition — package breaks after a Laravel upgrade, writes stop, nothing alerts. Requires a synthetic heartbeat check ("did an audit row land in the last hour?").
  • PII accumulation — attribute diffs capture secrets, tokens, health data. Needs an allowlist/redaction policy before production, not after.
  • Erasure conflict — GDPR/DSAR deletion requests vs. immutable audit rows. Decide the position now; retrofitting is expensive.
  • Migration lock-in — audit schema becomes load-bearing for reporting; changing packages later means ETL.

Ramp-up Low. A Laravel-fluent engineer is productive in under a day. The genuinely hard parts are policy, not API: scope, redaction, retention, and erasure. Assign those to a named owner (security or data) rather than leaving them implicit in the implementation ticket.

Recommendation: Proceed to a scoped pilot on 0.3.0 with exact-version pinning — conditional on obtaining the 0.1.3→0.3.0 diff and confirming no destructive migrations. Do not adopt as a compliance control. Re-assess at 1.0 or at the first release that ships a substantive changelog.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
cgv/localized-resource