blamodex/laravel-tags
A lightweight Laravel package for adding tags to your Eloquent models. Attach, detach, and sync tags, query models by tag, and manage taggable relationships with a simple, expressive API that fits cleanly into any Laravel app.
Architecture fit. blamodex/laravel-tags is a conventional Laravel package: a service provider with auto-discovery, publishable config/migrations, a polymorphic taggable pivot, and a trait applied to Eloquent models. That shape fits any standard Laravel application without imposing architectural opinions. v1.1.0 is scoped entirely to "Laravel 13 compatibility," which tells us the package tracks framework majors but says nothing about the internals of the tagging domain itself.
Integration feasibility. Installation is a Composer require plus migration and trait application — a low-ceremony integration. The real feasibility question is the composer constraint. A minor version bump (1.0.0 → 1.1.0) that adds Laravel 13 support is only non-breaking if it widens the constraint (e.g. ^11.0|^12.0|^13.0). If it instead narrows to ^13.0, that is a de facto breaking change shipped under a minor version, and it couples this package's upgrade to a full framework upgrade.
Technical risk. Moderate-low, but under-evidenced. The release note is a single line with no changelog detail, no test-matrix statement, and no deprecation notice. Framework-major compatibility work typically surfaces transitive dependency conflicts, renamed or removed framework APIs, and PHP minimum-version shifts. Secondary risk is project health: single-maintainer package, low release cadence, and no stated support window.
Key questions.
illuminate/* / laravel/framework constraint?composer.json beyond version constraints (PHP floor, dependency bumps)?Stack fit. Drop-in for a Laravel app: composer require, vendor:publish for config/migrations, use HasTags on taggable models, and standard relationship access. No queue, cache, or external service dependency is implied.
Migration path. Pin ^1.0 on the current branch first. Then, in an isolated branch, composer require blamodex/laravel-tags:^1.1 and inspect the lockfile diff. Use composer why-not blamodex/laravel-tags 1.1.0 to surface constraint conflicts directly. Review the GitHub compare diff (v1.0.0...v1.1.0) before accepting the version — do not rely on the release note alone. If the package narrowed to Laravel 13 only, treat this as a coupled framework-with-package upgrade rather than an independent bump.
Compatibility. Confirm the PHP floor (Laravel 13 implies a modern PHP minimum) against your runtime images. Confirm database support for whichever engine you run — polymorphic pivots and LIKE-based tag lookups behave differently on MySQL vs. Postgres vs. SQLite. Check for overlap with any existing tagging, taxonomy, or search packages in the app to avoid duplicate pivot tables.
Sequencing.
composer.json changes.Maintenance. Single-maintainer dependency with infrequent releases. Budget for a fork-and-patch contingency, pin exact versions, and review lockfile diffs on every update. Strongly consider wrapping tagging behind an internal interface or repository so the package is swappable without touching domain code.
Support. GitHub issues are the only channel; assume no SLA. Assign an internal owner, record the escalation path, and document the version you are pinned to and why. Verify the license is compatible with commercial distribution.
Scaling. Tag lookups are join-heavy by nature. Ensure indexes exist on taggable_type, taggable_id, and tag_id, plus a unique index on tag slug/name. Watch for N+1 queries on tag reads — enforce eager loading (with('tags')) at the query layer. At high tag cardinality, consider a cached tag dictionary and precomputed tag-count aggregates rather than live COUNT joins.
Failure modes.
Ramp-up. Low. A Laravel-fluent developer can integrate in roughly half a day. Plan one to two additional days for hardening: test coverage on attach/detach/rename, index verification, and an admin surface for tag management if the package does not ship one.
How can I help you explore Laravel packages today?