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

Laravel Contact Laravel Package

jeroennoten/laravel-contact

A Laravel package that adds contact form functionality to your application, letting visitors send messages to site administrators. Includes configurable routes, validation, and views so you can drop a working contact form into any Laravel project quickly.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is architecturally conventional for its era: a Composer dependency, a service provider, publishable config, publishable migration, a Contact Eloquent model, a controller with validation, a Blade view, and a mail send to configured recipients. That is exactly the shape a Laravel TPM wants to see — it composes via public framework surfaces (service provider, config, events-free but overridable views/routes) rather than patching internals. The shape is right; the vintage is the problem.

Integration feasibility. Low on any modern Laravel. Last release is 2017-02-21, which places it in the Laravel 5.3/5.4 window. Consequences:

  • The composer.json constraint is almost certainly pinned to illuminate/* 5.3–5.4 and a PHP floor of 5.6/7.0. On a Laravel 9/10/11/12 application, composer require will fail resolution outright — this is not a "works with deprecation notices" situation, it's a hard install blocker.
  • Even if you hand-relax the constraint, the code depends on surfaces that have since changed materially: mail configuration and the Mailable pipeline (Laravel 5.3 → 5.5 → 7 → 9), $request->validate() vs. manual validators, route middleware registration, and the removal of several 5.x helpers.
  • No declared support matrix, no CI, no test suite visible against any Laravel version. There is nothing to verify against.

Technical risk. High, and concentrated in places a TPM owns rather than engineering:

  • Abandonment is demonstrated, not hypothetical. Nine years without a release is well past the "revisit at the next Laravel major" trigger described in the prior assessment — it has missed roughly seven majors. Bus factor is one, with no evidence of triage.
  • Security surface is public-facing and unmaintained. The package's job is to accept untrusted input, persist it, and send email. Email-header injection, unbounded form submissions, and stored-XSS-in-admin-view are all classic contact-form failure modes; an unmaintained dependency here is a standing vulnerability with no upstream patch path.
  • Abuse controls appear absent. The description mentions validation, storage, and notification — no rate limiting, honeypot, CAPTCHA, or throttling. Shipping it as-is puts an unthrottled mail-sending endpoint into production.
  • PII and compliance. Contact submissions are personal data written to your schema. The package's data model becomes your data model, and its migration becomes your retention/erasure problem — with no maintainer to support a subject-access or deletion request.

Key questions for the evaluation owner:

  1. What Laravel and PHP versions are actually in production today, and what is the next major upgrade date? (If the answer is 5.4, this conversation changes entirely — but that is unlikely.)
  2. Is the intent to take a dependency or to take a reference implementation? These have very different risk profiles.
  3. Who owns the risk-register line, and what is the review date?
  4. Do we have a spam/abuse requirement (rate limit, CAPTCHA, IP throttling) that this package does not satisfy?
  5. What is our PII retention policy for inbound inquiries, and does the package's schema support it?

Integration Approach

Stack fit. Effectively zero on supported Laravel. This package does not fit a modern stack as a dependency; it fits only as documentation of a pattern. The prior assessment's "adopt when it is actively maintained" gate fails on every count: no commits or releases in ~9 years, no declared illuminate/* range matching a supported version, no CI, no test coverage, and a community signal (4 stars) far below the threshold where third-party usage de-risks adoption.

Recommended path: do not adopt as a dependency. Reimplement in-house, using the package as a spec.

The honest scoping observation is that this package's entire surface is small — a route, a FormRequest with 4–6 rules, one table and model, one Mailable, one Blade view, one config file. That is a 1–3 day build for a Laravel developer, and it produces code your team owns, versions against your actual framework, and can extend without forking. Adopting an unmaintained 2017 package to save those 1–3 days and then spending 2–5 days fighting Composer resolution, mail APIs, and middleware registration is negative return on the same capacity.

If a dependency is mandated by policy, the migration path is a fork: vendor the code, rewrite the composer.json constraint to your current Laravel line, replace the mail call with a Mailable, convert the controller to a FormRequest, re-register routes through the current Route:: API, add tests, and re-publish. At that point you own a fork of an abandoned package — which is strictly worse than owning a clean in-house implementation with no inherited provenance, license, or upgrade ambiguity.

Compatibility and sequencing.

  1. Spike (0.5 day): confirm the install constraint against your locked Laravel version. This will almost certainly terminate the adoption track immediately and cheaply.
  2. Extract the spec (0.5 day): from the published config, migration, and view, write down the field set, validation rules, recipient configuration, and route/prefix conventions you actually want. This is the package's only durable contribution.
  3. Build (1–2 days): route + FormRequest + migration/model + queued Mailable + Blade view + notification to the team. Add throttling middleware and a honeypot on day one rather than as a follow-up.
  4. Seam: keep the notification behind your own interface or event so the delivery mechanism (mail, CRM webhook, ticketing system) can change without touching the controller.

Sequencing note for the roadmap: re-baseline. The prior assessment anticipated a package adoption freeing multi-sprint capacity; this package frees nothing. If the roadmap assumed a dependency here, that assumption needs correcting now, not at integration time.

Operational Impact

Maintenance. As a dependency: unacceptable. You would be the largest consumer of an abandoned package, funding all bug-finding with no upstream to receive fixes. As in-house code: trivial — one controller, one model, one Mailable, under 300 lines, fully within your own upgrade cadence.

Support. No maintainer response channel of any practical value. No security advisory process. No deprecation policy. Under the risk-register framing, this is a line item with an owner but no mitigation other than replacement — which argues for skipping the dependency entirely rather than recording a risk you already know you cannot accept.

Scaling. The workflow itself scales fine — a contact form is not a throughput problem. The two real scaling levers are ones the package does not address: mail delivery (send synchronously and a slow SMTP handoff becomes your request latency; queue it) and inbound volume (unthrottled public POST endpoints attract bots; without rate limiting, storage and mailbox grow unbounded). Both must be added regardless, which further erodes the "ready-to-use" value proposition.

Failure modes.

  • Silent mail failure — submissions persist, notifications never arrive, no one notices for weeks. Requires monitoring on send failures and a queue-failure path.
  • Spam flood — no throttle in the package; a single bot campaign saturates storage and the notification inbox.
  • Framework upgrade break — if adopted as a dependency, the next Laravel major is a forced migration on someone else's timeline, with no upstream fix coming.
  • PII leakage — submission data in logs, in error trackers, or in an unredacted admin view.
  • Composer resolution failure at install or on a fresh clone — the most likely first failure, and the cheapest to discover if the spike is run first.

Ramp-up. Low either way — the domain is a contact form. The asymmetry is in who ramps: with the dependency, every future engineer ramps on an unfamiliar, undocumented, nine-year-old package; with in-house code, they ramp on code that matches every other controller in the application.

Recommendation. Decline as a dependency; adopt as a specification and reference scaffold. Record the decision as: package evaluated, rejected on maintenance and compatibility grounds (last release 2017, no supported illuminate/* range, no CI or test coverage); pattern accepted; implement in-house within the current sprint at ~2 days; review not required. This is a case where the cheapest dependency is the one you don't add — and where the prior assessment's own gates, applied to the actual metadata rather than the marketing description, produce a clear no.

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.
gmostafa/php-graphql-client
xeviant/paystack
snowsoft/faker
meditationsteps/blogetc
animalyoung/laravel-influxdb
onix-solutions/sms-telera
lonely-lights/prosetta
oxygen/data
oxygen/core
jengo/base
xiloryx/log-collector
a21ns1g4ts/filament-stripe
la-php/laravel-admin
artisan-build/community-prompts
vleroy/smart
ayles-software/laravel-australian-public-holidays
cboxdk/laravel-id-spatie
cboxdk/laravel-id-billing
cboxdk/laravel-id-billing-bridge
simple-as-fuck/php-performance-log