Skip to main content
Modules are the core building blocks of the iii framework. Each module provides specific functionality and can be configured independently through the config.yaml file.

Architecture

The iii framework uses a modular architecture where each module:
  • Implements the Module trait
  • Can use different adapters for storage/communication backends
  • Registers functions and triggers with the engine
  • Runs independently with isolated configuration

Available Modules

Core Modules

These modules are enabled by default and provide essential functionality:

HTTP

Expose functions as HTTP/REST endpoints

Queue

Asynchronous message queue with pub/sub

Cron

Schedule functions with cron expressions

Stream

Real-time WebSocket data streams

State

Persistent key-value state management

Observability

OpenTelemetry traces, metrics, and logs

Module Configuration

Modules are configured in config.yaml under the modules section:
config.yaml
modules:
  - class: modules::api::RestApiModule
    config:
      port: 3111
      host: 127.0.0.1
      
  - class: modules::queue::QueueModule
    config:
      adapter:
        class: modules::queue::RedisAdapter
        config:
          redis_url: redis://localhost:6379

Adapter Pattern

Most modules support pluggable adapters for different backends:
modules:
  - class: modules::stream::StreamModule
    config:
      adapter:
        class: modules::stream::adapters::RedisAdapter  # Redis backend
        config:
          redis_url: redis://localhost:6379
Common adapter options:
  • KvStore - File-based or in-memory storage (default)
  • RedisAdapter - Redis backend for distributed systems
  • Custom - Implement your own adapter

Module Lifecycle

  1. Create - Module is instantiated with configuration
  2. Initialize - Registers functions and triggers
  3. Start - Background tasks begin (optional)
  4. Destroy - Cleanup on shutdown

Common Patterns

Triggers

Modules register trigger types that invoke functions based on events:
export default iii({
  triggers: {
    'on-user-create': {
      type: 'queue',
      config: { topic: 'users.created' },
    },
  },
});

Functions

Modules expose functions callable via SDK or other modules:
// Queue module function
await client.call('queue.enqueue', {
  topic: 'notifications',
  data: { userId: 123 },
});

Next Steps

HTTP Module

Learn about REST API endpoints

Custom Modules

Build your own modules

Build docs developers (and LLMs) love