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

Iptraceable Listener Bundle Laravel Package

kikwik/iptraceable-listener-bundle

Symfony bundle that automatically records the client IP address on Doctrine entities implementing IpTraceable, using an event listener to populate IP fields on create and update. Simplifies audit trails and traceability with minimal configuration.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit: Poor — unchanged by v1.0.4. This is a Symfony bundle, not a Laravel package. It ships a bundle class, Symfony DI service definitions, and depends on gedmo/doctrine-extensions plus Doctrine ORM. Laravel's default persistence layer is Eloquent; there is no service provider, no facade, no config file in Laravel's config/*.php idiom. Bringing it in requires a Doctrine-on-Laravel bridge (laravel-doctrine/orm) and a Symfony bundle-registration shim — two layers of impedance for a feature worth roughly 40–60 lines of application code.

What it actually does. Gedmo's IpTraceable extension stamps createdFromIp / updatedFromIp on entities. Gedmo already includes the listener; this bundle is thin glue that wires the listener into the Symfony container and feeds it the current request's client IP. The portable value is the pattern, not the code.

What v1.0.4 changes. One line of substance: "added support for symfony 5." Assessed on its merits:

  • It does not touch the Laravel gap. No service provider, no Laravel config, no Eloquent support, no facade. The integration path for a Laravel app is exactly as blocked as before.
  • It targets a version line that is already end-of-life. Symfony 5.4 reached end of standard support in November 2023. A release that adds Symfony 5 support, rather than 6.x/7.x, tells you where the maintainer's stack sits — not where ours is.
  • It says nothing about PHP 8.2/8.3, Gedmo major version, or attribute-vs-annotation mapping mode. The compatibility questions that actually gate adoption are unanswered.
  • It is a maintenance signal, and a weak one. A single-constraint change after a multi-year gap is a data point on cadence, not evidence of a supported dependency.

Integration feasibility: Low, and still not worth the bridge. The realistic path in Laravel is a native reimplementation: a middleware or singleton that resolves $request->ip(), plus an Eloquent observer/saving hook or an auditing package (owen-it/laravel-auditing, spatie/activitylog) that already handles IP, user agent, and actor attribution. Reverse-engineering the bundle buys nothing that a first-party implementation doesn't, and v1.0.4 does not change that arithmetic.

Technical risk: High relative to value.

  • Adoption. 0 stars, 0 dependents, published by a small org (kikwik) with no evident community. Release history is 2021-07-16, then v1.0.4 after a multi-year gap — consistent with sporadic, best-effort maintenance rather than a supported dependency. Treat as a reference snippet.
  • Version drift (partially, narrowly addressed). v1.0.4 confirms the package is alive enough to accept a constraint bump for Symfony 5, which reduces — but does not retire — the risk that its constraints conflict with a current stack. Symfony 6/7 support is absent; PHP 8.x compatibility remains unverified; Gedmo annotation→attribute and major-version churn is unaddressed.
  • Supply chain. Pulling a near-zero-adoption package transitively expands your Composer graph for functionality you could own outright. That calculus is unaffected by a point release.
  • Semantic gap. IP traceability without a proxy/CDN trust story is a compliance artifact that silently records load-balancer IPs.

Key questions for the requirement owner:

  1. What is the driver — SOC 2 / ISO 27001 evidence, incident forensics, or internal audit UX? That determines whether a Laravel-native auditing package satisfies it.
  2. Do we already run Doctrine in this Laravel app? If no, this is a non-starter — and v1.0.4 does not create a Doctrine path.
  3. Do we need IP only, or full actor attribution (user, tenant, request ID, user agent)? Native packages cover the broader case better.
  4. Is the recorded IP expected to be trustworthy behind our ingress (ALB/Cloudflare)? Who owns trusted-proxy config?
  5. Retention, PII posture, and GDPR treatment of stored IPs — has legal signed off?

Integration Approach

Stack fit. Not applicable to a conventional Laravel/Eloquent stack. Viable only if the application already uses laravel-doctrine/orm and accepts Symfony bundle bootstrapping — a combination rare enough that I would not plan around it. v1.0.4 adds Symfony 5 compatibility to that conditional path; it does not widen it.

Recommended path — do not adopt; reimplement (est. 0.5–1 dev-day).

  1. Resolve client IP once per request behind a TrustProxies-configured middleware; expose via a request-scoped singleton so console/queue contexts degrade gracefully to null.
  2. Capture the stamp at persist time via an Eloquent saving observer or a trait with a boot hook — the direct analogue of the Gedmo listener.
  3. If the audit requirement exceeds IP (it usually does), adopt owen-it/laravel-auditing instead; it covers IP, user agent, actor, and old/new diffs with a maintained release cadence.

If adoption is mandated anyway (e.g., parity with a sibling Symfony service).

  • Fork and vendor the package; pin gedmo/doctrine-extensions and audit PHP 8.2/8.3 compatibility.
  • Write a Laravel service provider that registers the listener manually rather than relying on bundle auto-discovery.
  • Validate schema: the IP columns are your migration, not the bundle's.
  • v1.0.4 makes this marginally cheaper only on the sibling-service-parity argument, and only if that service is on Symfony 5. Do not treat it as a reason to re-open a Laravel-native decision.

Compatibility gates before any code: PHP version matrix, Gedmo major version, Symfony component constraint (v1.0.4 pins you toward the 5.x line, which is EOL — flag this explicitly in any exception request), attribute-vs-annotation mapping mode, and whether the listener tolerates a missing request scope (queue workers, artisan commands, tests).

Sequencing. (1) Confirm the audit requirement and PII sign-off → (2) confirm Doctrine presence → (3) if absent, prototype the native trait/observer and the proxy-aware IP resolver → (4) decide adopt-vs-build on evidence, not on the package's existence. The v1.0.4 release does not clear any gate in this sequence; it does not justify reordering it.

Operational Impact

Maintenance: you inherit 100% of it. 0 stars and 0 dependents mean no upstream triage, no security advisories, no issue response. v1.0.4 is a single-constraint release after a multi-year silence targeting an EOL Symfony branch; it evidences a maintainer alive enough to accept a patch, not a support commitment. Any future PHP/Gedmo/Symfony bump is your patch. Keep this in the dependency register as internally maintained, with an owner and a review date — that designation stands.

Support. None beyond the MIT source. Escalation path is "read the code" — acceptable for 60 lines of glue, unacceptable for anything touching a compliance control without a tested fallback. The v1.0.4 release does not create an escalation path.

Scaling. Listener overhead is negligible (one call per write). The real scaling concern is correctness under distribution: horizontal scaling behind a load balancer or CDN will record the proxy IP unless trusted-proxy configuration is explicit and tested. Also watch write amplification if IP stamping is applied broadly to high-volume tables, and confirm the IP column type/length fits IPv6.

Failure modes to design against:

  • Null/absent request context — queue jobs, scheduled commands, and seeders produce null or throw; must be handled deliberately, not by try/catch.
  • Spoofed headers — unvalidated X-Forwarded-For yields attacker-controlled audit data; worse than no data for compliance purposes.
  • Silent no-op — misconfigured listener writes nothing and no one notices until an auditor asks. A point release with no changelog detail beyond Symfony 5 is exactly the kind of change that can ship silently.
  • Schema drift — entity mapping changes orphan the listener; no upstream to catch it.
  • Test isolation — request-scoped IP leaking across tests, producing flaky assertions.

Ramp-up. Low for the concept (one middleware + one observer is immediately legible to any Laravel engineer). Moderate for the Symfony/Doctrine bridge path, where a new engineer must reason about bundle registration, DI compiler passes, and Gedmo mapping — knowledge that exists nowhere else in a Laravel codebase, and that v1.0.4 makes no easier.

Recommendation. Score this as a pattern reference, not a dependency. v1.0.4 (Symfony 5 support) is a maintenance data point, not a fitness improvement for our stack: it addresses a line we don't run, on a framework we don't use, and still prescribes no Laravel integration path. Reimplement natively or adopt a maintained Laravel auditing package; the package's only durable contribution is confirming that IP stamping belongs at the persistence boundary, driven by a request-scoped value — a conclusion the team can reach in an afternoon.

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.
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
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console