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 Title With Slug Laravel Package

blendbyte/filament-title-with-slug

Filament v5 field combining title and slug with automatic slug generation, live permalink preview, and inline editing. Supports Laravel 11–13.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Verdict: Low-risk, high-convenience UI component with meaningful supply-chain risk. Adopt only behind an internal wrapper and a pinned version.

Architecture fit

  • Ships as a single Filament form field (TitleWithSlugInput::make()), so it composes into the existing Resource::form() schema with no service provider wiring, no migrations, and no model contract changes. It binds to title/slug by default, overridable via fieldTitle/fieldSlug.
  • Blast radius is structurally small: it is presentation + validation glue over columns we already own. Removing it is a namespace import change, not a data migration.
  • Fits our Laravel 11/12 + Filament baseline only if we are on Filament ^5.0. The package is hard-pinned to v5; v1/v2 (Filament 3/4) are explicitly deprecated and receive security fixes only. That is a forward-only bet on a young Filament major.
  • Extensibility is adequate for our needs: custom titleField (critical for translatable titles via Spatie), custom slugifier + regex, slugRuleUniqueParameters, readonly callbacks per context, and named-route "Visit" links. Config and translations are publishable, so we can own branding/localization without forking.

Integration feasibility

  • Integration cost is genuinely hours, not days: composer require, drop one component into a resource, optionally publish config/translations. No Tailwind/Vite build step — v3 auto-registers its stylesheet, which removes the most common upgrade friction we have seen with form-field packages.
  • Two real integration decisions, not implementation details:
    1. Uniqueness semantics. A unique rule is auto-applied to slug, but real-world correctness depends on scoping — multi-tenant, soft-deleted records, and draft/published variants. This must be configured via modifyRuleUsing, and if we do not, we ship a latent 500 or a silent cross-tenant leak.
    2. Slug lifecycle policy. The component regenerates the slug from the title; slugIsReadonly or the /-as-homepage pattern are the only guardrails. Without a policy ("slug freezes at first publish"), we will casually break inbound links and SEO — a business cost far exceeding the package's.

Technical risk

  • Adoption risk (primary): 18 stars, 0 dependents, single-vendor (blendbyte) with a prior namespace migration (Camya\… → Blendbyte\…) and two deprecated major lines. This is a bus-factor-of-one dependency in a critical authoring path. Positive counter-signals: MIT license, tagged releases, CI test + static-analysis badges, 7 shipped locales.
  • Version-coupling risk: the package tracks Filament majors 1:1. A Filament 6 release forces a package major, and history shows v1/v2 were dropped rather than backported. We inherit Filament's upgrade cadence as a hard dependency.
  • Compatibility gap: README states PHP 8.2 is not tested against Laravel 13. If our platform targets Laravel 13, we are outside the tested matrix on day one.
  • Behavioral risk: live preview implies client-side/Livewire-driven state updates. Autosave, unsaved-changes guards, and slow-network behavior need verification on our stack, not the demo's.
  • Low-severity risk: hardcoded urlHost/urlPath in preview strings can drift from actual routing; prefer urlVisitLinkRoute so the visible URL is derived from the route table.

Key questions

  • Is our roadmap committed to Filament 5, and what is the maintainer's stated plan for Filament 6?
  • Does the slug regeneration respect manual overrides after first save, and can we enforce a freeze-at-publish policy declaratively?
  • How does titleField behave with translatable inputs where slug is not itself translatable — one slug per locale or per record?
  • Does the auto unique rule account for soft deletes and tenant scoping by default, or must we always pass modifyRuleUsing?
  • What is the escape hatch if the vendor abandons the package — is the field small enough for us to fork and maintain (how many classes/LOC)?
  • Accessibility and i18n of the inline OK/Cancel/Reset controls; are the 7 shipped translations complete?

Integration Approach

Stack fit

  • Compatible with Filament ^5.0, Laravel ^11/^12/^13, PHP 8.2+. This aligns with a modern Laravel baseline but constrains us to Filament 5 — a package-level constraint that should be validated against our admin panel roadmap before adoption, not after.
  • Purely additive: no schema changes, no new tables, no config-driven runtime behavior. The only persistent artifacts are optional published config and translation files under lang/vendor/filament-title-with-slug.
  • titleField support is the deciding fit criterion for content models needing translatable titles; without it the component would be unusable for our CMS-style resources.

