Download the PHP package escalated-dev/escalated-laravel without Composer

On this page you can find all versions of the php package escalated-dev/escalated-laravel. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package escalated-laravel

العربية • Deutsch • English • Español • Français • Italiano • 日本語 • 한국어 • Nederlands • Polski • Português (BR) • Русский • Türkçe • 简体中文

Escalated for Laravel

Latest Version on Packagist TestsLaravel PHP License: MIT

A full-featured, embeddable support ticket system for Laravel. Drop it into any app — get a complete helpdesk with SLA tracking, escalation rules, agent workflows, and a customer portal. No external services required.

escalated.dev — Learn more, view demos, and compare Cloud vs Self-Hosted options.

Three hosting modes. Run entirely self-hosted, sync to a central cloud for multi-app visibility, or proxy everything to the cloud. Switch modes with a single config change.

Features

Requirements

Quick Start

The install command will offer to automatically configure your User model with the Ticketable interface and HasTickets trait. If you prefer to do this manually, or if you use a custom user model, add the following:

Define authorization gates in App\Providers\AppServiceProvider::boot() for Laravel 12+, or App\Providers\AuthServiceProvider::boot() for Laravel 11 and earlier:

Visit /support — you're live.

UUID / string user keys

Escalated supports both integer and string (UUID/ULID) host-app user keys out of the box — no code or migration edits required:

Override the detection with the user_key_type config ('auto' by default; 'bigint', 'uuid', 'ulid', or 'string'):

Existing installs: the column type is chosen when a migration runs. Apps already migrated (e.g. as bigint) keep their columns; switching your user key type after installing requires a manual migration.

Ticket subjects

A ticket has a requester (the person who raised it) and a subject line (free text). Sometimes a ticket is also about one or more host-app entities — a Project, a Customer, an asset — that aren't people. Attach them as ticket subjects so agents see what the ticket concerns and can jump straight to it in your app.

Make any model attachable by implementing the TicketSubject contract. The PresentsAsTicketSubject trait gives sane defaults — override only what you need:

Attach, detach, or sync subjects on a ticket — a ticket can reference several:

Each attached subject is serialized onto the ticket as { type, id, role, title, subtitle, url, color, icon } for the frontend to render (clickable when url is set). subject_id is stored as a string, so integer, UUID, or string-keyed host models all work.

To allow attaching subjects via the agent API (and protect against arbitrary class resolution from request input), list the permitted models in config:

Programmatic attachSubject() works for any model when the allowlist is empty; the agent API only accepts allowlisted types.

Frontend Integration

Escalated ships a Vue component library and default pages via the @escalated-dev/escalated npm package.

1. Tailwind Content

For Tailwind CSS v3 and earlier, add the Escalated package to your Tailwind content config so its classes aren't purged:

For Tailwind CSS v4+, add Escalated as a source in your app CSS file instead:

Adjust the relative path if your CSS file lives somewhere else.

2. Page Resolver

If your app already has Inertia and Vue configured, add the Escalated page resolver to your existing app.ts:

3. Theming (Optional)

Register the EscalatedPlugin to render Escalated pages inside your app's layout — no page duplication needed:

Your layout component must accept a #header slot and a default slot. Escalated will render its sub-navigation in the header and page content in the default slot.

Without the plugin, Escalated uses its own standalone layout with a simple nav bar.

CSS Custom Properties

Pass a theme option to customize colors and radii:

Property Default Description
--esc-primary #4f46e5 Primary action color
--esc-primary-hover auto-darkened Primary hover color
--esc-radius 0.5rem Border radius for inputs and buttons
--esc-radius-lg auto-scaled Border radius for cards and panels
--esc-font-family inherit Font family override

Available Components

Component Description
ActivityTimeline Full audit log of ticket events
AssigneeSelect Agent assignment dropdown
AttachmentList File attachment display
FileDropzone Drag-and-drop file upload
PriorityBadge Priority level indicator
ReplyComposer Rich text reply editor
ReplyThread Chronological message thread
SlaTimer SLA countdown display
StatsCard Metric card for dashboards
StatusBadge Ticket status indicator
TagSelect Tag picker with colors
TicketFilters Search and filter controls
TicketList Paginated ticket table
TicketSidebar Ticket metadata sidebar

Shared Inertia Props

Escalated automatically shares data to all Inertia pages via page.props.escalated:

Use these to conditionally show nav links or restrict UI elements.

Hosting Modes

Self-Hosted (default)

Everything stays in your database. No external calls. Full autonomy.

Synced

Local database + automatic sync to cloud.escalated.dev for unified inbox across multiple apps. If the cloud is unreachable, your app keeps working — events queue and retry.

Cloud

