blendbyte/livewire-honeypot
Blendbyte Livewire Honeypot provides lightweight, CAPTCHA-free spam protection for Laravel Livewire forms. It uses hidden honeypot fields and timing checks to catch automated submissions, helping keep forms simple, accessible, and user-friendly for real visitors.
<x-honeypot /> now works in plain forms posting to a controller (with a signed token) as well as Livewire forms, so a single dependency covers every public form surface instead of two implementations.HONEYPOT_MAXIMUM_FILL_SECONDS (with 0 to disable) turns "how long may a form legitimately stay open?" into an explicit setting, paired with a clear user-facing "This form has expired" message. PMs must decide this per form type — short-lived marketing forms vs. long-lived applications, claims, or saved drafts.form_expired event reason (alongside bait-filled signals) gives analytics a real taxonomy for blocked submissions, so tuning is evidence-based rather than guessed. This is the difference between "we think spam dropped" and a dashboard.referral_3f9a) so browsers and password managers leave them alone. That targets a known ticket generator: autofill collisions and assistive-tech complaints on hidden inputs.HONEYPOT_LOG_VALUE is opt-in and off by default; logging a filled bait value means recording user-submitted content, so enabling it is a data-handling decision requiring review, not an ops toggle.HoneypotService::fake() auto-resetting between tests reduces flaky suite behavior, and the token_min_length deprecation gives a scheduled cleanup item to slot into the 3.0 planning window.Adopt when:
fake() with automatic reset) instead of untested custom middleware.Look elsewhere or proceed carefully when:
HONEYPOT_MAXIMUM_FILL_SECONDS or set it to 0, or you will reject real users as form_expired.wire:model, which is migration work before upgrade.HONEYPOT_LOG_VALUE off and document that decision.token_min_length is ignored now and will be deleted).Executives: A small, low-risk dependency that cuts form spam and fake signups without adding a CAPTCHA step that costs conversions, without a vendor contract, and without a third-party script on our pages. The 2.2.0 release extends coverage from Livewire-only to standard HTML forms, so one decision covers all our public forms, and blocked submissions now report a reason (including form_expired) so we can quantify impact rather than assert it. The main risk is false positives on unusually long-lived forms, which is manageable through configuration.
Engineering: The upgrade is behavior-compatible for typical apps — no code changes required — but 2.2.0 adds a signed-token path for plain forms, per-form generated bait names, configurable expiry, and an opt-in value log, and deprecates token_min_length (removal in 3.0). Concrete actions: read the upgrade notes before merging; raise HONEYPOT_MAXIMUM_FILL_SECONDS wherever a form legitimately stays open an hour or more; update browser tests to select the bait by wire:model; leave HONEYPOT_LOG_VALUE disabled pending a data review; and schedule the token_min_length removal into the 3.0 window. Net effect is less custom spam code to own and more deterministic tests via fake() auto-reset — at the cost of one documented migration pass and a follow-up cleanup ticket.
How can I help you explore Laravel packages today?