Skip to main content
The Middleware component provides a middleware layer for intercepting events, enabling logging, monitoring, data collection, and side-effects when events fire.

Overview

Middleware handlers are registered for specific events and execute in priority order when that event is triggered. They are used for:

Intercept Events

Run code when events fire

Log Activity

Log all event activity automatically

Collect Data

Gather data from multiple handlers

Side Effects

Trigger additional actions on events
Important: Middleware handlers in TriggerEvent run all registered handlers regardless of return values. Middleware does NOT block or prevent event execution — it runs side-effects alongside events.

Methods

Add

Register middleware for a specific event.
string
required
Name of the event to intercept
function
required
Middleware function to execute.Parameters:
  • source (number) - Player who triggered event (if applicable)
  • ... - Additional event parameters
number
default:"1"
Execution priority (lower numbers execute first)
Example:

TriggerEvent

Trigger all middleware handlers for an event. All handlers run in priority order — errors in one handler do not stop others.
string
required
Event name to trigger
number
required
Player source (or 0 if not player-related)
any
Additional parameters passed to all handlers
Behavior:
  1. Handlers are sorted by priority (lowest first)
  2. Each handler runs via pcall — errors are caught and printed, never crash the server
  3. All handlers run regardless — return values are ignored
  4. Errors print to console: [Middleware] ERROR in 'eventName' handler (priority X): error message
Example:

TriggerEventWithData

Trigger middleware and collect return values from all handlers into a combined table. This is used when you need handlers to contribute data.
string
required
Event name to trigger
number
required
Player source
any
Additional parameters
Returns: A combined table of all handler return values. Each handler should return an array of tables. Each returned item gets an ID field assigned for ordering. Handler return format:
Example — collecting menu items from multiple resources:

Priority System

Lower priority numbers execute first:
The default priority is 1 if not specified.
Recommended Priorities:

Common Use Cases

Logging Player Actions

Tracking Connections

Economy Monitoring

Anti-Cheat Detection Logging

Collecting Data from Multiple Resources


Error Handling

Middleware handlers are wrapped in pcall. If a handler errors:
  1. The error is printed to console with the event name and priority
  2. Other handlers continue to execute — one error does not stop the chain
  3. For TriggerEventWithData, errored handlers contribute nothing to the result

Resource Restart Behavior

Middleware handlers are cleared when any resource starts (except the current resource). This means:
  • Handlers are re-registered when resources restart
  • Stale handlers from stopped resources are cleaned up automatically

Best Practices

Middleware runs on every event trigger. Keep handlers fast:
When you need handlers to contribute data, use TriggerEventWithData:
For plain side-effects (logging, notifications), use TriggerEvent instead.
Unlike some frameworks, Mythic middleware does NOT support blocking:
If you need to prevent an action, implement the check in the event handler itself, not in middleware.

Next Steps

Event System

Understanding the event system

Base API

Core framework exports

Logger API

Logging component

Callbacks

Request-response communication