All ticket data proxied to the cloud API. Your app handles auth and renders UI, but storage lives in the cloud. Supports multiple domains per API key.

All three modes share the same controllers, UI, and business logic. The driver pattern handles the rest.

Publishing Assets

Translations

Translation strings for the escalated namespace are sourced from the shared escalated-dev/locale Composer package, which is consumed by every Escalated host plugin (Laravel, Rails, NestJS, Django, …) so wording stays consistent across backends.

The EscalatedServiceProvider wires three layers, lowest to highest precedence:

  1. Central package — vendor/escalated-dev/locale/locales/{locale}/... The canonical source.
  2. Plugin-shipped overrides — lang/vendor/escalated/{locale}/... in this repository, for Laravel-specific divergences.
  3. Host-app overrides — {app}/lang/vendor/escalated/{locale}/..., populated via php artisan vendor:publish --tag=escalated-lang. Apps edit those files to brand or relocalize Escalated.

Each layer is merged on top of the previous one with array_replace_recursive (PHP groups) and array_merge (JSON), so a layer only needs to define the keys it changes. See lang/README.md for details.

Scheduling

Add these to your scheduler for SLA and escalation automation:

Configuration

All config lives in config/escalated.php. Key options:

See the full configuration reference.

Events

Every ticket action dispatches an event you can listen to:

Event When
TicketCreated New ticket
TicketStatusChanged Status transition
TicketAssigned Agent assigned
ReplyCreated Public reply added
InternalNoteAdded Agent note added
SlaBreached SLA deadline missed
TicketEscalated Ticket escalated
TicketResolved Ticket resolved
TicketClosed Ticket closed

Full events documentation →

Inbound Email

Escalated can create and reply to tickets from incoming emails. Supports Mailgun, Postmark, AWS SES webhooks, and IMAP polling as a fallback.

How It Works

  1. An external email service receives an email at your support address (e.g., [email protected])
  2. The service forwards the email to your application via webhook (or IMAP polling fetches it)
  3. Escalated normalizes the payload into an InboundMessage DTO via the adapter
  4. The InboundEmailService processes the message:
    • Thread matching: checks the subject for a ticket reference (e.g., [ESC-00001]), then checks In-Reply-To / References headers against stored message IDs
    • Match found: adds a reply to the existing ticket; reopens the ticket if it was resolved or closed
    • No match: creates a new ticket — if the sender is a registered user they become the requester, otherwise a guest ticket is created
  5. Every inbound email is logged to escalated_inbound_emails for audit

Enable Inbound Email

Adapter Setup

Mailgun

Configure a Mailgun Route to forward inbound emails to:

The signing key is in your Mailgun dashboard under Settings > API Keys > HTTP Webhook Signing Key. Requests are verified via HMAC-SHA256 signature.

Postmark

Configure an Inbound Webhook in your Postmark server settings pointing to:

The token is sent in the X-Postmark-Token header and verified on each request.

AWS SES

  1. Configure SES to receive emails and publish to an SNS topic
  2. Create an HTTPS subscription on the SNS topic pointing to:

  3. Escalated auto-confirms the SNS subscription and verifies message signatures using Amazon's certificate

IMAP (Fallback)

For providers without webhook support, poll via IMAP:

Schedule the poll command:

Webhook URL

Where {prefix} is your configured route prefix (default: support) and {adapter} is mailgun, postmark, or ses. These routes use the api middleware (no CSRF, no auth).

Processing Features

Custom Adapter

Implement the InboundAdapter interface:

Inbound Email Environment Variables

Variable Default Description
ESCALATED_INBOUND_EMAIL false Enable inbound email
ESCALATED_INBOUND_ADAPTER mailgun Default adapter
ESCALATED_INBOUND_ADDRESS [email protected] Support email address
ESCALATED_MAILGUN_SIGNING_KEY — Mailgun webhook signing key
ESCALATED_POSTMARK_INBOUND_TOKEN — Postmark inbound token
ESCALATED_SES_REGION us-east-1 AWS SES region
ESCALATED_SES_TOPIC_ARN — AWS SNS topic ARN
ESCALATED_IMAP_HOST — IMAP server hostname
ESCALATED_IMAP_PORT 993 IMAP server port
ESCALATED_IMAP_ENCRYPTION ssl IMAP encryption
ESCALATED_IMAP_USERNAME — IMAP username
ESCALATED_IMAP_PASSWORD — IMAP password
ESCALATED_IMAP_MAILBOX INBOX IMAP mailbox to poll

Routes

