NewWe open-sourced 50+ Laravel packages
Custom AI apps, agents and automation — Roundly ConsultingRoundly
All packages

Tags for Laravel is headless: it owns the data, the rules, the search and the safety, and you build the screens on top — or switch on its JSON API for a single-page or mobile app. One package covers the two shapes almost every app ends up needing: a curated category tree where each record sits in exactly one place, and free labels people type in, as many as you allow. Each use below leans on a capability that ships in the box:

  • Event and ticketing platforms — a genre tree for discovery (Music › Jazz) declared hierarchical() and single(), free labels (outdoor, free entry) with max(10), and withAnyTags(['music'], 'genre', descendants: true) so “Music” also lists every jazz night.
  • Blogs, magazines and knowledge bases — sections as a tree, topics as labels, names in every locale with one slug per locale, and stableSlugs() so /blog?topic=laravel never moves when an editor renames the topic.
  • Help desks and project tools — labels that belong to each project or customer: a model’s tagScope() returns its team, every free-form label typed on it lands in that team, and no team ever sees, uses or renames another team’s labels.
  • Shops and marketplaces — product categories with stable URLs, attribute-style labels, TagsFilter for ?filter[category]=shoes and popular(on: Product::class, where: …) that counts only listed products.
  • Job boards and talent platforms — one skills tree on candidates and job ads alike (on(Candidate::class, JobAd::class)), with suggest() autocomplete across languages.
  • Multi-tenant SaaS products — every customer gets its own tags next to a shared, curated global set; globalOnly() types (a country, a main category) stay one list for everyone.
  • Package authors — a package declares its own prefixed types (events:category) and the app keeps the final word through Tags::extend() or tags.overrides, whatever order the providers boot in.

Start with the default tag type and grow into the rest: trees, tenants, translations and the API are each configuration, not a fork. The rules hold on every path — your code, form requests, queued jobs and the API — and under concurrent writers, so a “one category per event” rule cannot be broken by accident.

Show your open-source love

This package is free and MIT-licensed. If it saves you time, a one-off donation or a Patreon membership keeps it maintained, tested and documented.

More ways to support, including crypto

By donating, you agree to our donation terms.

Want this built into your product?

We integrate our packages into custom Laravel and AI builds. Tell us what you're working on and we'll reply within 48 hours.