Skip to main content
Each iii worker 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

workers:
  - name: iii-queue
    config:
      adapter:
        name: redis
        config:
          redis_url: ${REDIS_URL:redis://localhost:6379}
Every adapter entry has two fields:
  • name — the adapter short name
  • config — adapter-specific config (omit if not needed)

Adapter Reference

Queue

AdapterNameExternal dependency
Built-inbuiltinNone
RedisredisRedis
RabbitMQrabbitmqRabbitMQ

builtin

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

redis

adapter:
  name: redis
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

rabbitmq

adapter:
  name: rabbitmq
  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 worker.

State

AdapterNameExternal dependency
KV StorekvNone
RedisredisRedis
BridgebridgeRemote iii Engine

kv

Default. Supports in-memory or file-based persistence.
adapter:
  name: kv
  config:
    store_method: file_based   # in_memory | file_based
    file_path: ./data/state
    save_interval_ms: 5000

redis

adapter:
  name: redis
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

bridge

Forwards state operations to a remote iii Engine.
adapter:
  name: bridge

Stream

AdapterNameExternal dependency
KV StorekvNone
RedisredisRedis

kv

Default. In-process only.
adapter:
  name: kv
  config:
    store_method: file_based   # in_memory | file_based
    file_path: ./data/stream_store
    save_interval_ms: 5000

redis

adapter:
  name: redis
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

Cron

AdapterNameExternal dependency
KV CronkvNone
Redis CronredisRedis

kv

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

redis

Distributed locking via Redis — ensures each job runs only once across all instances.
adapter:
  name: redis
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

PubSub

AdapterNameExternal dependency
LocallocalNone
RedisredisRedis

local

Default. In-process broadcast — subscribers must be in the same engine process.
adapter:
  name: local

redis

adapter:
  name: redis
  config:
    redis_url: ${REDIS_URL:redis://localhost:6379}

Choosing an Adapter

Single instanceMulti-instance
QueueBuiltinQueueAdapterRedisAdapter or RabbitMQAdapter
StateKvStore (file_based)RedisAdapter
StreamKvStoreRedisAdapter
CronKvCronAdapterRedisCronAdapter
PubSubLocalAdapterRedisAdapter
Use ${VAR:default} syntax in iii-config.yaml to switch adapters per environment without changing the file:
redis_url: ${REDIS_URL:redis://localhost:6379}