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

Filament Autosave Laravel Package

yousefaman/filament-autosave

Filament Autosave adds automatic form saving to Filament v4 and v5. Edit page changes are saved after a debounce with a status indicator and one-step Undo, while Create and custom pages keep unsubmitted work as a Laravel Cache draft users can restore or discard.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • The package is a UI-layer concern bolted onto Filament's Livewire form lifecycle: it observes form state, debounces, and persists. It does not impose a domain model, migrations, or contract on our entities — low architectural coupling, which is favorable.
  • The critical architectural distinction is that Edit pages write directly to the database without an explicit submit, while Create/custom pages write to the Laravel Cache as drafts. These are two different persistence semantics behind one plugin, and they carry different risk profiles. The Edit behavior converts form interaction into a stream of partial writes to production tables; that is a genuine change to our system's write model, not a cosmetic UX add-on.
  • Cached drafts introduce a second, non-durable store for user-authored content. Cache is treated as a system of record here for unsubmitted work — that is an architectural smell we must accept or explicitly mitigate (dedicated cache store, TTL policy, key namespacing per tenant/user).

Integration feasibility

  • Straightforward mechanically: Composer install, register the plugin on the panel (or apply a trait to specific pages), publish config. Requirements (PHP 8.2+, Filament v4/v5, Livewire v3/v4) align with a modern Filament panel.
  • Laravel is intentionally unconstrained by the package (inherited from Filament), and CI covers only Laravel 12 and 13 — Composer 2.9+ will refuse Laravel 11 installs due to security advisories. Our Laravel version must be verified before we treat this as installable.
  • Real feasibility question is not installation but side-effect control: if our models carry observers, events, state machines, notifications, webhooks, or search indexing, every debounce tick may fire them. That determines whether this is a config change or an engineering project.

Technical risk

  • Maturity risk (high): 3 stars, 0 dependents, single maintainer. There is no downstream evidence of production use. Adopting this means we are likely the most advanced consumer of the package in existence.
  • Data integrity risk (high): concurrent editors on the same record produce lost updates unless the package implements versioning or locking. The README does not describe conflict handling.
  • Undo semantics risk (medium): "one-step Undo" is described at the form level; scope (single field vs. entire record snapshot), durability (client-side vs. persisted), and whether it survives page reload are unspecified.
  • Cache risk (medium): drafts share the application cache. Eviction under maxmemory, deploy-time cache:clear, or queue/worker pressure can silently destroy unsubmitted user work.
  • Upgrade-coupling risk (medium): the package straddles Filament v4/v5 and Livewire v3/v4. A major bump in either creates a version-support cliff we do not control.
  • Validation/authorization risk (medium): unclear whether writes are gated on $this->form->validate(), field-level validation, and per-write policy checks. Autosaving a partially valid form into a table with NOT NULL or domain constraints will surface as 500s or silent coercion.

Key questions

  1. Are Edit-page autosaves gated on full form validation, or do they persist invalid/partial state?
  2. Is the write scope dirty-fields-only or the entire form payload? (Write amplification and clobbering behavior both hinge on this.)
  3. How is concurrent editing handled — last-write-wins, updated_at guard, version column, or nothing?
  4. Which events/observers fire per autosave tick, and is there a documented suppression path?
  5. Where are drafts stored, with what TTL, and can they be pinned to a dedicated cache store and namespaced per tenant?
  6. Does each autosave re-run authorization (update policy) and tenancy scoping?
  7. What is Undo's actual scope, and is it reconstructed server-side or held in browser memory?
  8. Is autosave opt-in per resource, per form, per field — or global once the plugin is registered?
  9. What is the test suite's actual coverage of the debounce, draft, and undo paths?
  10. What is the maintainer's stated support window for Filament v5 and Livewire v4?

Integration Approach

Stack fit

  • Suitable only if we are on Filament v4/v5 with a matching Livewire major, PHP 8.2+, and Laravel 12/13. Any Laravel 11 surface area is a blocker given Composer 2.9's advisory handling.
  • Best fit: internal admin/back-office panels editing long-form content (articles, profiles, settings) where users lose work on session expiry. Weak fit: transactional or financial entities where partial writes and unlogged mutations are unacceptable.

Migration path

  • Do not adopt panel-wide. Register per-resource, per-page, starting with a single low-consequence resource that has no observers, no outbound side effects, and no concurrency (single editor per record).
  • Feature-flag at the resource level so we can disable without a deploy.
  • Sequence toward build-vs-buy: run a short spike (2–3 days) implementing the same behavior in-house as a Filament page trait. If our internal version is within ~1 week of effort, that is likely the better long-term trade at this maturity level; the package's value is mostly in the polish of the status indicator and draft UX, which we can replicate.

