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 Modules
The iii Engine provides a modular architecture where each module implements specific functionality. Modules are loaded fromconfig.yaml and can be configured independently.
Module Architecture
All modules implement theModule trait:
Core Modules
REST API Module
Class:modules::api::RestApiModule
Purpose: Maps HTTP routes to functions via http triggers
Location: src/modules/rest_api/
The REST API module provides HTTP endpoint routing:
- Dynamic route registration based on triggers
- Hot-reloadable routes (no restart required)
- CORS support with configurable origins
- Request timeout and concurrency limits
- Path parameters and query strings
- Request/response format validation
- Hot Router: Routes are updated dynamically when triggers are registered
- Path Router Registry: Maintains mapping of
{METHOD}:{path}→ function - Middleware Stack: Timeout, concurrency limiting, CORS
- Dynamic Handler: Extracts request data and invokes functions
src/modules/rest_api/api_core.rs
Trigger registration creates HTTP routes:
POST /users → users.create function.
Queue Module
Class:modules::queue::QueueModule
Purpose: Message queue with pub/sub, DLQ, and retry logic
Location: src/modules/queue/
The Queue module provides reliable message processing:
- Topic-based pub/sub
- Dead Letter Queue (DLQ) for failed messages
- Automatic retry with exponential backoff
- Conditional subscriptions
- Distributed tracing support
modules::queue::RedisAdapter- Redis-backed queue (production)modules::queue::RabbitMQAdapter- RabbitMQ with advanced topologymodules::queue::BuiltinAdapter- In-memory queue (development)
- Enqueue Function:
queue.enqueue- Publish messages to topics - Subscribe Trigger:
queuetrigger type - Subscribe functions to topics - DLQ Management:
queue.redrive_dlqandqueue.dlq_countfunctions - Trace Propagation: Automatic W3C traceparent/baggage forwarding
src/modules/queue/queue.rs
Example usage:
Cron Module
Class:modules::cron::CronModule
Purpose: Distributed cron scheduling with lock coordination
Location: src/modules/cron/
The Cron module provides scheduled function execution:
- Standard cron expressions
- Distributed locking (prevents duplicate execution)
- Timezone support
- Conditional execution
modules::cron::KvCronAdapter- File-based coordinationmodules::cron::RedisAdapter- Redis-based coordination (multi-instance)
- Cron Expressions: Standard 5-field cron syntax
- Distributed Locks: Only one instance executes at a time
- Graceful Shutdown: Cancels pending jobs on shutdown
src/modules/cron/cron.rs
Example usage:
State Module
Class:modules::state::StateModule
Purpose: Distributed key-value store with change triggers
Location: src/modules/state/
The State module provides reactive state management:
- Key-value storage
- Watch keys for changes
- Trigger functions on state changes
- Atomic operations
modules::state::adapters::KvStore- File-based or in-memorymodules::state::adapters::RedisAdapter- Redis-backed state
- Get/Set/Delete:
state.get,state.set,state.deletefunctions - Watch Trigger:
statetrigger type - React to state changes - Pattern Matching: Watch key patterns with wildcards
src/modules/state/state.rs
Example usage:
Stream Module
Class:modules::stream::StreamModule
Purpose: Real-time WebSocket pub/sub for client connections
Location: src/modules/stream/
The Stream module enables real-time communication:
- WebSocket-based pub/sub
- Channel-based messaging
- Client subscriptions
- Presence tracking
modules::stream::adapters::RedisAdapter- Redis pub/sub (multi-instance)modules::stream::adapters::KvStore- In-memory (single instance)
- Channels: Named channels for topic-based messaging
- Subscriptions: Clients subscribe to channels
- Broadcast:
stream.broadcastfunction publishes to channel - Presence: Track connected clients
src/modules/stream/stream.rs
Example usage:
Observability Module
Class:modules::observability::OtelModule
Purpose: OpenTelemetry traces, metrics, and logs
Location: src/modules/observability/
The Observability module provides production monitoring:
- Distributed tracing (OTLP)
- Metrics collection
- Structured logging
- Alert rules
- Trace Exporter: Export to OTLP collector (Jaeger, Tempo, etc.)
- Metrics: Built-in metrics for invocations, errors, latency
- Sampling: Configurable sampling with per-operation rules
- Memory Storage: Query traces/metrics via functions
- Alert Rules: Threshold-based alerts
src/modules/observability/
Shell Module
Class:modules::shell::ExecModule
Purpose: File watcher that runs commands on change
Location: src/modules/shell/
The Shell module enables file-based automation:
- Watch files/directories for changes
- Execute shell commands on events
- Glob pattern matching
Module Lifecycle
- Create: Module is instantiated with configuration
- Register Functions: Module registers its built-in functions
- Initialize: Module starts services (HTTP server, background tasks)
- Start Background Tasks: Long-running tasks with shutdown handling
- Destroy: Graceful cleanup on shutdown
Adding Custom Modules
Modules are registered via the inventory pattern:examples/custom_queue_adapter.rs for a complete example.
Next Steps
- Protocol Reference - WebSocket message types
- Configuration Reference - YAML configuration options