Route Method Description
/support GET Customer ticket list
/support/create GET New ticket form
/support/{ticket} GET Ticket detail
/support/guest/create GET Guest ticket form
/support/guest/{token} GET Guest ticket view (magic link)
/support/agent GET Agent dashboard
/support/agent/tickets GET Agent ticket queue
/support/agent/tickets/{ticket} GET Agent ticket view
/support/admin/reports GET Admin reports
/support/admin/departments GET Department management
/support/admin/sla-policies GET SLA policy management
/support/admin/escalation-rules GET Escalation rule management
/support/admin/tags GET Tag management
/support/admin/canned-responses GET Canned response management
/support/inbound/mailgun POST Mailgun inbound webhook
/support/inbound/postmark POST Postmark inbound webhook
/support/inbound/ses POST SES/SNS inbound webhook
/support/agent/tickets/bulk POST Bulk actions on multiple tickets
/support/agent/tickets/{ticket}/follow POST Follow/unfollow a ticket
/support/agent/tickets/{ticket}/macro POST Apply a macro to a ticket
/support/agent/tickets/{ticket}/presence POST Update presence on a ticket
/support/agent/tickets/{ticket}/pin/{reply} POST Pin/unpin an internal note
/support/{ticket}/rate POST Submit satisfaction rating

All routes use the configurable prefix (default: support). Inbound webhook routes use the api middleware (no auth, no CSRF).

Plugin SDK

Escalated supports framework-agnostic plugins built with the Plugin SDK. Plugins are written once in TypeScript and work across all Escalated backends.

Installing Plugins

The plugin bridge is built into escalated-laravel — no additional PHP package required. Install plugins and the runtime via npm:

Enabling SDK Plugins

How It Works

SDK plugins run as a Node.js subprocess managed by @escalated-dev/plugin-runtime, communicating with Laravel over JSON-RPC 2.0 via stdio. The escalated_do_action() and escalated_apply_filters() helpers dual-dispatch to both legacy PHP plugins and new SDK plugins simultaneously — no changes to existing hook call sites.

Building Your Own Plugin

Resources

See the detailed Plugin Bridge section below for the full architecture, auto-generated routes, dual dispatch, and store documentation.

Plugin Bridge (SDK Plugins)

Escalated supports a second generation of plugins written in TypeScript using the @escalated-dev/plugin-sdk. These plugins run as a Node.js subprocess managed by @escalated-dev/plugin-runtime and communicate with Laravel over JSON-RPC 2.0 via stdio.

How It Works

The bridge spawns the runtime lazily on the first hook dispatch and keeps the process alive across requests (one long-lived subprocess per PHP-FPM worker). If the process crashes it is automatically restarted with exponential backoff.

Requirements

Install any SDK plugins the same way:

Startup Sequence

  1. EscalatedServiceProvider::boot() calls $bridge->boot()
  2. Bridge spawns node node_modules/@escalated-dev/plugin-runtime/dist/index.js
  3. Protocol handshake confirms version compatibility
  4. Bridge fetches the plugin manifest (pages, hooks, endpoints, webhooks)
  5. Routes are registered in Laravel for plugin pages, API endpoints, and webhooks
  6. Runtime is ready to receive hook dispatches

Auto-generated Routes

For each installed SDK plugin the bridge automatically registers:

Category URL Pattern Auth
Admin pages {prefix}/admin/plugins/{plugin}/{route} Admin
Data endpoints {prefix}/api/plugins/{plugin}/{path} Admin
Webhook endpoints {prefix}/webhooks/plugins/{plugin}/{path} None

Dual Dispatch (Backward Compatibility)

The existing escalated_do_action() and escalated_apply_filters() helper functions dispatch hooks to both old PHP plugins and new SDK plugins simultaneously. No changes are required to existing hook call sites.

Plugin Store

SDK plugins can persist data using ctx.store. This is backed by the escalated_plugin_store table:

Configuration

Writing SDK Plugins

See the @escalated-dev/plugin-sdk package for the full TypeScript authoring API. A minimal plugin looks like:

Documentation

Newsletters (optional, disabled by default)

An admin-only broadcast feature for sending Markdown emails to contacts. Disabled by default — when off, no newsletter routes, controllers, or scheduler hooks register.

Add a Laravel scheduler entry in app/Console/Kernel.php:

Then re-seed permissions to attach newsletters.manage and newsletters.send to the Admin role:

Custom themes live in resources/views/vendor/escalated/newsletters/themes/<slug>.blade.php.

ESP webhook endpoints for outbound events:

Testing

Also Available For

Same architecture, same Vue UI, same three hosting modes — for every major backend framework.

License

MIT


All versions of escalated-laravel with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
escalated-dev/locale Version ^0.1.8
illuminate/contracts Version ^11.0|^12.0|^13.0
inertiajs/inertia-laravel Version ^2.0|^3.0
league/commonmark Version ^2.0
symfony/dom-crawler Version ^6.0|^7.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package escalated-dev/escalated-laravel contains the following files

Loading the files please wait ...