Compatibility

  • Verify against our Filament major specifically; do not rely on the v4-or-v5 claim without a lockfile test.
  • Check for collisions with: Filament's own unsaved-changes guard, any revision/audit package, custom field wrappers, and any ->live() / reactive field configuration that already triggers frequent requests. Two competing debounce mechanisms will produce confusing UX and doubled request volume.
  • Reconcile with our model observers before enabling — decide explicitly whether autosave should bypass them, and how.

Sequencing

  1. Spike: install in a sandbox panel, one resource, one model with a trivial observer set. Measure request volume and write count per editing minute.
  2. Audit the source for validation gating, undo implementation, and draft key construction. If the answers to the key questions above are not documented, read the code — the README will not settle them.
  3. Decide concurrency strategy (add a version/lock_version column, or restrict autosave to single-editor resources).
  4. Provision a dedicated cache store or key namespace for drafts; set TTL explicitly; confirm drafts survive deploys.
  5. Suppress or make idempotent all observer-driven side effects for autosave ticks.
  6. Pilot with one team, instrument writes and error rates, publish a user-facing note that "Cancel" no longer means discard on Edit pages.
  7. Expand resource-by-resource; vendor/fork the package at the pin we validate, so upstream abandonment or a breaking Filament bump does not block us.

Operational Impact

Maintenance

  • Effectively a self-maintained dependency. With one maintainer, 3 stars, and 0 dependents, we should assume no upstream fix turnaround. Budget for a vendored fork (MIT permits it) and assign clear internal ownership.
  • Pin the exact version; treat any Filament or Livewire major upgrade as requiring a re-validation of this package. Add it to the upgrade checklist alongside first-party plugins.

Support

  • No vendor, no SLA — GitHub issues only. We need an internal runbook covering: how to disable the plugin per resource, how to inspect and recover cached drafts, and what to tell users when a draft is lost.
  • Expect user confusion to be a support load in itself: autosave changes the meaning of "Cancel" and "Back." Publish guidance and consider suppressing autosave on resources where abandonment is a normal workflow.

Scaling

  • Write amplification is the primary scaling concern: debounce × active editors. Estimate edits-per-minute per user and multiply by concurrent editors before rollout; for a modest internal panel this is fine, for a large one it meaningfully increases write IOPS and replication lag.
  • Cached drafts consume memory proportional to active, unsubmitted sessions. Size the cache store and set eviction policy deliberately — an LRU under memory pressure will evict drafts, which is user-visible data loss.
  • Status indicator and undo are client-side; no meaningful server-side fan-out beyond the save requests themselves.

Failure modes

  • Silent draft loss: cache eviction, cache:clear during deploy, or TTL expiry. Mitigation: dedicated store, long TTL, deploy hooks that exclude the draft namespace.
  • Invalid state persisted: partial writes reaching tables with domain constraints; surfaces as 500s or corrupted records. Mitigation: confirm validation gating, add DB constraints as a backstop.
  • Lost updates: two editors, last writer wins, no warning. Mitigation: optimistic concurrency column or restrict scope.
  • Observer storms: notifications, webhooks, or index updates fired on every debounce tick. Mitigation: suppress or debounce downstream consumers.
  • Session/CSRF expiry mid-edit: in-flight autosave 419s; behavior on the next tick is undefined without testing.
  • Undo restoring stale data: undo after a concurrent external change could revert fields the user never touched.
  • Upstream breakage: Filament/Livewire major bump without a matching package release. Mitigation: fork.

Ramp-up

  • Engineering: low — hours for a developer already fluent in Filament/Livewire to wire up and configure; 2–3 days to audit the internals and validate the key questions.
  • Operations: low-to-moderate — the new work is cache store provisioning, draft recovery procedures, and adding the package to the upgrade checklist.
  • Users: moderate — autosave is a behavioral change, not an additive feature. It removes the safety of "I didn't save," which is good, but it also removes "I'll discard by navigating away," which requires explicit communication and, on some resources, a deliberate opt-out.
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.
steadrun/laravel-monitor
labyrinthe/connect-laravel
elmogy/layan
drewdan/sentinel-client
dskripchenko/laravel-llm
fatryst/nuonuo
stevenay/myanfont
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