iii
Advanced

Adapters

Pluggable backends for iii modules — swap between in-memory, file-based, Redis, and RabbitMQ without changing your application code.

Each iii module that needs persistence or distribution uses an adapter — a pluggable backend that implements a fixed interface. Swap adapters in iii-config.yaml without touching application code.

Pattern

modules:
  - class: modules::queue::QueueModule
    config:
      adapter:
        class: modules::queue::RedisAdapter
        config:
          redis_url: ${REDIS_URL:redis://localhost:6379}

Every adapter entry has two fields:

  • class — the full adapter path
  • config — adapter-specific config (omit if not needed)

Adapter Reference

Queue

AdapterClassExternal dependency
Built-inmodules::queue::BuiltinQueueAdapterNone
Redismodules::queue::RedisAdapterRedis
RabbitMQmodules::queue::RabbitMQAdapterRabbitMQ

modules::queue::BuiltinQueueAdapter

Default. In-process only with retries and DLQ — does not share messages across engine instances.

adapter:
  class: modules::queue::BuiltinQueueAdapter

modules::queue::RedisAdapter

adapter:
  class: modules::queue::RedisAdapter
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

modules::queue::RabbitMQAdapter

adapter:
  class: modules::queue::RabbitMQAdapter
  config:
    amqp_url: ${RABBITMQ_URL:amqp://localhost:5672}
    max_attempts: 3
    prefetch_count: 10
    queue_mode: standard   # standard | fifo

For retry behavior, dead-letter queues, and full config reference, see the Queue module.


State

AdapterClassExternal dependency
KV Storemodules::state::adapters::KvStoreNone
Redismodules::state::adapters::RedisAdapterRedis
Bridgemodules::state::adapters::BridgeRemote iii Engine

modules::state::adapters::KvStore

Default. Supports in-memory or file-based persistence.

adapter:
  class: modules::state::adapters::KvStore
  config:
    store_method: file_based   # in_memory | file_based
    file_path: ./data/state
    save_interval_ms: 5000

modules::state::adapters::RedisAdapter

adapter:
  class: modules::state::adapters::RedisAdapter
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

modules::state::adapters::Bridge

Forwards state operations to a remote iii Engine.

adapter:
  class: modules::state::adapters::Bridge

Stream

AdapterClassExternal dependency
KV Storemodules::stream::adapters::KvStoreNone
Redismodules::stream::adapters::RedisAdapterRedis

modules::stream::adapters::KvStore

Default. In-process only.

adapter:
  class: modules::stream::adapters::KvStore
  config:
    store_method: file_based   # in_memory | file_based
    file_path: ./data/stream_store
    save_interval_ms: 5000

modules::stream::adapters::RedisAdapter

adapter:
  class: modules::stream::adapters::RedisAdapter
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

Cron

AdapterClassExternal dependency
KV Cronmodules::cron::KvCronAdapterNone
Redis Cronmodules::cron::RedisCronAdapterRedis

modules::cron::KvCronAdapter

Default. Process-local locks — jobs may run on every instance in multi-instance deployments.

adapter:
  class: modules::cron::KvCronAdapter

modules::cron::RedisCronAdapter

Distributed locking via Redis — ensures each job runs only once across all instances.

adapter:
  class: modules::cron::RedisCronAdapter
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

PubSub

AdapterClassExternal dependency
Localmodules::pubsub::LocalAdapterNone
Redismodules::pubsub::RedisAdapterRedis

modules::pubsub::LocalAdapter

Default. In-process broadcast — subscribers must be in the same engine process.

adapter:
  class: modules::pubsub::LocalAdapter

modules::pubsub::RedisAdapter

adapter:
  class: modules::pubsub::RedisAdapter
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

Choosing an Adapter

Single instanceMulti-instance
QueueBuiltinQueueAdapterRedisAdapter or RabbitMQAdapter
StateKvStore (file_based)RedisAdapter
StreamKvStoreRedisAdapter
CronKvCronAdapterRedisCronAdapter
PubSubLocalAdapterRedisAdapter

Environment variables

Use ${VAR:default} syntax in iii-config.yaml to switch adapters per environment without changing the file:

redis_url: ${REDIS_URL:redis://localhost:6379}

On this page