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

Uniqueslugbundle Laravel Package

fbeen/uniqueslugbundle

fbeen/uniqueslugbundle is a Symfony bundle that generates unique, URL-friendly slugs for Doctrine entities. It helps prevent duplicate slugs, supports SEO-friendly URLs, and integrates with entity lifecycle events for automatic slug creation and updates.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

The package solves a genuinely small problem: generating a URL-safe string that is unique within a table (and, per the description, potentially within the router). In a Laravel codebase this is a cross-cutting concern that belongs in a trait plus a database-level unique index — realistically 80–150 lines of application code. The package's value proposition is therefore thin, and it must be weighed against the cost of an external dependency.

A more serious fit concern: the ...Bundle suffix is Symfony convention, and the description's language ("entities and routes") is Doctrine/annotation vocabulary, not Eloquent. If the source is a Symfony bundle, it does not participate in Laravel's package discovery, service-provider lifecycle, or Eloquent event model at all, and the integration effort becomes a port rather than an install. If it is a Laravel-targeted package with legacy naming, expect a single trait and a slug-generation service with minimal Laravel idiom.

Integration feasibility

Low. The objective signals are unambiguous: 4 stars, 0 dependents, and a last release of 2019-11-05. Zero dependents means no public production reference and no downstream party exercising the code against modern framework versions. There is no evidence of a maintained test suite, no CI badge data to rely on, and no signal that PHP 8 or Laravel 8+ were ever targeted. Practically, adoption means forking and owning the source.

Technical risk

High, concentrated in three areas:

  • Correctness under concurrency. Unique-slug libraries almost always implement a SELECT ... WHERE slug = ? followed by an INSERT. That check-then-act sequence races. Two simultaneous requests for the same title will both pass the check and one will throw a QueryException on the unique index — unless the library retries, and unless the retry loop is bounded. This is the single most common production failure for this class of package.
  • Schema coupling. A DB-level unique index is mandatory for correctness, but many small packages ship no migration and rely purely on application checks. If the index is absent, uniqueness is advisory and will silently break under load.
  • Lifecycle gaps. No redirect table, so a slug change breaks inbound links and SEO. No handling for soft deletes (recycled slugs), tenancy/parent scoping (uniqueness per store rather than globally), or transliteration of non-Latin titles (which can produce an empty slug for CJK titles).

Security surface is negligible; the realistic risks are 500s, orphaned URLs, and upgrade friction.

Key questions

  1. Is this Laravel-native or a Symfony bundle? What does composer.json actually require?
  2. Does it ship a migration with a unique index, or is uniqueness application-only?
  3. What is the collision strategy — numeric suffix, random suffix, UUID — and is the retry loop bounded?
  4. Is uniqueness global or scopeable (per tenant, per parent record)?
  5. How does it treat soft-deleted rows and slug recycling?
  6. What is the transliteration story for non-Latin input, and what happens on empty output?
  7. Is there a test suite, and what is the licence?
  8. Who maintains it, and is there any commit activity after 2019?

Integration Approach

Stack fit

Poor relative to available alternatives. spatie/laravel-sluggable and cviebrock/eloquent-sluggable are both actively maintained, widely depended upon, and integrate with Eloquent events and route model binding out of the box. For a concern this small, the correct TPM recommendation is build or adopt a maintained library — do not adopt this package. If a specific behaviour in this package is genuinely attractive, reimplement it in-house (~1 day) and keep the dependency surface at zero.

Migration path

If the decision is nonetheless to proceed, treat it as a vendoring exercise, not a dependency:

  1. Copy the source into app/Support/Slugs/ or a private fork under the organisation's namespace; do not depend on Packagist.
  2. Define a narrow internal interface (SlugGenerator::unique(string $source, string $scope): string) and implement it against the vendored code. Every call site depends on the interface, never the package class.
  3. Add the unique index in a migration, explicitly named, covering the scope columns.
  4. Write an idempotent backfill command with a --dry-run flag and chunked iteration; run it via queue workers, not synchronously.
  5. Swap the implementation behind the interface for anything better later, with zero call-site changes.

Compatibility

Expect this to fail composer require outright against Laravel 9/10/11. Those frameworks require PHP 8.1+, and 2019-era code typically carries untyped or inconsistently typed signatures, dynamic properties (deprecated in 8.2), and hard illuminate/support version constraints such as ^5.5|^6.0. Widening constraints is not sufficient — the code must be exercised. Budget a half-day spike to fork, widen constraints, run a smoke test, and confirm slug generation and route binding behave correctly on the target framework version before committing to anything further.

Sequencing

  1. Spike (0.5 day): fork, widen constraints, prove generation and route binding on the current Laravel version.
  2. Decision gate: if the spike surfaces more than trivial fixes, stop and build in-house.
  3. Abstraction (1 day): internal interface plus adapter; no direct package references outside the adapter.
  4. Schema and backfill (1–2 days): unique index migration, chunked backfill command with dry-run.
  5. Canary (1 sprint): enable on one low-traffic, non-critical model only; instrument collision-retry counts and unique-constraint exceptions.
  6. Review gate: keep or replace based on canary telemetry, not on internal opinion.

Operational Impact

Maintenance

Effectively unmaintained. The last release is over five years old, with 4 stars and 0 dependents, meaning there is no realistic prospect of upstream fixes for framework upgrades, PHP deprecations, or bug reports. Every hour spent on this code in future is your team's hour. Vendoring makes this explicit, which is preferable to pretending a Packagist dependency is a support contract.

Support

No community, no issue triage, no documentation beyond a README, and a bus factor of one (an inactive maintainer). Internal runbooks must be written by the adopting team before go-live, covering the collision strategy, the retry cap, and the escalation path when slug generation starts throwing.

Scaling

The generation path is read-heavy: one or more indexed SELECTs per insert. This is comfortable at low write volume and becomes a problem during bulk imports or content migrations, where a per-row uniqueness check becomes an N+1 pattern against the slugs index. Mitigations: batch the backfill, cap retries at a small number (3–5) with a random suffix fallback, and monitor the unique-constraint error rate as a first-class metric. Uniqueness scoping matters at scale — a global unique index across a multi-tenant table will both inflate collision rates and leak existence information across tenants.

Failure modes

  • QueryException on the unique index surfacing as a 500 to the end user under concurrent writes.
  • Unbounded retry loop if the collision strategy is deterministic (e.g. always appending -1) and the suffix space is exhausted.
  • Empty or malformed slug for non-Latin titles, producing unroutable records.
  • Slug reuse after soft delete causing silent collisions or resurrected URLs pointing at the wrong record.
  • Broken inbound links and SEO damage after a slug edit, with no redirect record.
  • Mid-cycle breakage on the next Laravel major upgrade, discovered in CI rather than upstream.

Ramp-up

The API surface is small, so developer ramp-up on the mechanics is measured in hours. The real cost is organisational: every new engineer will ask why a five-year-old, four-star Symfony-named bundle is vendored into a Laravel application. That question must be pre-empted with a one-page ADR recording the alternatives evaluated, the reason for the decision, and the trigger conditions for replacement. Without that document, the decision will be re-litigated at every architecture review — and on the objective evidence (0 dependents, 2019 release, 2.37 score), the honest answer is that it should not be adopted in the first place.

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.
novasa/laravel-language-center
opencage/geocode
adolfoholzer/parameters
livenetworks/ln-starter
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core