codedor/filament-link-picker
A Filament form field that lets editors choose links without hand-typing URLs. It provides a searchable picker for internal pages, model records, and custom routes, with configurable sources and labels. Use it for navigation, buttons, and CTA fields to keep links consistent in Laravel admin panels.
Architecture fit: wotzebra/filament-link-picker is a Filament form-field plugin — a UI component for selecting internal routes/models or external URLs inside a Filament panel resource form. It sits entirely in the admin/authoring layer and persists as a serialized Link value object (route name, parameters, anchor, external URL, target). It does not touch the public request path, routing, or rendering pipeline, so architectural coupling is limited to the Filament panel and the column type used to store the link payload.
Integration feasibility: Low. composer require wotzebra/filament-link-picker, register the field in a resource schema, add a json/text column (or reuse an existing one), and provide a front-end resolver that turns the stored payload into a URL. No service provider gymnastics, no queue workers, no infrastructure change. Realistic effort: under a day for a first field, plus a small Blade/helper for rendering.
Technical risk:
defaultNewTab is added to Link and enabled by default for external links. Even as a minor release, this changes rendered anchor markup (target="_blank") for external links. If the property is only applied at authoring time, existing records are unaffected; if it is applied at render/resolve time, existing content silently starts opening in new tabs.#section) were being dropped when composing the URL. Worth confirming whether this is render-time only or whether it also changes the persisted payload shape — the latter would need a data check on existing rows.Key questions for the maintainer/repo:
defaultNewTab affect existing persisted Link records, or only newly authored links? Is it configurable globally?Link, and is the new property nullable/defaulted on deserialization of older payloads?rel="noopener noreferrer" emitted alongside target="_blank"?Stack fit: Standard Laravel + Filament (TALL) admin panel. Composer-only dependency, no Node build step beyond Filament's existing asset pipeline, no database engine requirements. Fits any Laravel app already running Filament; a poor fit for apps without Filament, or for headless/API-only content authoring.
Migration path:
^2.2 in composer.json and upgrade in a branch; run the existing test suite plus a Filament panel smoke test.Link payload before/after: create a record on v2.1.0, load and re-save it on v2.2.0, and confirm the JSON round-trips without losing or mutating fields.target changes.Compatibility: Minor version bump, expected to be backward compatible at the API level. The compatibility surface to actually test is (a) Filament major version, (b) the Link value-object shape in stored JSON, and (c) front-end rendering code that reads the payload. Anything consuming the stored JSON directly — custom accessors, API resources, search indexes — should be re-checked.
Sequencing: Upgrade in local → CI green → staging with a copy of production data → content-team UAT on the new-tab default and on previously broken anchor links → production. Ship it as a normal dependency bump, not a scheduled change; no downtime, no migration required unless the anchor fix proves to need a backfill.
Maintenance: Low ongoing effort, but treat the package as a pinned dependency rather than a floating one. Budget a recurring review each time Filament ships a major, since that is when this package is most likely to lag or break. The active Dependabot setup is a good sign for supply-chain hygiene; keep your own lockfile updates flowing.
Support: Community-supported with a small contributor base — assume no SLA. Mitigate by keeping the integration surface thin: a single form field plus one URL-resolution helper. If the package goes stale, replacing it with a stock Filament field (route select + URL input + a fragment field) is a contained piece of work, roughly a day, because nothing outside the admin form depends on it.
Scaling: Negligible. All work happens in the admin panel at authoring time; the public site only reads a stored string. No effect on request throughput, query counts, or queue depth. The only scale-adjacent concern is the storage column format — JSON blobs are fine to read but awkward to query or index, so avoid needing to filter content by link target.
Failure modes to watch:
Link payload drift on deserialization → older records render blank or throw in the resolver; caught by loading legacy rows in staging.#a#a.target="_blank" without rel="noopener" → minor security/performance issue on outbound links; verify in rendered HTML.Ramp-up: A Laravel developer familiar with Filament is productive in a few hours; document the stored payload shape and the resolver helper so future maintainers do not have to read the package source. Content editors need a short note on the two changes that affect them: external links now default to opening in a new tab, and anchor/fragment links that previously lost their #section now work — worth a pass over existing link-heavy pages.
How can I help you explore Laravel packages today?