shipfast/live-edit
Shipfast Live Edit adds in-place, live editing to Laravel apps: make text and fields editable directly on the page, save changes via AJAX without reloads, and wire it into Blade views and Eloquent models with minimal setup.
Reality check first. This package has 1 star, 0 dependents, and a NOASSERTION license. Before you write a line of Blade, spend ten minutes verifying it exists and what it actually ships: composer show shipfast/live-edit, then read the source on GitHub. If the license file is missing or ambiguous, get clarification from the vendor in writing — you cannot legally ship a commercial client site on an unlicensed dependency.
Assuming it installs:
composer require shipfast/live-edit
php artisan vendor:publish --provider="ShipFast\LiveEdit\LiveEditServiceProvider"
php artisan route:list | grep -i edit # confirm the save routes registered
Where to look first, in order:
routes/ in the package source — you need to know the exact URIs and verbs the browser will POST to, because that's what you'll be authorizing and rate-limiting.data-live-edit, data-field, etc.) is the API surface you'll be spreading across templates.First use case: pick one low-risk, high-value page — a /about or /pricing marketing page with a handful of headings, paragraphs, and one hero image. Wrap those elements, log in as an admin, flip the package's edit mode on, change a headline, save, reload as a logged-out visitor. That single loop tells you whether persistence, caching, and escaping all behave.
Wrap, don't sprinkle. Rather than hand-writing data-live-edit attributes throughout dozens of templates, define a small set of Blade components that emit the correct attributes plus sane defaults. When the package's attribute contract changes (and at 1 star, it will), you edit one component instead of 200 views.
{{-- resources/views/components/editable/text.blade.php --}}
<{{ $tag }} {{ $attributes->merge([
'data-live-edit' => 'text',
'data-field' => $field,
]) }}>{!! $slot !!}</{{ $tag }}>
Separate "who can edit" from "is edit mode on." The package will render editor chrome in the browser; authorization must be server-side regardless. Gate it behind your existing policy:
LIVE_EDIT_ENABLED=false in production .env by default) so the feature is opt-in per environment.auth + a custom can:edit-content gate.Decide where the content actually lives before you tag anything. Two viable models:
| Model | Fit | Trade-off |
|---|---|---|
| Package persists to its own table/JSON store, keyed by page path + field | Sites "already built," no CMS | You lose queryability; content is opaque strings |
| You intercept saves and write to your own Eloquent models | Sites with an existing content model | More glue code; you own migrations and validation |
For a Laravel shop, the second is usually the right call long-term — the package becomes a thin editing UI over models you already understand and can cache, version, and audit. Check whether it exposes a save event or a swappable persister class; if it does, that's your integration point.
Workflow for the content owner: they log in, hit the page URL with edit mode on, click text, type, save. No admin panel, no "which page am I editing" ambiguity. That is the entire value proposition — resist the urge to build a dashboard around it.
Media and lists are where these tools usually break down. Test image replacement against your real disk config (S3 vs. local, signed URLs, path traversal on filenames) and test a repeater/list flow with add, reorder, and delete before promising it to a client.
composer.json, commit vendor/ or fork it into your own namespace, and write an integration test around the save loop. Assume you may have to maintain it yourself within a year.{!! !!} only where you've sanitized. If the package stores raw input and you render it raw, you've built a stored-XSS machine for anyone who can reach the editor.X-CSRF-TOKEN, you'll get 419s that look like a broken save. Check the network tab first, every time.storage/logs/laravel.log; (4) did the DB change — query directly; (5) is it just cache. This ladder resolves 90% of "it didn't save."How can I help you explore Laravel packages today?