Migration path

  • If we are already on camya/filament-title-with-slug (v1/v2), the path is documented and mechanical: composer remove / composer require blendbyte/filament-title-with-slug:^3.0, update the namespace import from Camya\Filament\Forms\Components to Blendbyte\FilamentTitleWithSlug, remove manual CSS imports from Tailwind/Vite, republish config and translations with --force, then apply Filament's own upgrade guide. The make() signature and parameter names are unchanged, so call sites are a find-and-replace.
  • If we are building fresh, "migration" reduces to a removal plan: isolate usage behind an internal App\Filament\Fields\TitleWithSlug wrapper class so the vendor import appears exactly once in our codebase. That wrapper is the entire exit strategy and costs ~20 lines.
  • No data migration in any scenario. Slugs already live in a column we control.

Compatibility

  • Known-good matrix is version-pinned; treat it as authoritative and add an explicit compatibility test to our suite. Do not assume Laravel 13 + PHP 8.2 works — it is called out as untested.
  • Watch the Filament minor cadence: form-field internals (Field, state callbacks, asset registration) are the parts most likely to shift in minor releases. Lock to a tested minor range in composer.json and bump deliberately.
  • Style isolation is a non-issue: no Tailwind build step means no purge-config or Vite changes, which is the usual source of "works locally, broken in prod" breakage with field packages.

Sequencing

  1. Spike (0.5 day): one resource, one environment, verify live preview latency, autosave interaction, and uniqueness behavior with soft deletes + tenant scope.
  2. Policy definition (parallel): slug lifecycle rules, per-resource URL templates, and localization decision for the published strings.
  3. Wrapper + pilot (1 day): introduce the internal wrapper field, land on one low-traffic resource, instrument for form-save errors.
  4. Rollout (by resource): expand to remaining resources; each is an independent, revertible one-line change.
  5. Freeze + watch: pin the version, add a dependabot/renovate rule requiring manual review, and record the fork-readiness note.

Operational Impact

Maintenance

  • Negligible steady-state surface: no background jobs, no cron, no queues, no database objects, no external services. The package does nothing at runtime outside the form render/save path.
  • The recurring cost is upgrade governance, not operation: every Filament major and every package major requires a coordinated bump. Budget a small, recurring line item rather than a one-off install.
  • Configuration drift is the sneaky maintenance tax. Published config and translations are ours to keep in sync; if we publish and forget, defaults silently diverge on upgrade.

Support

  • Single-vendor support with public issue tracker and GitHub Discussions; no commercial SLA. Escalation path is effectively "fix it or fork it." Confirm the fork cost during the spike — if the field is a handful of classes, our worst case is an afternoon, not a quarter.
  • MIT license means we can vendor and patch without legal friction; that materially de-risks the 18-star / 0-dependent profile.
  • Internal support burden is low and concentrated: whoever owns the wrapper class owns the dependency.

Scaling

  • Scales with form usage, not traffic: the component renders per form load. Live preview may incur a Livewire roundtrip per keystroke depending on implementation — validate under realistic latency and debounce if necessary, and avoid deploying it into high-frequency repeater forms without measuring.
  • Repetition in repeaters multiplies both render cost and uniqueness validation load; that is the one pattern flagged explicitly by the docs and worth load-testing in our FAQ-style forms.
  • No impact on read paths, API responses, or frontend routing — the slug is data we already resolve.

Failure modes

  • Unique-rule collision: unconfigured scoping produces validation bypasses (cross-tenant duplicates) or false rejections on record edit. Highest-severity, lowest-visibility failure. Mitigate with mandatory modifyRuleUsing review per resource.
  • Slug mutation after publish: silent auto-regeneration breaks permalinks and SEO. Mitigate with slugIsReadonly on edit context or an explicit publish-freeze policy.
  • Breaking minor bump / package abandonment: form field stops rendering after a Filament update. Mitigate via pinned constraints, CI form-render smoke tests, and the wrapper class.
  • URL preview drift: hardcoded host/path diverges from real routing, misleading editors. Mitigate by preferring urlVisitLinkRoute.
  • Homepage edge case: / as a slug plus relaxed slugRules requires route-level coordination; treat as a design decision, not a config toggle.
  • Translation gap: partially localized UI in a non-English admin panel. Low severity, cosmetic, easily fixed by publishing and owning the language files.

Ramp-up

  • Very low: one-line component, documented parameters, screenshot-driven README, seven bundled locales, dark-mode and no-build-step support. A mid-level Laravel developer is productive in under an hour; no Filament internal knowledge required.
  • The real ramp-up is the policy conversation (URL structure, uniqueness scope, slug freezing), which is product/SEO-driven and would be required with a hand-rolled solution anyway.
  • Training note for content editors: the OK/Cancel/Reset inline edit affordance and the "Visit" link change editorial workflow; a short doc entry prevents slug churn in the first weeks.
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.
abbasudo/artisan-route
mirvan/ippanel
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package