Documentation Index
Fetch the complete documentation index at: https://mintlify.com/MotiaDev/motia/llms.txt
Use this file to discover all available pages before exploring further.
Engine Protocol
The iii Engine communicates with SDK workers via a JSON-based WebSocket protocol. All messages are sent as text frames (JSON) or binary frames (for telemetry).Connection
WebSocket URL:ws://localhost:49134 (default)
When a worker connects:
- Worker opens WebSocket connection
- Engine sends
WorkerRegisteredmessage with uniqueworker_id - Worker can now send registration messages
Message Format
All messages have atype field (lowercase) that identifies the message type:
Message Types
Worker Registration
WorkerRegistered
Direction: Engine → Worker Purpose: Confirms worker connection and provides worker IDworker_id(string): Unique identifier for this worker
Function Registration
RegisterFunction
Direction: Worker → Engine Purpose: Register a function that can be invokedid(string, required): Unique function identifierdescription(string, optional): Human-readable descriptionrequest_format(object, optional): JSON Schema for input validationresponse_format(object, optional): JSON Schema for output validationmetadata(object, optional): Custom metadatainvocation(HttpInvocationRef, optional): For external HTTP functions
invocation config:
UnregisterFunction
Direction: Worker → Engine Purpose: Remove a previously registered functionid(string, required): Function ID to unregister
Trigger Registration
RegisterTriggerType
Direction: Worker → Engine Purpose: Register a new trigger type (usually done by modules)id(string, required): Unique trigger type identifierdescription(string, required): Human-readable description
RegisterTrigger
Direction: Worker → Engine Purpose: Register a trigger to invoke a functionid(string, required): Unique trigger identifiertrigger_type(string, required): Type of trigger (e.g.,http,queue,cron)function_id(string, required): Function to invokeconfig(object, required): Trigger-specific configuration
TriggerRegistrationResult
Direction: Worker → Engine Purpose: Confirm trigger registration (optional acknowledgment)id(string, required): Trigger IDtrigger_type(string, required): Trigger typefunction_id(string, required): Associated functionerror(ErrorBody, optional): Error details if registration failed
UnregisterTrigger
Direction: Worker → Engine Purpose: Remove a triggerid(string, required): Trigger ID to removetrigger_type(string, optional): Trigger type (for optimization)
Function Invocation
InvokeFunction
Direction: Bidirectional (Engine ↔ Worker) Purpose: Request function executioninvocation_id(UUID, optional): Unique invocation ID for response trackingfunction_id(string, required): Function to invokedata(object, required): Input data for functiontraceparent(string, optional): W3C trace context for distributed tracingbaggage(string, optional): W3C baggage for context propagation
invocation_id for async execution without waiting for result.
InvocationResult
Direction: Bidirectional (Engine ↔ Worker) Purpose: Return function execution resultinvocation_id(UUID, required): Matches the invoking messagefunction_id(string, required): Function that was invokedresult(any, optional): Success result (null if error)error(ErrorBody, optional): Error details (null if success)traceparent(string, optional): Trace contextbaggage(string, optional): Baggage context
Service Registration
RegisterService
Direction: Worker → Engine Purpose: Register a service (collection of functions)id(string, required): Unique service identifiername(string, required): Service namedescription(string, optional): Service description
Health & Keepalive
Ping
Direction: Bidirectional (Engine ↔ Worker) Purpose: Keepalive and connection health checkPong
Direction: Bidirectional (Engine ↔ Worker) Purpose: Response to PingBinary Frames (Telemetry)
The engine accepts binary WebSocket frames with magic prefixes for telemetry:OTLP Traces
Prefix:OTLP (4 bytes)
Format: OTLP + JSON-encoded OpenTelemetry trace data
Metrics
Prefix:MTRC (4 bytes)
Format: MTRC + JSON-encoded OpenTelemetry metrics data
Logs
Prefix:LOGS (4 bytes)
Format: LOGS + JSON-encoded OpenTelemetry logs data
Trace Context Propagation
The engine supports W3C Trace Context for distributed tracing:traceparent Format
baggage Format
Error Handling
Errors are returned in theerror field of InvocationResult:
function_not_found: Function ID doesn’t existinvocation_error: General invocation errorvalidation_error: Input validation failedtimeout_error: Invocation timeoutserialization_error: JSON serialization failed
Example Flow
Complete Registration & Invocation
Protocol Implementation
Location:src/protocol.rs
All message types are defined as Rust enums with serde serialization:
Next Steps
- Engine Overview - Architecture and concepts
- Modules Reference - Module documentation
- Configuration Reference - YAML configuration