jeffersongoncalves/laravel-service-desk
Laravel Service Desk adds a ready-to-use helpdesk and ticketing layer to Laravel apps. Manage support tickets with categories, priorities, statuses, assigned agents, and customer conversations using included models, migrations, and workflow tools.
UsesServiceDeskConnection, service-desk.connection) alongside the existing database and api transports. The PM-level question is no longer just "headless or not" but "do satellite apps talk to the service desk over a signed HTTP API, or share one physical schema?" Shared-DB is the cheapest to ship and the most expensive to evolve: it couples migrations, upgrade timing, and rollback plans across every consuming app. Decide this before the second app integrates, not after.POST tickets/{uuid}/comments) and discover valid departments/categories rather than hardcoding IDs. That moves embedded/partner surfaces from read-mostly to genuinely bi-directional, which changes the staffing and timeline calculus for a widget or embedded support experience. Note the transport is deliberately asymmetric — internal notes are unreachable from this surface by construction — so "customer-facing reply" and "agent-facing note" remain separate product surfaces. Good default; confirm it matches your intended exposure.Consider it when:
Look elsewhere when:
Vetting checklist before committing: release cadence and semantic-versioning discipline (v1.2.0 is cleanly additive and non-breaking — verify that pattern holds), test coverage and CI status of the new addComment and discovery endpoints, open-issue responsiveness, migration stability across releases (note: v1.2.0 adds a uuid column to TicketComment — confirm the backfill path for existing comments before upgrading), dependency footprint (does it drag in a UI framework you don't want?), whether "headless" truly means no routes/views (it now does not — an opt-in signed-request JSON API ships with configurable prefix; verify it is off or unreachable unless you opt in), how SLA clocks handle business hours, time zones, and pauses, and — for the shared-DB mode — whether the connection trait covers all models you will touch (six core models only; anything you add yourself inherits none of it).
For executives. We can stand up an internal or embedded service desk on the Laravel stack we already run, keeping the data in our own infrastructure and avoiding per-agent SaaS licensing that scales badly as we add support staff. Ticket management, SLA clocks, a knowledge base, approval-gated service requests, and email intake are pre-built; the latest release also adds a working integration surface so other products in our portfolio can open tickets and reply to them without us building a bespoke connector. That removes an estimated several weeks of greenfield work and, more importantly, gives us a proven data model and set of requirements. The honest caveat is unchanged: this is an early-stage, single-maintainer open-source project with negligible adoption — nine stars, zero dependent projects. The 1.2.0 release is a good sign on maintenance discipline, but one release is not a track record. We should treat it as a head start, not a finished product, and budget engineering time to fork, test, and harden it. Recommendation: approve a short, time-boxed spike (2–3 weeks, one engineer) against our top five real support scenarios, and use it to settle one architectural question early — whether satellite apps integrate over the API or share our database. If the spike passes, we proceed with a clear cost avoidance; if it fails, we exit with a validated schema and a requirements document that makes any build-or-buy decision afterwards cheaper and better informed.
For engineering. MIT-licensed, Composer-installable, and headless at the core — expect domain models, migrations, events, and config rather than views, so we retain full control of the UX. 1.2.0 is additive and non-breaking, but three things need eyes during the spike. First, TicketComment gains a uuid column — dry-run the migration and backfill against realistic comment volume before committing to an upgrade. Second, the API transport is now a real integration surface: POST tickets/{uuid}/comments for public replies only (internal notes are excluded by design — a good default, but verify that boundary holds through any wrapper we write), plus departments/categories discovery so satellites stop hardcoding IDs. Treat departments and categories as a published contract with an owner, not internal config. Third, the new UsesServiceDeskConnection shared-database mode is a genuine architectural commitment: it couples our migrations and release cadence to every consuming app, covers only six core models, and is a no-op unless configured. Prefer the API transport unless we can honestly commit to coordinated deploys.
Beyond that: vendor or fork it, pin versions, wrap it behind our own service interfaces so we can swap or replace it later, and never expose its models directly through our API. Add test coverage and upgrade gates before the first production ticket. Remaining risks to verify in the spike: migration stability between releases, Laravel/PHP version constraints, how SLA timers handle business hours and pauses, email ingestion idempotency and threading, and the actual completeness of the approval-workflow and KB features. This is an accelerator and a reference architecture, not a dependency we should adopt uncritically.
How can I help you explore Laravel packages today?